BizTalk/Migrering

BRE-migrering: vad som faktiskt går att flytta till Azure

Under flera år var standardsvaret att Business Rules Engine inte har någon motsvarighet i Azure, och att varje policy därför måste skrivas om till kod. Det svaret är föråldrat. Azure Logic Apps Rules Engine ingår numera i Logic Apps Standard och innehåller BizTalks egen BRE-runtime, vilket betyder att befintliga policies kan återanvändas i stället för att tolkas om av en utvecklare.

Det är goda nyheter, och det är också där de flesta kalkyler går fel, fast åt andra hållet. Att runtime finns kvar betyder inte att hela er regelmassa följer med. Skillnaden mellan de policies som lyfter rakt över och de som inte gör det avgör er tidsuppskattning, och den skillnaden går att avgöra idag, innan projektet startar.

Det som följer med

Rules Engine bygger på samma inferensmotor som ni redan kör: Rete-algoritmen, forward chaining, agenda och prioritet fungerar som förut. Ni behåller alltså semantiken i era regler, inklusive kedjningsbeteendet, som är den del som är svårast att återskapa manuellt och lättast att få fel om någon skriver om reglerna till if-satser.

Det som inte följer med — och som styr er estimering

Databasfakta stöds inte. Policies som läser DB facts måste tas bort eller skrivas om till en annan faktatyp innan export. Det här är den enskilt viktigaste raden på hela sidan, för det är exakt de policies som brukar vara verksamhetskritiska: prislistor, partnerspecifika villkor och gränsvärden som någon en gång valde att läsa direkt ur en tabell i stället för att skicka in som fakta.

Konsekvensen är att er BRE-migrering inte har en kostnad utan två, och att fördelningen mellan dem är känd redan innan ni börjar. Räkna dem var för sig:

Räkna kategorierna i BizTalkRuleEngineDb innan ni sätter en siffra. En miljö där tio procent av policyerna använder databasfakta och en där hälften gör det är två helt olika projekt, trots att de har samma antal policies.

Så exporterar ni

Regler exporteras från BizTalk med Business Rules Engine Deployment Wizard: välj Export Policy/Vocabulary to file from database och peka ut BizTalkRuleEngineDb. Exporten görs per policy, och det finns ingen massexport, så planera för att det är en lista att beta av, inte ett kommando att köra.

På Azure-sidan skapas projektet i Visual Studio Code som ett Logic apps with rules engine project, och regler redigeras i Microsoft Rules Composer, som installeras separat.

Vad vi skulle välja

Lyft de policies som kan lyftas, och gör det tidigt. Poängen är inte att spara timmar utan att bevisa att regelsemantiken överlever flytten medan ni fortfarande har BizTalk igång att jämföra mot. Kör samma fakta genom båda motorerna och jämför utfallet regel för regel. Det är den enda verifiering som betyder något, och den blir omöjlig att göra i efterhand.

Skriv inte om regler till C# bara för att de ser enkla ut. En regelmassa som flyttas till kod förlorar det som gjorde BRE värt besväret: att verksamheten kunde ändra ett gränsvärde utan att beställa en release. Har ni bestämt er för att lämna regelmotorn helt är det ett eget beslut med egen motivering, inte en bieffekt av en plattformsflytt.

För policies med databasfakta: flytta datat till fakta som skickas in, inte till en regel som hämtar själv. Det är ändå den designen ni vill ha på andra sidan.

En sak till, om prestanda

.NET-fakta utvärderas snabbare än XML-fakta, precis som i BizTalk. Och regler med många OR-operatorer expanderar analysnätet kraftigt. Har ni policies som varit långsamma i BizTalk av det skälet blir de inte snabbare av att byta värd. Migreringen är ett bra tillfälle att skriva om dem på disjunktiv normalform, men gör det som ett separat steg efter att flytten är verifierad, aldrig samtidigt.

Nästa steg

Ni behöver antalet policies och hur många av dem som rör databasfakta innan någon kan uttala sig om tid. Ett inventeringsskript som räknar BRE-policies och vokabulär tillsammans med resten av miljön finns som beta. Komplettera dess grundräkning med en granskning av policyernas faktatyper. Därefter visar kostnadssidan hur den siffran blir persondagar.