Solutional
ET EN

Camunda töövoomootor: eelised ja kompromissid_

Kuidas kasutame Camunda töövoomootorit mikroteenuste ja inimeste tehtavate ülesannete koordineerimiseks ning millised on selle eelised, versioonihalduse probleemid ja migratsioonidega seotud kompromissid.

Camunda on äriprotsesside modelleerimise ja käitamise platvorm. Selle Workflow Engine toetab BPMN-i ning Decision Engine DMN-i. Siin kirjeldatud kogemus keskendub töövoomootorile ja sellele, kuidas oleme seda kasutanud mikroteenuste ning inimeste tehtava töö koordineerimiseks.

Kuidas kasutame Camunda töövoomootorit

Meie peamine kasutusjuht ühendab kaks levinud ülesannet:

  • sõltumatute mikroteenuste vaheliste väljakutsete koordineerimine;
  • inimeste tehtavate ülesannete haldamine.

Ühes projektis täidavad mitu väikest teenust igaüks kitsast vastutusala ning teavad üksteisest võimalikult vähe. Kujuta ette eraldi teenuseid kasutajate, tellimuste ja arvete jaoks. Kui on vaja koostada arve, ei kutsu arveteenus kasutaja- ja tellimuseteenust otse välja. Selle asemel koordineerib protsessi Camunda.

Arve koostamise etapis hangib töövoog kliendiandmed ja tellimuse andmed ning kutsub seejärel arveteenuse välja kogu vajaliku infoga. Protsessimudel näitab nende tegevuste järjekorda ja tingimusi, mille korral iga tegevus käivitatakse.

Teenuseülesanded mikroteenuste koordineerimiseks

Camunda kujutab automatiseeritud tööd teenuseülesandena. Teenuseülesandeid saab teostada sisemiste Java delegaatidena või väliste ülesannetena, mida sõltumatud töötlusprotsessid regulaarselt pärivad ja täidavad.

Oleme peamiselt kasutanud sisemisi teenuseülesandeid. Kui teostus asub töövoo koodi lähedal, on seda meie projektis lihtsam leida ja hooldada. Sisemine ülesanne teostatakse Java klassina, mis kasutab nõutud liidest ja millele viidatakse BPMN-diagrammi vastavas ülesandes.

Camunda saab töövoost ka otse REST-otspunkte välja kutsuda. Valisime selle asemel Java delegaadid, sest ühtne teostusviis muudab koodibaasi lihtsamini mõistetavaks ja testitavaks.

Kasutajaülesanded inimeste tehtava töö jaoks

Kasutajaülesanne tähistab tööd, mille peab tegema inimene. Tellimuse näidet jätkates on saadetise ettevalmistamine ja komplekteerimine inimese ülesanne, mitte automatiseeritud teenuse väljakutse.

Meie back-office-rakendus saab uued ülesanded RabbitMQ järjekorra kaudu ja kuvab need töötajatele. Töövoomootori REST API kaudu saab ülesandeid enda vastutusele võtta, vabastada, edasi lükata, lõpetada ja pärida.

Nii ei pea töötajad ülesannete vastutajaid käsitsi jälgima. Inimene võtab ülesande enda vastutusele, teeb töö ära ja märgib ülesande lõpetatuks. Seejärel viib Camunda protsessi järgmisse etappi. Võimalikud kasutajad ja rühmad saab seadistada nii, et iga ülesandetüüp kuvatakse ainult sobivatele inimestele.

Sündmused, taimerid ja väravad

BPMN pakub protsessi käitumise juhtimiseks taimereid, sõnumeid, tingimusväravaid, piirisündmusi ja muid elemente. Nende abil saab saata meeldetuletusi, oodata väliseid sündmusi, hargneda ärireeglite alusel või jätta ebavajalikud ülesanded vahele.

Lihtsustatud tellimuse töövoog võiks välja näha selline:

Camunda töövoog piirisündmusena taimeri, kasutajaülesannete, teenuseülesannete, tingimusvärava ning algus- ja lõpusündmustega kliendi ostuprotsessi automatiseerimiseks

Camunda kasutamise eelised

Äriprotsessid muutuvad varakult nähtavaks

Protsessi saab joonistada enne täieliku teostuse olemasolu. See annab äri- ja tehnilistele osapooltele töövoost ühise vaate ning aitab lihtsamini avastada puuduvaid etappe, ebaselgeid vastutusalasid ja pudelikaelu.

Nende probleemide leidmine enne arenduse algust säästab nii aega kui ka raha. BPMN-diagramm annab mittetehnilistele osapooltele ka konkreetse viisi rakenduse soovitud käitumise selgitamiseks ja ülevaatamiseks.

Pärast arenduse algust muutub protsessimudel elavaks dokumentatsiooniks. Kuna mootor käitab sama diagrammi, on väiksem tõenäosus, et dokumentatsioon tegelikkusest lahkneb.

Uusi etappe on lihtsam lisada

Uue tegevuse lisamine algab tavaliselt äriprotsessi muutmisest. Kui protsess on kontseptuaalselt paigas, lisab meeskond vastavad BPMN-elemendid ja teostab vajaliku teenuseülesande loogika.

See ei kaota vajadust hoolika disaini järele, kuid annab muudatustele nähtava struktuuri ja hoiab tervikprotsessi arusaadavana.

Kasulikud funktsioonid on platvormis olemas

Camunda sisaldab paljusid võimalusi, mis muidu vajaksid eraldi arendamist:

  • taimerid ja sõnumid protsessi täitmise juhtimiseks;
  • ebaõnnestunud teenuseülesannete automaatsed korduskatsed;
  • Java API-d rakendustega integreerimiseks;
  • inimeste ülesannete haldamine;
  • REST API-d väliste süsteemide ja operatiivtööriistade jaoks;
  • protsessieksemplaride ja intsidentide nähtavus.

