3.12 Atburðadrifinn arkitektúr og skilaboðamiðlun
Yfirlit og tilgangur
Atburðadrifinn arkitektúr (EDA) er stíll þar sem íhlutir eiga samskipti með því að framleiða og bregðast við atburðum frekar en að kalla beint hver á annan. Atburður er staðreynd: eitthvað sem þegar gerðist, eins og „PöntunLögðInn“ eða „GreiðslaTekin“. Framleiðandi tilkynnir staðreyndina og heldur áfram, og hvaða fjöldi neytenda sem er bregst við á eigin áætlun án þess að framleiðandinn viti hver hlustar. Þetta er önnur afstaða en beiðni-og-svar köllin í kafla 2.3, þar sem kallandi biður tiltekna þjónustu um að gera eitthvað og bíður eftir svarinu.
Fyrir stóra skipulagsheild er aðdráttaraflið aftenging í stórum stíl. Þegar þú hefur tugi teyma og hundruð þjónusta framleiðir að tengja allt saman með beinum punkt-í-punkt köllum brothætt net þar sem breyting eins teymis brýtur annars og enginn getur rakið hvers vegna. Atburðir leyfa teymum að samþætta gegnum sameiginlegan straum staðreynda í stað innviða hvers annars, og nýr neytandi kemur inn með því að gerast áskrifandi, án þess að framleiðandinn breyti einni línu af kóða. Sá eiginleiki, frekar en hrátt gegnumstreymi, er ástæðan fyrir því að atburðadrifnar nálganir halda áfram að breiðast út um fyrirtæki sem skipta út flæktum samþættingum og ríkisstjórnir sem tengja saman stofnanir sem hver á sín kerfi.
Hið opinbera fær annan ávinning sem auðvelt er að vanmeta: varanleg, röðuð skrá yfir það sem gerðist er úttekta- og gagnsæiseign. Þegar borgari spyr hvers vegna bótaákvörðun fór eins og hún fór svarar óbreytanleg skrá atburðanna sem leiddu til hennar beint. En atburðadrifin hönnun er ekki ókeypis og ekki alltaf rétt: ósamstillt flæði er erfiðara að rekja, erfiðara að rökræða um og auðvelt að ofnota. Þessi kafli hefur skoðun á því hvenær aftengingin og stigvöxturinn borga fyrir aukna flækju, og hvenær einfalt samstillt kall hefði þjónað þér betur. Hann byggir á raunveruleika dreifðra kerfa í kafla 3.3, svo lestu hann fyrst ef þú hefur ekki gert það.
Meginreglur
- Atburðir eru staðreyndir, ekki fyrirmæli. Atburður segir hvað gerðist. Skipun biður um að eitthvað gerist. Haltu þeim aðgreindum og nefndu atburði í þátíð.
- Aftenging er tilgangurinn. Framleiðendur ættu ekki að vita eða láta sig varða hver neytir atburða þeirra. Ef þeir gera það hefurðu tengingu í skilaboðabúningi.
- Hannaðu fyrir að-minnsta-kosti-einu sinni afhendingu. Nákvæmlega-einu sinni afhending er goðsögn. Gerðu sérhvern neytanda eins-áhrifa svo tvítekningar séu skaðlausar.
- Röð er ábyrgð sem þú borgar fyrir. Þú færð röðun innan skiptingar, ekki yfir efni. Veldu skiptingarlykla af ásetningi.
- Skemað er samningurinn. Lögun atburðar er opinbert viðmót. Þróaðu það af þeirri varkárni sem þú myndir sýna útgefnu API.
- Ósamstillt þýðir ekki ósýnilegt. Ef þú getur ekki fylgt skilaboðum frá enda til enda geturðu ekki rekið kerfið.
- Flækja verður að vinna sér inn. Atburðauppspretta, CQRS og sögur eru öflug og dýr. Náðu í þau þegar vandinn krefst, ekki sjálfgefið.
Ráðleggingar
Greindu milli atburða, skipana og skilaboða áður en þú smíðar nokkuð
Þessi þrjú orð eru notuð til skiptis og ruglingurinn veldur raunverulegum hönnunarmistökum. Skipun er beiðni um að gera eitthvað („TakaGreiðslu“), beint að einum meðhöndlara, og hana má hafna. Atburður er tilkynning um að eitthvað hafi þegar gerst („GreiðslaTekin“), útvarpað til hvers sem hefur áhuga, og honum er ekki hægt að hafna því staðreyndin er þegar sönn. Skilaboð eru hlutlausa umslagið sem ber hvort tveggja yfir línuna. Greinarmunurinn mótar tengingu: skipanir tengja sendanda við tiltekinn viðtakanda og niðurstöðu, á meðan atburðir afsala sér stjórn yfir því sem gerist næst. Nefndu atburði í þátíð, og þegar þú grípur sjálfan þig að birta „atburð“ sem í raun þýðir „farðu og gerðu þetta tiltekna“ hefurðu skrifað skipun í dulargervi.
Veldu biðraðir, skrár og útgáfu/áskrift af ásetningi
Ekki er öll skilaboðamiðlun sama lögun og að velja ranga er algeng snemmbúin mistök. Skilaboðaröð afhendir hver skilaboð til eins neytanda og fjarlægir þau yfirleitt þegar þau eru unnin, sem hentar vinnudreifingu: margir vinnumenn sækja verkefni, hvert unnið einu sinni. Varanleg atburðaskrá (straumur) heldur atburðum í röð og leyfir mörgum óháðum neytendum að lesa á eigin hraða og spila söguna aftur frá hvaða punkti sem er, sem hentar atburðadreifingu og úttekt. Í útgáfu/áskrift (publish/subscribe) birta framleiðendur á efni og margir áskrifendur fá hver sitt eintak. Hagnýta reglan: ef skilaboðin eru verkefni sem einn vinnumaður á að ljúka skaltu ná í biðröð. Ef þau eru staðreynd sem margir aðilar kunna að láta sig varða núna eða síðar skaltu ná í varanlega skrá, sem gefur þér líka endurspilun fyrir endurheimt og innleiðingu nýrra neytenda. Sjá kafla 3.4 um hvernig þessi val víxlverka við gagnageymslustefnu þína.
Kjóstu kóreógrafíu fyrir sjálfræði, hljómsveitarstjórn fyrir stjórn
Þegar viðskiptaferli spannar nokkrar þjónustur samhæfirðu það á einn af tveimur vegum. Í kóreógrafíu bregst hver þjónusta við atburðum og gefur út sína eigin, án miðlægs heila: hámarks aftengd og góð fyrir sjálfræði teyma, en heildarferlið er til aðeins sem sprottin hegðun sem enginn einn staður lýsir. Í hljómsveitarstjórn (orchestration) stýrir miðlægur samhæfingaraðili skrefunum og þekkir allt flæðið: auðveldara að vakta og breyta, á kostnað íhlutar sem hvert skref reiðir sig á. Góð sjálfgefin regla er kóreógrafía fyrir lauslega tengd viðbrögð („þegar pöntun er send veitir tryggðarþjónustan stig“) og hljómsveitarstjórn fyrir skilgreinda færslu með skýrt árangursskilyrði og þörf á að skýra frá stöðu. Láttu ekki mikilvægt ferli lifa aðeins sem þegjandi þekkingu dreifða yfir tíu atburðameðhöndlara.
Náðu í atburðauppsprettu og CQRS aðeins þegar þau vinna fyrir sér
Atburðauppspretta (event sourcing) geymir ástand sem viðbótarröð atburða frekar en núverandi mynd sem þú skrifar yfir, og þú endurbyggir núverandi ástand með því að spila þá aftur. Ávinningurinn er fullkomin úttektarslóð, geta til að endurbyggja hvaða fyrra ástand sem er og tímafyrirspurnir. Kostnaðurinn er að þú útgáfumerkir atburðaskema að eilífu, meðhöndlar endurspilun og skyndimyndir og berð hugarlíkan sem flestir hönnuðir hafa aldrei notað. CQRS (Command Query Responsibility Segregation) aðskilur skrifmódelið frá einu eða fleiri lesmódelum svo lestur og skrif stigvaxi og þróist óháð. Það parast eðlilega við atburðauppsprettu en krefst hennar ekki. Bæði skína fyrir lén með raunverulegar úttektar-, regluvörslu- eða flóknar fyrirspurnarþarfir, sem er ástæða þess að eftirlitsskyld fjármál og hið opinbera telja þau fyrirhafnarinnar virði. Fyrir einfalda búa-til-lesa-uppfæra-eyða þjónustu eru þau tilfallandi flækja sem þú munt sjá eftir, svo beittu þeim á sneið lénsins sem þarf þau, ekki allt kerfið í viðbragði.
Stýrðu dreifðum færslum með sögum, ekki tveggja þrepa framkvæmd
Þú getur yfirleitt ekki vafið einni atómískri færslu utan um nokkrar þjónustur og gagnagrunna. Dreifð tveggja þrepa framkvæmd heldur læsingum yfir netið, skerðir aðgengi og stigvaxar illa, svo hún passar sjaldan atburðadrifnu kerfi. Sögumynstrið kemur í hennar stað: mótaðu færsluna sem röð staðbundinna færslna, hver gefur út atburð sem kveikir á þeirri næstu, og gefðu hverju skrefi bótaaðgerð sem afturkallar það ef síðara skref bilar. Ef „taka frá birgðir“ heppnast en „gjaldfæra kort“ bilar losar bót birgðirnar. Sögur geta verið kóreógrafaðar eða hljómsveitarstýrðar, og hljómsveitarstjórn vinnur venjulega fyrir allt sem þú verður að vakta. Því sögur taka endanlegu samræmi opnum örmum fer kerfið gegnum millistöður („frátekið en ógreitt“) áður en það samleitist, svo hannaðu notendaupplifun og úttektarslóð til að sýna „í vinnslu“ og „bætt“ ástönd heiðarlega. Kafli 3.3 fjallar um sama svið frá sjónarhorni dreifðra kerfa.
Hannaðu fyrir að-minnsta-kosti-einu sinni afhendingu og gerðu neytendur eins-áhrifa
Skilaboðakerfi geta ekki raunverulega afhent nákvæmlega einu sinni yfir bilanir, því kvittunin sem segir „ég vann þetta“ getur sjálf týnst og neytt fram endurafhendingu. Það sem þú getur náð er að-minnsta-kosti-einu sinni afhending með eins-áhrifa vinnslu, sem framleiðir nákvæmlega-einu sinni áhrif. Eins-áhrif þýða að vinna sama atburð tvisvar skilur eftir sömu niðurstöðu og að vinna hann einu sinni. Komdu þangað með eins-áhrifalykli á hverjum atburði og skrá yfir það sem þú hefur þegar meðhöndlað, svo tvítekning sé þekkt og fleygt. Í-mesta-lagi-einu sinni afhending (skjóta og gleyma, engin endurafhending) er einfaldari en týnir skilaboðum hljóðlega, svo taktu hana frá fyrir gögn sem þú hefur efni á að missa. Meðhöndlaðu „nákvæmlega-einu sinni“ merkið sem sumir söluaðilar auglýsa með tortryggni: það þýðir yfirleitt nákvæmlega-einu sinni innan marka eins kerfis við sérstök skilyrði, ekki ábyrgðina frá enda til enda sem orðasambandið gefur til kynna.
Stýrðu röð með skiptingum og þekktu neytendahópa þína
Röð er ekki altæk og ókeypis. Hún er staðbundin og greidd. Straumi er skipt í skiptingar (partitions), og þú færð röðun innan skiptingar, ekki yfir efnið. Atburðir leiðast á skiptingu eftir skiptingarlykli, svo val þess lykils er hvernig þú stýrir því sem helst í röð: lyklaðu eftir viðskiptavinaauðkenni og atburðir eins viðskiptavinar haldast í röð hver miðað við annan, á meðan ólíkir viðskiptavinir eru unnir samsíða. Neytendahópar leyfa safni vinnumanna að deila skiptingum efnis, hver skipting meðhöndluð af einum vinnumanni, sem er hvernig þú stigvaxar gegnumstreymi meðan þú varðveitir röð á hverja skiptingu. Þetta er þar sem stigvöxtur mætir réttleika og tengist kafla 3.5. Veldu skiptingarlykil sem endurspeglar raunverulega röðunarkröfu þína og dreifir álagi jafnt, því lykill sem beinir mestu af umferð inn í eina skiptingu skapar heitan punkt sem engin fjöldi vinnumanna getur létt á.
Líttu á skema sem samninga með skrá og þróunarreglum
Uppbygging atburðar er útgefið viðmót sem teymi sem þú hittir kannski aldrei neyta, svo að breyta henni kæruleysislega brýtur þau úr fjarlægð. Settu atburðaskemun þín í skemaskrá (schema registry), sameiginlega skrá sem geymir hvert skema og framfylgir samhæfisreglum þegar framleiðandi reynir að breyta einu. Taktu upp skýra stefnu: afturábaksamhæfðar breytingar (að bæta við valkvæðum reit) eru leyfðar. Brjótandi breytingar (að fjarlægja reit, breyta gerð, endurnefna) krefjast nýrrar skemaútgáfu og flutningsáætlunar. Þetta leyfir framleiðendum að þróast án samstilltrar uppsetningar yfir hvern neytanda, sem er allur tilgangurinn með því að velja atburði. Sami útgáfustýringaragi viðmóta úr kafla 2.3 gildir, því atburðaskema er API undir öðru nafni.
Tryggðu afhendingu með færslupósthólfinu og meðhöndlaðu bilanir skýrt
Klassískur galli: þjónustan þín skrifar í gagnagrunninn sinn og birtir síðan atburð, og hún hrynur milli þessara tveggja, svo gagnagrunnurinn breyttist en atburðurinn fór aldrei út. Færslupósthólfið (transactional outbox) lagar þetta með því að skrifa atburðinn í pósthólfstöflu í sömu gagnagrunnsfærslu og ástandsbreytinguna, svo þau framkvæmast eða bila saman. Sérstakur flutningsaðili les síðan pósthólfið og birtir til miðlarans, oft með breytingagagnatöku til að fylgja gagnagrunnsskránni. Fyrir neyslubilanir heldur dauðabréfaröð skilaboðum sem bila ítrekað svo eiturskilaboð (skilaboð sem munu aldrei heppnast, kannski því þau eru illa mynduð) hindri ekki röðina á eftir þeim að eilífu. Bættu við bakþrýstingi svo hraður framleiðandi geti ekki yfirbugað hægan neytanda: afmarkaðu raðir þínar og hægðu á eða losaðu álag þegar þær fyllast frekar en að tæma minni. Þessir fjórir búnaðir skilja kynningu frá kerfi sem þú getur rekið klukkan 3 að nóttu.
Gerðu ósamstillt flæði sýnileg frá enda til enda
Erfiðasti kostnaðurinn við að fara atburðadrifið er að ein viðskiptaaðgerð dreifist nú yfir framleiðendur, miðlara og neytendur án kallstafla sem bindur þau saman. Berðu fylgniauðkenni gegnum hvern atburð svo þú getir fylgt einu rökrænu flæði yfir hvert hopp, sami agi og kafli 3.3 mælir fyrir um samstillt köll. Raktu neytendatöf (hve langt á eftir rauntíma hver neytandi les) sem fyrsta flokks mælikvarða, því vaxandi töf er snemmviðvörun þín um vandræði, og vaktaðu dýpt dauðabréfaraðar, vinnslutöf og endurafhendingarhlutföll. Án þessa verður atburður sem hljóðlega er ekki neytt ósýnilegur galli sem birtist dögum síðar sem vantandi gögn.
Málamiðlanir: kostir og gallar
| Nálgun | Kostir | Gallar / kostnaður |
|---|---|---|
| Samstillt beiðni/svar | Einföld að rökræða um, tafarlaus niðurstaða, auðveld rekjun | Þétt tímatenging, keðjubilanir, takmarkaður stigvöxtur |
| Atburðadrifið (útgáfa/áskrift yfir skrá) | Aftenging, óháður stigvöxtur, endurspilun, úttektarslóð | Endanlegt samræmi, erfiðari rekjun, fleiri hreyfanlegir hlutar |
| Skilaboðaröð (vinnudreifing) | Álagsjöfnun, biðminni, vinsamleg bakþrýstingi | Einn neytandi á skilaboð, síður hentug fyrir útvarp |
| Atburðauppspretta + CQRS | Full saga, tímafyrirspurnir, lestur/skrif stigvaxa óháð | Skemaútgáfustýring að eilífu, flækja endurspilunar, brattur námsferill |
| Saga (á móti tveggja þrepa framkvæmd) | Stigvaxandi, aðgengileg, engar dreifðar læsingar | Endanlegt samræmi, bótarökfræði, erfiðari rökhugsun |
Meginspennan er milli aftengingar og skiljanleika. Sérhver atburður sem þú bætir við losar tenginguna milli framleiðanda og neytanda, kaupir sjálfræði teyma og óháðan stigvöxt, og fjarlægir um leið línu úr sögunni sem samstillt kall hefði sagt þér skýrt: flæðið verður sprottið, býr í víxlverkununum frekar en í nokkurri einni skrá. Leystu þetta með því að vera sértækur: notaðu atburði þar sem aftenging borgar sig raunverulega, eins og samþættingu yfir teymismörk, útbreiðslu til margra neytenda, biðminni fyrir álagstoppa og úttekt. Haltu samstilltum köllum þar sem þú þarft tafarlaust svar og einfalt hugarlíkan, eins og að lesa gögn til að birta síðu. Bilunarhátturinn sem forðast ber er að breyta hverju innra fallskalli í atburð og kalla það arkitektúr, sama arkitektúrdómgreind og kafli 3.2 biður um af hverju mynstri sem þú tekur upp.
Spurningar til að ræða með teyminu
Þurfum við fyrir þessi tilteknu samskipti í raun atburð, eða væri samstillt kall skýrara og öruggara? Að sleppa þessari spurningu er hvernig kerfi safnar tilfallandi flækju. Heiðarlega prófið er hvort framleiðandinn þarf niðurstöðu til baka núna (kall) eða er að tilkynna staðreynd sem aðrir kunna að bregðast við á eigin tíma (atburður). Komdu með tiltekin samskipti, ekki almenna kjörstillingu, og spyrðu hvaða aftengingu þú færð og hvaða rekjanleikaskýrleika þú gefur upp. Ef kallandinn bíður lokaður eftir að „atburðurinn“ sé unninn hefurðu smíðað hægt, erfitt-að-villuleita samstillt kall og borgað aukalega fyrir forréttindin. Sjálfgefið fyrir innri samskipti innan sama teymis þar sem þú þarft svarið núna ætti að vera beint kall. Taktu atburði frá fyrir þar sem laus tenging vinnur sér inn kostnað sinn.
Hvað gerist þegar neytandi fær sama atburð tvisvar og höfum við í raun prófað það? Að-minnsta-kosti-einu sinni afhending tryggir að tvítekningar munu gerast, svo hver neytandi verður að vera eins-áhrifa, samt er auðvelt að fullyrða eins-áhrif og auðvelt að fá þau rangt. Farðu í gegnum raunverulegan neytanda og raktu nákvæmlega hvernig önnur afhending er þekkt og gerð óvirk, hvort sem er með eins-áhrifalykli, skrá yfir unna atburði eða eðlilega eins-áhrifa aðgerð. Komdu með niðurstöður raunverulegs prófs þar sem þú endurafhendir lotu og staðfestir engar tvöfaldar gjaldfærslur, tvítekin skrár eða endurteknar tilkynningar. Gefðu sérstakan gaum að hliðaráhrifum sem yfirgefa gagnagrunn þinn, eins og tölvupósti, greiðslum og köllum á þriðja aðila, því þar skaða ekki-eins-áhrifa gallar viðskiptavini beint. Ef teymið þitt getur ekki bent á próf sem sannar tvítekningaöryggi skaltu gera ráð fyrir að þú sért það ekki.
Þegar atburðaflæði bilar í framleiðslu, hve lengi þar til við tökum eftir og getum við rakið ein skilaboð frá enda til enda? Ósamstilltar bilanir eru hljóðlátar, svo neytandi sem hljóðlega hættir að vinna getur farið óséður þar til vantandi gögn verða kvörtun viðskiptavinar eða úttektarbil. Spyrðu hvað snemmmerki ykkar er og hvort þið vaktið neytendatöf og dýpt dauðabréfaraðar sem viðvörunarmælikvarða frekar en mælaborð sem enginn horfir á. Komdu með raunverulegt atvik eða leikdagsæfingu og tímasettu hve lengi það tekur að fylgja einu fylgniauðkenni yfir framleiðanda, miðlara og alla neytendur. Ef svarið er „við grepum nokkrar þjónustur og giskum“ er sýnileiki ykkar ekki tilbúinn fyrir flækjuna sem þið hafið tekið á ykkur. Í eftirlitsskyldum geirum er að geta endurbyggt nákvæmlega hvernig skilaboð færðust oft regluvörslukrafa, ekki aukaatriði.
Hvernig munum við þróa atburðaskema sem mörg teymi neyta nú þegar án þess að brjóta nokkurt þeirra? Lögun atburðar er opinber samningur, og þegar tugir neytenda reiða sig á hana getur sakleysislega útlítandi breyting brotið kerfi sem þú hefur aldrei heyrt um, úr fjarlægð, án þýðanda til að vara þig við. Spennan er raunveruleg: framleiðendur vilja hreyfa sig hratt og hreinsa atburði sína, á meðan hver neytandi vill lögunina frysta að eilífu, svo komist að samkomulagi fyrirfram um hvaða breytingar eru öruggar (að bæta við valkvæðum reit) og hverjar krefjast nýrrar útgáfu og flutningsglugga (að fjarlægja reit, breyta gerð, endurnefna). Komdu með raunverulegan lista neytenda á hverju efni, hvort skemaskrá framfylgir samhæfisreglum í dag eða hvort lögun breytist með óformlegu samkomulagi og hve lengi tvær útgáfur geta keyrt samsíða við flutning. Í stóru fyrirtæki eða gagnamiðlun hins opinbera milli stofnana getur hljóðlega brotið skema spillt skrám í kerfum sem þú átt ekki og birst síðar sem úttektarniðurstaða, svo líttu á framfylgd samhæfis sem stjórnarhætti, ekki kurteisi.
Fyrir mikilvægustu fjölþjónustufærsluna okkar, hvað afturkallar hver bótaaðgerð í raun og hvaða millistöður munu notendur og endurskoðendur sjá? Sögur skipta þægilegri blekkingu einnar atómískrar færslu fyrir röð staðbundinna skrefa sem hvert getur brugðist, svo kerfið fer raunverulega gegnum ástönd eins og „frátekið en ógreitt“ og „gjaldfært en ósent“ áður en það samleitist, og að þykjast annað er hvernig þú afhendir sögu sem lekur peningum eða skilur eftir munaðarlausar skrár. Gakktu raunverulegt ferli frá enda til enda, nefndu bótina fyrir hvert skref (hvað losar birgðirnar, hvað endurgreiðir kortið) og ákveddu hvort hljómsveitarstýrð saga sem þú getur vaktað slær sprottna kóreógrafíu sem enginn einn staður lýsir. Komdu með bilunartilvikin sem þú hefur í raun prófað, ekki gleðileiðina, og staðfestu að notendaupplifun og úttektarslóð sýni „í vinnslu“ og „bætt“ ástönd heiðarlega frekar en að fela þau. Í fjármála-, bóta- eða skattakerfum mun eftirlitsaðili spyrja hvernig skráin leit út á hverju millistigsaugnabliki og hver bar ábyrgð á bótinni, svo ástönd sögunnar eru sjálf regluvörslugögn.
Hver rekur miðlarann eða atburðaskrána og höfum við talið raunverulegan kostnað við að reka hana gegn stýrðum valkosti? Skilaboðahryggurinn er ekki ókeypis innviðir sem birtast þegar þú teiknar þá á mynd: einhver plástrar hann, stigvaxar skiptingar hans, stillir varðveislu, bregst við þegar hann kallar klukkan 3 að nóttu og á getu hans og bilunarhætti. Ákveddu af ásetningi milli þess að hýsa opinn miðlara sjálf og kaupa stýrða þjónustu, vegðu stjórn og gagnabúsetu gegn rekstrarbyrði og leyfiskostnaði og vertu heiðarlegur um hvort teymið þitt hafi dýptina til að reka dreifða skrá vel. Komdu með heildareignarkostnaðinn: bakvaktarálag, sérfræðifærnina sem krafist er, varðveislu- og geymslureikninginn og hvað miðlarabilun gerir við hvert ósjálfstætt flæði. Fyrir fyrirtæki mótar svarið umboð vettvangsteymis, og fyrir opinberan aðila geta innkaupareglur, gagnafullveldiskröfur og knýjandi þörf til að forðast söluaðilabindingu yfirgnæft ódýrasta kostinn, svo dragðu þessar skorður fram áður en þú skuldbindur þig til tækni sem þú munt reka í áratug.
Sjónarhorn eftir geirum
Sprotafyrirtæki. Knappasta auðlind þín er verkfræðiathygli, svo haltu þig við samstillt þar til útbreiðsla skaðar í raun. Þegar þrennt þarf að bregðast við einni aðgerð skaltu birta einn atburð (eins og „PöntunLögðInn“) á stýrða biðröð eða skrá frekar en að setja upp eigin miðlaraklasa, og haltu greiðslu og öllu sem þú þarft tafarlaust svar frá sem beinu kalli. Taktu ekki upp atburðauppsprettu, CQRS eða sögur til að líta fágaður út. Sú flækja mun fara fram úr örlitlu teymi og hægja á einmitt þeirri endurtekningu sem þú keppir á.
Lítið fyrirtæki. Þú hefur engan skilaboðasérfræðing og enga löngun til að reka Kafka, svo líttu á ósamstillta samþættingu sem eitthvað sem þú kaupir, ekki rekur. Hallaðu þér að atburðunum sem núverandi verkfærin þín gefa þegar út (webhooks, raðirnar innbyggðar í skýjaveitu þína eða SaaS-vettvanga) og láttu stýrða þjónustu eiga afhendingu, varðveislu og eins-áhrifalagnir. Rammaðu valið sem kaupa-á-móti-smíða heiðarlega: handfylli áreiðanlegra webhook-meðhöndlara slær sérsmíðaðan miðlara sem þú getur hvorki mannað né fundið villur í klukkan 3 að nóttu.
Stórfyrirtæki. Vandinn þinn er samþættingarkostnaður yfir mörg teymi, svo ávinningurinn er stýrður sameiginlegur vettvangur: varanleg atburðaskrá, skemaskrá með framfylgdri samhæfisstefnu, skýrt efniseignarhald og stöðluð eins-áhrifa- og pósthólfsmynstur svo hvert teymi finni þau ekki upp aftur. Þetta er umhverfið þar sem að skipta út brothættum fyrirtækjaþjónustubusi eða neti punkt-í-punkt tengla safnast í raunverulegan sparnað og þar sem hljómsveitarstýrðar sögur með sýnilegri stöðu leyfa rekstrarstarfsfólki að stýra fjölþrepa ferlum. Fjárhagsáætlaðu sýnileika- og skemastjórnarháttafjárfestinguna skýrt, því í þessari stærð verður hljóðlát neytendabilun að vantandi gögnum yfir tugi kerfa.
Hið opinbera. Varanleg, röðuð atburðaskrá er úttekta- og gagnsæiseign: hún svarar „hvers vegna fór þessi ákvörðun svona“ með óbreytanlegri röð staðreynda, svo hallaðu þér að atburðauppsprettu þar sem ábyrgð krefst þess. Gagnamiðlun milli stofnana þarf að-minnsta-kosti-einu sinni afhendingu með afritunarhreinsun á stöðugu atburðaauðkenni svo endurafhent skrá búi aldrei til tvítekið mál, og innkaup ættu að vega gagnafullveldi, upplýsingagjöf um takmarkanir miðlara og flytjanleika gegn bindingu. Birtu, þar sem við á, hvernig flæðið virkar og hvernig borgari getur andmælt sjálfvirkri niðurstöðu, og haltu atburðaskránni sem rökstuddu skránni sem eftirlitsaðilar munu biðja um að fá að skoða.
Dæmi
Sprotafyrirtæki. Lítið netverslunarsprotafyrirtæki byrjar með eitt samstillt flæði: afgreiðsla kallar á greiðsluþjónustuna og bíður. Eftir því sem það vex vill það að staðfestingarpóstar pantana, birgðauppfærslur og tryggðaráætlun bregðist við kaupum, og að tengja hvert sem enn eitt samstillt kall inni í afgreiðslu gerir afgreiðslu hæga og brothætta. Teymið birtir einn „PöntunLögðInn“ atburð á varanlega skrá og lætur þrjá óháða neytendur bregðast við, svo afgreiðsla er hröð aftur og að bæta við fjórðu viðbrögðunum síðar þarf enga breytingu á henni. Það heldur greiðslutöku samstilltri, því það þarf já-eða-nei svarið áður en það staðfestir pöntunina, sem er nákvæmlega rétta línan að draga í þeirra stærð.
Stórfyrirtæki. Alþjóðlegt tryggingafélag drukknar í punkt-í-punkt samþættingum og öldrandi fyrirtækjaþjónustubusi (ESB), miðlægum hnút sem hvert kerfi leiðir gegnum og er orðinn flöskuháls og einn bilunarpunktur. Það flytur yfir á varanlega atburðaskrá þar sem hvert lén birtir staðreyndir sínar (skírteini gefið út, krafa lögð fram, greiðsla gerð) og neytendateymi gerast áskrifendur að því sem þau þurfa. Kröfusaga, hljómsveitarstýrð svo rekstrarstarfsfólk sjái stöðu hverrar kröfu, samhæfir fjölþrepa uppgjörið með bótum fyrir skref sem bila. Skemaskrá leyfir skírteinateyminu að þróa atburði sína án samstilltrar uppsetningar yfir fjörutíu neytendakerfi, einmitt brothættnina sem gamli ESB-inn lagði á.
Hið opinbera. Landsbundið skattayfirvald verður að gefa borgurum og endurskoðendum rökstutt svar við „hvers vegna fór álagningin mín svona“. Það mótar álagningarlénið með atburðauppsprettu, svo sérhver breyting er óbreytanlegur atburður í röðuðu skrá og núverandi álagning er endurspilun þeirra atburða. Þegar borgari véfengir tölu endurbyggir fulltrúi nákvæmt ástand á hvaða fyrri dagsetningu sem er og sýnir röð staðreynda sem framleiddu hana. Gagnamiðlun milli stofnana keyrir yfir varanleg efni með að-minnsta-kosti-einu sinni afhendingu og neytandi hverrar stofnunar afritunarhreinsar á atburðaauðkenni svo endurafhent skrá búi aldrei til tvítekið mál. Atburðaskráin tvöfaldast sem úttektarslóðin sem eftirlitsaðilar krefjast og breytir regluvörsluskyldu í aukaafurð hönnunarinnar.
Viðskiptarök: hvatar, ávöxtun fjárfestingar og heildarkostnaður
Ávöxtun atburðadrifins arkitektúrs ræðst af einu: kostnaði samþættingar yfir tíma. Punkt-í-punkt samþætting lætur þann kostnað vaxa með fjölda tenginga, sem vex hraðar en fjöldi kerfa, svo samþætting verður skatturinn sem étur afhendingargetu þína. Atburðir fletja þetta út, því teymi samþættast gegnum sameiginlegan straum staðreynda, nýr neytandi kemur inn með því að gerast áskrifandi og framleiðendur þróast á bak við útgáfumerkt skema, svo jaðarkostnaður næstu samþættingar lækkar skarpt. Það er kjarnaávöxtunarsagan til að segja forystu: ekki hrátt afköst, heldur samsett lækkun á kostnaði breytinga yfir mörg teymi.
Nefndu heildareignarkostnaðinn heiðarlega svo þér sé trúað. Þú tekur á þig miðlarainnviði til að reka, skemastjórnarhætti til að viðhalda og brattari rekstrarlegan námsferil, því ósamstillt kerfi eru raunverulega erfiðari að finna villur í, svo fjárhagsáætlaðu sýnileikafjárfestinguna fyrirfram. Vegðu þetta gegn kostnaði við að taka ekki upp atburði þar sem þeir passa: stirðnað samþættingarlag þar sem sérhver breyting er fjölteyma samhæfingarverkefni, eldri ESB sem er orðinn flöskuháls sem enginn þorir að snerta og vanhæfni til að bæta við getu án þess að raska gömlum. Fyrir fyrirtækið sem skiptir út brothættum punkt-í-punkt lögnum og hið opinbera sem smíðar varanlegar úttektarslóðir er ávinningurinn sterkastur þar sem úttektar- og aftengingarþarfir eru raunverulegar. Þar sem þær þarfir vantar er heiðarlega svarið að einfaldari samstillt hönnun hefur lægri heildareignarkostnað, og þú ættir að segja það.
Andmynstur og gildrur
- Dreifða einlita kerfið í dulargervi. Þjónustur sem verða allar að fara út saman og reiða sig á innri atburði hver annarrar. Þú bættir við miðlara en hélst tengingunni, svo þú hefur ókosti beggja stíla.
- Atburðir sem skipanir. Að birta „atburði“ sem í raun þýða „gerðu þetta tiltekna fyrir mig“, sem endurskapar þétta tengingu með aukatöf og verri rekjanleika.
- Að gera ráð fyrir nákvæmlega-einu sinni afhendingu. Neytendur sem brotna, tvígjaldfæra eða tvítaka skrár þegar miðlarinn endurafhendir óhjákvæmilega skilaboð.
- Atburðauppspretta alls staðar. Að beita atburðauppsprettu og CQRS á einföld búa-til-lesa-uppfæra-eyða lén sem þurftu aldrei sögu, og kaupa bratta flækju fyrir engan ávinning.
- Engir skemastjórnarhættir. Framleiðendur breyta atburðalögun frjálslega og brjóta niðurstraumsneytendur úr fjarlægð án samhæfisathugana.
- Að hunsa pósthólfið. Að skrifa í gagnagrunn og birta atburð sem tvö aðskilin skref, svo hrun milli þeirra týnir atburðum hljóðlega eða gefur út draugaatburði.
- Engin dauðabréfameðhöndlun. Ein eiturskilaboð sem hindra skiptingu, eða misheppnuð skilaboð sem hverfa án raðar til að grípa og skoða þau.
- Ósýnileg flæði. Ósamstillt vinnsla án fylgniauðkenna, án neytendatafarviðvarana og án rekjunar, svo bilanir haldast hljóðar þar til þær verða vantandi gögn.
Þroskalíkan
- Stig 1, Upphaf: Samþætting er ad hoc punkt-í-punkt köll, eða miðlari er til en notaður eins og samstillt beiðni/svar. Tvítekningar brjóta neytendur, enginn skemaagi eða þvert-hopp rekjun er til og misheppnuð skilaboð hverfa hljóðlega.
- Stig 2, Þróun: Miðlari eða skrá er í raunverulegri notkun fyrir sum flæði og nokkur teymi hafa grunnvinnubrögð: neytendur eru að verða eins-áhrifa og dauðabréfaraðir grípa sumar bilanir. En nálgunin er ósamræmd milli teyma, atburðir og skipanir eru enn ruglaðar, skema breytast með óformlegu samkomulagi og sýnileiki er þunnur.
- Stig 3, Stöðlun: Atburðir, skipanir og skilaboð eru aðgreind af ásetningi um alla skipulagsheildina. Neytendur eru eins-áhrifa samkvæmt staðli, skema búa í skrá með skjalfestri og framfylgdri samhæfisstefnu og færslupósthólfið tryggir afhendingu. Sögur með bótum meðhöndla fjölþjónustufærslur, fylgniauðkenni berast gegnum hvert hopp og þessi mynstur eru skrifuð niður og beitt samræmt frekar en látin eftir hverju teymi.
- Stig 4, Stjórnun: Atburðavettvangurinn er mældur og stýrður með gögnum gegn grunnlínum. Neytendatöf, dýpt dauðabréfaraðar, endurafhendingarhlutföll og vinnslutöf eru rakin sem viðvörunarmælikvarðar með umsömdum þröskuldum, ekki mælaborð sem enginn horfir á. Skemasamhæfi er staðfest sjálfvirkt áður en framleiðandi getur afhent breytingu. Endurspilun, bilanameðhöndlun og eins-áhrif eru prófuð á föstum takti frekar en vonað eftir. Hvort tiltekin samskipti ættu að vera atburður eða samstillt kall er ákveðið á sönnunargögnum og geta, varðveislukostnaður og áreiðanleiki hvers miðlara eru rýnd gegn markmiðum.
- Stig 5, Samhæfing: Atburðadrifinn og samstilltur stíll eru valdir fyrir hver samskipti sem annað eðli, og atburðauppspretta og CQRS er beitt nákvæmlega þar sem úttektar- og fyrirspurnarþarfir réttlæta og hvergi annars staðar. Ósamstillt flæði eru jafn sýnileg og samstillt, vettvangurinn batnar stöðugt eftir því sem þarfir breytast (dauð efni lögð niður, skemastjórnarhættir þróaðir, skiptingar jafnaðar) og skilaboðamiðlun er samþætt víðari arkitektúr og úttektarstefnu svo skipulagsheildin aðlagi atburðahönnun sína eftir því sem reksturinn og skyldur hans breytast.
Hugmyndir til umræðu
- Hverjir af núverandi „atburðum“ þínum eru í leyni skipanir og hvaða tengingu myndirðu fjarlægja með því að móta þá heiðarlega?
- Ef þú spilaðir heilan dag atburða aftur gegnum neytendur þína á morgun, hvað myndi brotna og hvað segir það þér um eins-áhrif og endurspilunaröryggi þitt?
- Hvaða hlutar lénsins þíns þurfa raunverulega úttektarslóð atburðauppsprettu og hverjir eru einfalt ástand sem þú myndir aðeins flækja með uppsprettu?
- Hvernig myndirðu flytja burt frá eldri fyrirtækjaþjónustubusi eða neti punkt-í-punkt samþættinga án áhættusamrar stórhvellsyfirfærslu?
- Fyrir mikilvægasta fjölþjónustuferli þitt, er það raunveruleg hljómsveitarstýrð saga með bótum, eða sprottin kóreógrafía sem enginn einn staður lýsir?
Helstu atriði
- Atburðadrifinn arkitektúr kaupir aftengingu, óháðan stigvöxt, endurspilun og úttektarslóðir, og kostar skiljanleika og rekstrarflækju, svo veldu hann fyrir hver samskipti þar sem ávinningurinn er raunverulegur.
- Haltu atburðum (staðreyndum sem gerðust), skipunum (beiðnum um aðgerð) og skilaboðum (umslaginu) aðgreindum, því ruglingurinn veldur raunverulegum tengingarmistökum.
- Hannaðu fyrir að-minnsta-kosti-einu sinni afhendingu og gerðu hvern neytanda eins-áhrifa. Nákvæmlega-einu sinni afhending er goðsögn og nákvæmlega-einu sinni áhrif eru verkfræðiafrek.
- Röð er á hverja skiptingu, skema eru samningar sem eiga heima í skrá og pósthólfið, dauðabréfaraðir og bakþrýstingur eru lagnirnar sem gera skilaboðamiðlun tilbúna fyrir framleiðslu.
- Notaðu sögur með bótum í stað tveggja þrepa framkvæmdar og náðu í atburðauppsprettu og CQRS aðeins þar sem úttektar- og fyrirspurnarþarfir réttlæta bratta kostnað þeirra.
- Ósamstillt flæði eru hljóð þegar þau bila, svo fylgniauðkenni, neytendatafarvöktun og rekjun frá enda til enda eru munurinn á rekanlegu kerfi og ósýnilegu.
Heimildir og frekari lestur
- Martin Kleppmann, Designing Data-Intensive Applications
- Gregor Hohpe and Bobby Woolf, Enterprise Integration Patterns
- Chris Richardson, Microservices Patterns (sagas, transactional outbox, CQRS)
- Sam Newman, Building Microservices
- Ben Stopford, Designing Event-Driven Systems
- Adam Bellemare, Building Event-Driven Microservices
- Vaughn Vernon, Implementing Domain-Driven Design (event sourcing and CQRS)
- Martin Fowler, “Event Sourcing” and “CQRS” (martinfowler.com articles)
- Hector Garcia-Molina and Kenneth Salem, “Sagas” (1987)