Sådan opbygger du en moderne Business Rules Engine, et hurtigt overblik
Dette er et konceptuelt overblik på højt niveau over arkitekturen for en Business Rules Engine. Den ligger over den egentlige kode. Hvis du er ved at bygge en business rules engine – er der stor sandsynlighed for, at du kan finde denne tekst nyttig.
Engang byggede jeg en Business Rules Engine, som muliggjorde forretningsautomatisering for små og mellemstore virksomheder, og som også havde alle muligheder og potentiale til at tjene godt til store virksomheder. Det var en vej fra en almindelig softwareapplikation til en sofistikeret og kompleks løsning, der opfyldte de hårde krav til skalerbarhed, vedligeholdbarhed og udvidelsesmuligheder. Denne tekst vil give et overblik over, hvad Business Rules Engine er, og beskrive en af de moderne tilgange til opbygning af den, som du kan overveje, når du skal opbygge denne type software.
Til at begynde med er det vigtigt at definere grundlæggende begreber. Business rule engines har eksisteret i branchen i ret lang tid i en eller anden form, og der er givet nogle definitioner for stort set alle de udtryk, vi kommer til at bruge. Lad os starte med en “forretningsregel” – der findes en velkendt definition for dette begreb. En “forretningsregel” er således:
En erklæring, der definerer eller begrænser et eller andet aspekt af forretningen. Den har til formål at bekræfte forretningsstrukturen eller at kontrollere eller påvirke forretningens adfærd.
T. Morgan, Business Rules and Information Systems. Boston: Addison-Wesley Publishing, 2002
Businessregler har et meget bredt anvendelsesområde og kan anvendes på alle aspekter af forretningen. F.eks. anvendes reglen “Når en kunde kommer ind, skal du hilse på ham med et varmt smil og et venligt “Hej” af virksomhedens medarbejder, når han møder kunderne. En anden regel kan definere eller begrænse tilgangen til løsning af rutineopgaver for en bestemt rolle i en virksomhed. Med den stadigt stigende popularitet af softwareløsninger som CRM-systemer og med den totale integration af software til en række forskellige forretningsområder er de fleste forretningsprocesser blevet helt eller delvist dataorienterede. Dette har ført til, at forretningsreglerne er blevet softwareorienterede, f.eks. er forretningsreglen “Når en kunde køber noget i vores butik, skal du ringe til ham senere og spørge, om han ønsker at købe andre relaterede varer” blevet ændret til en mere moderne “Når en kunde køber noget i vores onlinebutik, skal du sende ham en e-mail med en liste over andre relaterede varer senere”. I dag beskæftiger mange virksomheder sig mest med data i deres daglige drift. I betragtning af, at de fleste virksomheder af alle størrelser har integreret softwareløsninger i deres forretningsaktiviteter, kan definitionen af begrebet “forretningsregel” defineres mere specifikt ved at tilføje en præcisering (den er med fed skrift) til ovennævnte definition af T. Morgan:
En forretningsregel er et udsagn, der definerer eller begrænser et eller andet aspekt af forretningen. Den har til formål at bekræfte forretningsstrukturen eller at kontrollere eller påvirke forretningens adfærd. Den gemmes som en datakonstruktion i det vedvarende lager og indeholder en atomar pakke af forretningslogik. Den forvaltes og anvendes automatisk i virksomhedens forretningsprocesser via en softwareløsning.
Når begrebet “forretningsregel” er defineret, defineres begrebet “Business Rules Engine Management System” (BRMS) som følger:
BRMS er en softwareløsning til forvaltning (lagring, redigering og sletning osv.) af forretningsregler samt til anvendelse af dem i virksomhedens forretningsprocesser.
Standalone kommercielle BRMS’er kan være ekstremt dyre at købe licensen og integrere dem i virksomhedens it-infrastruktur, og derfor implementerer virksomhederne ofte interne løsninger, når de støder på et behov for at automatisere forretningsprocesser eller andre former for processer.
BRMS’er kan blive en væsentlig og vital del af enhver virksomhed. Nogle gange kan en virksomheds succes afhænge af de forretningsregler, den har, og hvor godt disse forretningsregler forvaltes og anvendes.
Datakonstruktionen for forretningsregler
En forretningsregel kan repræsenteres som en konsekvent serie af atomare kommandoer. Kommandoerne kan omfatte betingede dataanalyser, tidsvente-kommandoer, handlingsudførelseskommandoer osv. Eksemplet med forretningsreglen “Når en kunde køber noget i vores onlinebutik, send ham senere en e-mail med en liste over andre relaterede varer” er et godt og generisk eksempel, og mange andre forretningsregler kan have en meget lignende logisk struktur:
Flowet for regelbehandling startes, når der er foretaget et køb, og der anvendes noget forretningslogik ved at udføre kommandoen “Send køberen en e-mail med relevante varetilbud”. Det kan ske så, at køberen har deaktiveret e-mail-abonnementet. Så skal der tilføjes en yderligere betingelse til forretningsreglen – “hvis køberen har aktiveret e-mail-abonnement”:
Kommandoerne udføres i forlængelse heraf, og der er nu en dataanalysekommando til at kontrollere, om køberen har et aktivt e-mail-abonnement. Hvis det er tilfældet – fortsæt til udførelsen af den næste kommando i forretningsreglen. Og hvis ikke – fortsæt ikke, forretningsreglen betragtes som afsluttet, behandlingsflowet stopper, og de efterfølgende kommandoer udføres ikke.
Køberen kan også have et SMS-abonnement, og hvis det er aktivt, bør der også være en anden kommando – “Send en SMS med tilhørende kampagnetilbud”. Dermed indføres forgrening i forretningsreglens logik:
Reglens grene afvikles uafhængigt af hinanden. Behandlingen af en af grenene kan stoppe ved kommandoen til evaluering af betingelsen, og en anden gren kan behandles frem til slutningen.
UI’et af BRMS-klientapplikationen til repræsentation af en forretningsregel kan implementeres på forskellige måder (enhver form for grafisk repræsentation i form af et træ kan fungere):
Den grafiske datakonstruktion af forretningsregler er en rettet rodfæstet trægraf (en rettet acyklisk graf, der har et træ som en underliggende urettet graf). Vertices i forretningsregelgrafen er repræsenteret med forskellige former for kommandoer: dataanalysekommandoer, handlingsudførelseskommandoer, tid-vente-kommandoer osv. Alle rettede, rodfæstede ud-træer har en rod – et toppunkt, hvorfra alle kanter peger ud. Hver regel starter således med et særligt punkt (eller rodpunkt i grafteori) – det punkt, som er indgangspunktet for regelbehandlingen.
CRUD-operationer på forretningsregel-datakonstruktionen
Da datakonstruktionen er repræsenteret med et træ med en rettet rod og aldrig nogen anden form for graf, slipper vi for de ulemper, der følger med lagring af generelle grafstrukturer med RDBMS (som f.eks. lagring af hjørner og kanter i forskellige tabeller, hvilket kan resultere i et øget antal opslag for en enkelt regeloprettelse osv.) Og dette er kritisk, fordi det er klart, at under den normale drift af BRMS dataopslag sker meget oftere, end andre operationer som indsætninger, opdateringer eller sletninger.
Selvfølgelig som en påmindelse – hver vertex i forretningsreglen repræsenterer en atomar kommando. Den gemmes i RDBMS-tabellen som en post med attributter som f.eks. kommandotype, beskrivelse og andre supplerende data. I et træ har hvert toppunkt en og kun en forælder (undtagen rodpunktet, som ikke har nogen forælder), og derfor bør hver post indeholde et ID for det overordnede toppunkt. Det er også praktisk at have en anden tabel, der indeholder regelposterne med de data, der er relevante for selve forretningsreglen. Der er ikke noget problem med at lagre forretningsreglens datakonstruktioner af nogen kompleksitet med denne fremgangsmåde.
Den CRUD-operationer er temmelig ligetil. Ændringer af forretningsreglen kan kræve opdateringer af en eller begge tabeller – regel eller kommando. Ved sletning eller indsættelse af kommandoer er det nødvendigt at vedligeholde referencerne mellem kommandoerne (det er i det væsentlige at slette eller indsætte knuder i et træ).
En af BRMS-komponenterne, lad os kalde den en manager, skal udføre de beskrevne databaseoperationer og levere et API til CRUD-operationer på forretningsregler.
Behandlingen af forretningsreglen
Behandlingen af forretningsreglerne starter, når en bestemt forretningsbegivenhed sker. Det kan være hvad som helst – en bruger har logget ind, et køb er blevet foretaget, et beløb er blevet overført osv. Denne form for aktivitet bør spores, og BRMS bør informeres om den via en eller anden transport. AMQP er højst sandsynligt bedst egnet til denne form for opgave.