Eriti kasulik on olnud REST API dokumentatsioon. Kasutame API-t nii integratsioonide jaoks kui ka nende protsessieksemplaride tõrkeotsinguks, mis ei liigu töövoos ootuspäraselt edasi.

Cockpit aitab süsteemi käitada

Camunda Cockpit kuvab juurutatud protsessiversioone, aktiivseid eksemplare, nende praeguseid etappe ja intsidente. See võimaldab teha paljusid samu operatiivtoiminguid, mida saab teha REST API kaudu.

Kui protsess ebaõnnestub, annab Cockpit sageli piisavalt konteksti probleemi tuvastamiseks, ilma et peaks läbi otsima suuri logimahte. See lühendab intsidentide uurimist ja muudab töövoo seisundi tugimeeskonnale nähtavaks.

Camunda pakub ka ettevõtteversiooni täiendavate operatiiv- ja analüüsivõimalustega. Meil ei ole seda vaja läinud, sest kogukonnaversioon on meie nõuded täitnud.

Camunda probleemid ja kompromissid

Peamine probleem on protsesside versioonihaldus. Uuendatud BPMN-mudeli juurutamisel tekib uus protsessidefinitsioon, kuid olemasolevad protsessieksemplarid jätkavad tavaliselt versioonis, milles need käivitati.

Oletame, et lisame maksmise ja arve koostamise vahele teenuseülesande, mis salvestab makseandmed:

Camunda töövoog, kuhu on ostuprotsessi käigus makseandmete salvestamiseks lisatud teenuseülesanne

Pärast juurutamist on süsteemis nii protsessi vana kui ka uus versioon. Tellimused võivad seejärel olla mitmes erinevas olukorras.

Uued protsessieksemplarid

Kõige lihtsam on tellimus, mille protsess ei ole veel alanud. Kui selle protsess käivitatakse, kasutab Camunda viimati juurutatud versiooni.

Vanad eksemplarid enne muudetud etappi

Tellimus võib endiselt töötada protsessi eelmises versioonis ega pruugi olla maksmise etappi veel lõpetanud. Kui see jätkab ilma migreerimiseta, jätab protsess äsja lisatud ülesande „Salvesta makseandmed” vahele, sest selles versioonis sellist etappi ei ole.

Camunda toetab protsessieksemplaride migreerimist, kuid migratsiooniplaanid ei ole alati lihtsad ega operatiivset riski väärt. Selles näites võib olla aktiivsete eksemplaride migreerimisest turvalisem leppida sellega, et klient peab tulevase tellimuse korral makseandmed uuesti sisestama.

Vanad eksemplarid pärast muudetud etappi

Migreerimine muutub keerulisemaks, kui eksemplar on uuest ülesandest juba möödunud. Selle tagasi liigutamine võib korrata juba lõpetatud äritoiminguid ning tekitada vastuolu töövoo oleku ja tegelikkuse vahel.

Seetõttu väldime üldjuhul aktiivsete eksemplaride migreerimist, välja arvatud juhul, kui äriline mõju muudab selle vajalikuks. Vanad protsessiversioonid kaovad aja jooksul loomulikult, kui nende ülejäänud eksemplarid lõpetavad.

Kood peab toetama vanemaid protsessiversioone

Camunda versioonib BPMN-diagramme, kuid ei säilita automaatselt Java delegaatkoodi vanu versioone. Delegaat, mida viimases protsessiversioonis enam ei kasutata, võib olla endiselt vajalik mõnele vanemale protsessieksemplarile.

Kujuta ette, et eemaldame ülesande „Salvesta makseandmed” ja kustutame selle delegaadi. Viimane töövoog ei vaja seda klassi enam, kuid eelmise juurutuse aktiivsed eksemplarid vajavad. Liiga varane eemaldamine võib põhjustada nende eksemplaride ebaõnnestumise.

Meie lahendus on märkida sellised delegaadid aegunuks, mitte neid kohe kustutada. Vaatame regulaarselt vanemad juurutused üle, eemaldame need, millel pole aktiivseid eksemplare, ning kustutame alles seejärel koodi, mida päriselt enam ei kasutata.

Üldisem õppetund on, et iga protsessimuudatust tuleb hinnata varasemate aktiivsete versioonide suhtes. Tavaliselt harjub meeskond sellega aja jooksul, kuid alguses on seda lihtne unustada.

Millal on Camunda kasutamine põhjendatud?

Camunda ei ole automaatselt õige valik iga rakenduse jaoks. Lihtne monoliit, milles puuduvad inimeste ülesanded ja tähenduslik protsessivoog, võib töövoomootorist vähe võita.

Camunda muutub väärtuslikumaks, kui süsteemis on:

  • selge mitme etapiga äriprotsess;
  • inimeste ülesanded, mis vajavad määramist ja jälgimist;
  • mitu koordineerimist vajavat teenust;
  • taimerid, korduskatsed, sõnumid ja tingimuslikud teekonnad;
  • vajadus näha pikaajaliste protsesside operatiivset seisundit.

Meie projektis olid nii mikroteenused kui ka rangelt määratud protsessivood koos kasutajaülesannetega, mistõttu sobis Camunda hästi. Kasutaksime seda uuesti, kui tulevase projekti nõuded õigustavad lisanduvat platvormi- ja protsessiversioonide haldamise keerukust.

[ Tutvu teiste artiklitega ]

Räägime.

Kirjelda meile probleemi, kitsaskohta või ideed, mida sooviksid teoks teha. Leiame juurpõhjuse ja anname ausa hinnangu parimale lahendusele.