Hoe bouw je een moderne Business Rules Engine, een snel overzicht
Dit is een conceptueel overzicht op hoog niveau van de architectuur van de business rules engine. Het staat boven de echte code. Als u een business rules engine aan het bouwen bent – is het zeer waarschijnlijk dat u deze tekst nuttig vindt.
Ooit heb ik een Business Rules Engine gebouwd die bedrijfsautomatisering mogelijk maakte voor kleine en middelgrote bedrijven en die ook alle mogelijkheden en potentie had om grote ondernemingen goed van dienst te zijn. Het was een weg van een gewone software-applicatie naar een verfijnde en complexe oplossing die voldeed aan de strenge eisen van schaalbaarheid, onderhoudbaarheid en uitbreidbaarheid. Deze tekst zal een overzicht geven van wat de Business Rules Engine is en een van de moderne benaderingen beschrijven die u zou kunnen overwegen bij het bouwen van dit soort software.
Om te beginnen is het belangrijk om basisbegrippen te definiëren. Business rules engines bestaan al heel lang in de industrie in een of andere vorm en er zijn enkele definities gegeven voor zowat elke term die we gaan gebruiken. Laten we beginnen met een “business rule” – er is een bekende definitie voor deze term. Een “business rule” is dus:
Een verklaring die een of ander aspect van het bedrijf definieert of beperkt. Zij is bedoeld om de bedrijfsstructuur te bevestigen of om het gedrag van het bedrijf te controleren of te beïnvloeden.
T. Morgan, Bedrijfsregels en informatiesystemen. Boston: Addison-Wesley Publishing, 2002
Business rules hebben een zeer breed toepassingsgebied en kunnen worden toegepast op elk aspect van het bedrijf. Bijvoorbeeld, de regel “Als een klant binnenkomt, begroet hem dan met een warme glimlach en een vriendelijk “Hallo” wordt door de bedrijfsmedewerker toegepast bij ontmoetingen met klanten. Een andere regel kan de aanpak van routinetaken door een specifieke rol in een bedrijf definiëren of aan banden leggen. Met de gestaag groeiende populariteit van softwareoplossingen zoals CRM-systemen en de totale integratie van software in een verscheidenheid van bedrijfsdomeinen, zijn de meeste bedrijfsprocessen gedeeltelijk of volledig gegevensgeoriënteerd geworden. Dit heeft geleid tot de transformatie van bedrijfsregels zodat ze softwaregeoriënteerd zijn geworden, bijvoorbeeld, de bedrijfsregel “Wanneer een klant iets koopt in onze winkel, bel hem dan later op om te vragen of hij nog andere gerelateerde goederen wil kopen” is getransformeerd in een modernere “Wanneer een klant iets koopt in onze online winkel, stuur hem dan later een e-mail met een lijst van andere gerelateerde goederen”. Tegenwoordig houden veel bedrijven zich bij hun dagelijkse activiteiten voornamelijk bezig met gegevens. Aangezien de meeste bedrijven, ongeacht hun omvang, softwareoplossingen hebben geïntegreerd in hun bedrijfsactiviteiten, kan de definitie van de term “bedrijfsregel” op een meer specifieke manier worden gedefinieerd door een verduidelijking (vetgedrukt) toe te voegen aan de hierboven vermelde definitie van T. Morgan:
Een bedrijfsregel is een verklaring die een bepaald aspect van het bedrijf definieert of beperkt. Het is bedoeld om de bedrijfsstructuur te bevestigen of om het gedrag van het bedrijf te controleren of te beïnvloeden. Het wordt opgeslagen als een gegevensconstructie in de persistente opslag en bevat een atomair pakket van bedrijfslogica. Het wordt via een softwareoplossing automatisch beheerd en toegepast op de bedrijfsprocessen.
Na de term “bedrijfsregel” is gedefinieerd, wordt de term “Business Rules Engine Management System” (BRMS) als volgt gedefinieerd:
BRMS is een softwareoplossing voor het beheren (opslaan, bewerken en verwijderen, enz.) van bedrijfsregels en voor het toepassen ervan op de bedrijfsprocessen van het bedrijf.
De aanschaf van een licentie en de integratie van commerciële BRMS’en in de IT-infrastructuur van een bedrijf kunnen zeer duur zijn, zodat bedrijven vaak interne oplossingen implementeren wanneer zij bedrijfsprocessen of andere soorten processen willen automatiseren.
BRMS’en kunnen een essentieel en vitaal onderdeel van elk bedrijf worden. Soms kan het succes van een bedrijf afhangen van de bedrijfsregels die het heeft en hoe goed deze bedrijfsregels worden beheerd en toegepast.
De gegevensconstructie van bedrijfsregels
Een bedrijfsregel kan worden weergegeven als een consequente reeks atomaire opdrachten. De commando’s kunnen voorwaardelijke gegevensanalyse, wachttijdcommando’s, actieuitvoeringscommando’s, enz. omvatten. Het voorbeeld van de bedrijfsregel “Als een klant iets koopt in onze onlinewinkel, stuur hem dan later een e-mail met een lijst van andere verwante goederen” is een goed en algemeen voorbeeld en veel andere bedrijfsregels kunnen een zeer vergelijkbare logische structuur hebben:
De regelverwerkingsstroom wordt gestart wanneer een aankoop is gedaan en een aantal bedrijfslogica wordt toegepast door het uitvoeren van het commando “Stuur de koper een e-mail met relevante goederenaanbiedingen”. Het kan gebeuren dat de koper het e-mailabonnement heeft uitgeschakeld. Dan moet de extra voorwaarde aan de bedrijfsregel worden toegevoegd – “als het e-mailabonnement van de koper is ingeschakeld”:
De opdrachten worden vervolgens uitgevoerd en er is nu een opdracht voor gegevensanalyse om te controleren of de koper een actief e-mailabonnement heeft. Zo ja, ga dan verder met de uitvoering van de volgende opdracht van de bedrijfsregel. En zo niet – ga dan niet verder, de business rule wordt als voltooid beschouwd, de verwerkingsstroom stopt, de volgende commando’s worden niet uitgevoerd.
De koper kan ook een SMS-abonnement hebben, en als dat actief is, moet er ook een ander commando zijn – “Stuur een SMS met gerelateerde promo-aanbieding”. Hiermee wordt vertakking geïntroduceerd in de logica van de bedrijfsregel:
De vertakkingen van de regel worden onafhankelijk van elkaar verwerkt. De verwerking van een van de takken kan stoppen bij de opdracht om de voorwaarde te evalueren en een andere tak kan tot het einde worden verwerkt.
De UI van de BRMS-clienttoepassing voor de weergave van een bedrijfsregel kan op verschillende manieren worden geïmplementeerd (elke grafische weergave in de vorm van een boom werkt):
5. De verwerkingseenheid voor analyseopdrachten verbruikt het bericht met de routeringssleutel analysis
uit de interne uitwisseling. Op basis van de evaluatie van de voorwaarden die zijn beschreven in het analysecommando van de bedrijfsregel en met behulp van de bedrijfsgebeurtenisgegevens, kan de regeluitwerkingsstroom hier worden voortgezet of gestopt. Als het stopt – worden geen verdere bedrijfsregel commando’s uitgevoerd. Als de uitvoeringsstroom doorgaat, vraagt de processor van de analyseopdracht Manager om de volgende opdrachten van de bedrijfsregel, haalt deze op en publiceert nog een bericht naar de interne uitwisselingsserver.
6. Ten slotte is er een bericht in de interne uitwisseling, dat klaar is voor de actie-opdrachtverwerker om te worden geconsumeerd. Als de uitvoeringsstroom van de bedrijfsregel tot aan dit commando is gekomen, betekent dit dat in deze tak van de regel elke voorwaarde die in het gegevensanalysecommando was opgenomen, waar was en dat de uitvoeringsstroom niet werd onderbroken. De actie-opdrachtverwerker voert de actie uit, b.v. stuurt een e-mail.
Dit soort grafiek traversal is depth-first, en wanneer een commando met 2 of meer kind-opdrachten wordt aangetroffen, begint de gelijktijdige depth-first traversal voor elke tak als gevolg van de asynchrone aard van de business rule verwerking in het beschreven systeem.
Scaling
De beschreven aanpak maakt niet alleen een grote scheiding van zorgen mogelijk, maar kan ook veel geld besparen als het gaat om het betalen van de IaaS-rekeningen. Eindgebruikers maken een verscheidenheid aan bedrijfsregels met verschillende aantallen commando’s van verschillende soorten en verschillende aantallen vertakkingen. Maar de veel voorkomende schaalscenario’s zijn als volgt:
1. Het aantal business events neemt toe – de business event consumer schaalt op.
2. Het aantal business rules dat geassocieerd (getriggerd) wordt door de business events neemt toe – de initiële command processor schaalt mee op met de manager.
3. Er zijn veel analyse commands in de business rules – de analyse command processor schaalt op
4. Er moeten te veel actie commands worden uitgevoerd – de actie command processor schaalt op.
Betrouwbaarheid
Het bloedvat van het systeem is het transport. Om het systeem operationeel te houden onder hoge belasting, moet de interne berichtenuitwisseling zeer betrouwbaar zijn. RabbitMQ voorziet in clustering en voldoet goed aan de betrouwbaarheidseisen (https://www.rabbitmq.com/clustering.html).
Andere opdrachttypen
Er kan nog andere bedrijfslogica in het systeem worden ingevoerd. Een van de populaire en veelgevraagde commandotypes is een “time-wait”-commando (bv. “Wacht 45 minuten, ga dan verder”). Met de invoering van het “time-wait”-commando is de verwerking van de bedrijfsregel niet langer een real-time verwerking, aangezien zij gedurende enige tijd kan worden opgeschort. Dergelijke veranderingen vereisen bijkomende commandoprocessoren en een paar aanpassingen aan de gegevensstructuren die buiten het bestek van deze tekst vallen. Knoeien met de tijd kan moeilijk zijn en het schrijven van een service die de schema’s en de tijd bedient kan een uitdaging zijn, hier is een voorbeeld van een goede: https://github.com/nextiva/krolib
Derde partij alternatieven
Er zijn bekende alternatieven van rules engines/workflow engines, hier zijn top 3 van (IMHO):
1. Comunda – het is een volwassen product met community en enterprise versies, die je wellicht wilt gebruiken. Uiteraard is de enterprise versie betaald.
2. Luigi – het is een workflow engine tool ontwikkeld door Spotify voor hun interne behoeften, maar al gebruikt door tientallen andere bedrijven.
3. Apache Airflow – dit is een ander bekend product dat heeft bewezen capabel, handig en aanpasbaar te zijn.
Wat deze tools verbindt, is dat ze allemaal gebruik maken van direct acyclic graphs als de datastructuur die de business rules of workflows representeert. Het is geen verrassing.
Er kunnen andere producten zijn die de aandacht waard zijn, maar elk onderzoek zou moeten beginnen met deze drie.
Conclusie
Het bouwen van je eigen business rules engine kan een uitdaging zijn, maar het is de moeite waard. Je krijgt niet alleen een systeem in huis, maar het is ook gebouwd volgens de specifieke eisen van je bedrijf. Een goed DevOps-team is een must als het gaat om het handhaven van betrouwbaarheid, schaalbaarheid en monitoring. Uiteindelijk krijg je een fantastisch product waar je trots op kunt zijn.