3.12

Tazama kwa Kiingereza

3.12 Usanifu unaoendeshwa na matukio na ujumbe

Muhtasari na msukumo

Usanifu unaoendeshwa na matukio (EDA) ni mtindo ambamo vijenzi huwasiliana kwa kuzalisha na kuitikia matukio badala ya kuitana moja kwa moja. Tukio ni ukweli: kitu ambacho kimeshatokea, kama “OrderPlaced” au “PaymentCaptured.” Mzalishaji anatangaza ukweli na kuendelea, na watumiaji wowote wanaitikia kwa ratiba yao bila mzalishaji kujua nani anasikiliza. Huu ni msimamo tofauti na miito ya ombi-na-jibu ya sura ya 2.3, ambapo mpigaji anaomba huduma mahususi kufanya kitu na kusubiri jibu.

Kwa shirika kubwa, mvuto ni kutenganisha kwa ukubwa. Ukiwa na timu kadhaa na huduma mamia, kuunganisha kila kitu kwa miito ya moja kwa moja ya nukta-kwa-nukta kunazalisha utando dhaifu ambapo badiliko la timu moja linavunja la nyingine na hakuna anayeweza kufuatilia kwa nini. Matukio huruhusu timu kuunganisha kupitia mkondo wa pamoja wa ukweli badala ya kupitia undani wa ndani wa kila mmoja, na mtumiaji mpya hujiunga kwa kujiandikisha, bila mzalishaji kubadilisha mstari wa msimbo. Sifa hiyo, zaidi ya uwezo ghafi wa kupitisha, ndiyo sababu mbinu zinazoendeshwa na matukio zinaendelea kuenea kuvuka mashirika makubwa zikibadilisha uunganishaji uliochanganyika na serikali zinazounganisha mashirika yanayomiliki mifumo yao.

Sekta ya umma inapata faida ya pili inayodharauliwa kwa urahisi: rekodi ya kudumu, iliyopangwa ya kilichotokea ni mali ya ukaguzi na uwazi. Raia anapouliza kwa nini uamuzi wa manufaa ulitoka hivyo, kumbukumbu isiyobadilika ya matukio yaliyouelekeza hujibu moja kwa moja. Lakini usanifu unaoendeshwa na matukio si bure na si sahihi kila mara: mtiririko usio wa papo hapo ni mgumu zaidi kufuatilia, mgumu zaidi kufikiria, na rahisi kutumia kupita kiasi. Sura hii ina msimamo kuhusu lini kutenganisha na ukubwa vinalipa ugumu ulioongezwa, na lini wito rahisi wa usawazishaji ungekuhudumia vizuri zaidi. Inajengwa juu ya hali halisi za mifumo iliyosambazwa za sura ya 3.3, kwa hiyo isome kwanza kama hujaisoma.

Kanuni kuu

  • Matukio ni ukweli, si maagizo. Tukio linasema kilichotokea; amri inaomba kitu kitokee. Viweke tofauti, na utaje matukio kwa wakati uliopita.
  • Kutenganisha ndiyo hoja. Wazalishaji hawapaswi kujua wala kujali nani anatumia matukio yao. Wakijali, una uunganishaji uliovaa vazi la ujumbe.
  • Buni kwa utoaji angalau-mara-moja. Utoaji mara-moja-tu ni hadithi. Fanya kila mtumiaji asiyebadilika thamani ili marudio yasiwe na madhara.
  • Mpangilio ni hakikisho unalolipia. Unapata mpangilio ndani ya kipande, si kuvuka mada. Chagua funguo za vipande kwa makusudi.
  • Muundo ndio mkataba. Umbo la tukio ni kiolesura cha umma; liendeshe kwa uangalifu ule ule ungetumia kwa API iliyochapishwa.
  • Kutokuwa papo hapo hakumaanishi kutoonekana. Usipoweza kufuata ujumbe mwanzo hadi mwisho, huwezi kuendesha mfumo.
  • Ugumu lazima ustahiliwe. Event sourcing, CQRS, na sagas zina nguvu na gharama; zifikie pale tatizo linapodai, si kwa chaguo-msingi.

Mapendekezo

Tofautisha matukio, amri, na ujumbe kabla ya kujenga chochote

Maneno haya matatu hutumiwa kwa kubadilishana, na mkanganyiko husababisha makosa halisi ya usanifu. Amri ni ombi la kufanya kitu (“CapturePayment”), linaloelekezwa kwa mshughulikiaji mmoja, na linaweza kukataliwa. Tukio ni arifa kwamba kitu kimeshatokea (“PaymentCaptured”), inayotangazwa kwa yeyote anayevutiwa, na haiwezi kukataliwa kwa sababu ukweli tayari ni kweli. Ujumbe ni bahasha isiyoegemea inayobeba chochote kati ya hivyo kwenye waya. Tofauti huumba uunganishaji: amri huunganisha mtumaji na mpokeaji mahususi na matokeo, wakati matukio hukabidhi udhibiti wa kinachofuata. Taja matukio yako kwa wakati uliopita, na unapojikuta ukichapisha “tukio” ambalo kwa kweli linamaanisha “tafadhali nenda ufanye kitu hiki mahususi,” umeandika amri iliyojificha.

Chagua foleni, kumbukumbu, na chapisha/jiandikishe kwa makusudi

Si ujumbe wote una umbo lilelile, na kuchagua lisilo sahihi ni kosa la mapema la kawaida. Foleni ya ujumbe hutoa kila ujumbe kwa mtumiaji mmoja na kwa kawaida huuondoa baada ya kuchakatwa, jambo linalofaa usambazaji wa kazi: wafanyakazi wengi wakichukua kazi, kila moja ikifanywa mara moja. Kumbukumbu ya matukio ya kudumu (mkondo) huweka matukio kwa mpangilio na kuruhusu watumiaji wengi huru kusoma kwa kasi yao, wakicheza upya historia kutoka nukta yoyote, jambo linalofaa usambazaji wa matukio na ukaguzi. Chapisha/jiandikishe hufanya wazalishaji kuchapisha kwenye mada na wasajiliwa wengi kila mmoja kupata nakala yake. Kanuni ya kiutendaji: ujumbe ukiwa kazi ambayo mfanyakazi mmoja anapaswa kukamilisha, fikia foleni; ukiwa ukweli ambao pande nyingi zinaweza kujali sasa au baadaye, fikia kumbukumbu ya kudumu, ambayo pia inakupa kucheza upya kwa kurejesha na kupokea watumiaji wapya. Angalia sura ya 3.4 kwa jinsi uchaguzi huu unavyoingiliana na mkakati wako wa uhifadhi wa data.

Pendelea uchoreaji kwa uhuru, uratibu kwa udhibiti

Mchakato wa biashara unapovuka huduma kadhaa, unauratibu kwa njia mbili. Katika uchoreaji, kila huduma huitikia matukio na kutoa yake, bila ubongo wa kati: iliyotenganishwa kikamilifu na nzuri kwa uhuru wa timu, lakini mchakato mzima upo tu kama tabia inayojitokeza ambayo hakuna mahali pamoja panapoielezea. Katika uratibu, mratibu wa kati huendesha hatua na kujua mtiririko mzima: rahisi kufuatilia na kurekebisha, kwa gharama ya kijenzi ambacho kila hatua inakitegemea. Chaguo-msingi zuri ni uchoreaji kwa miitikio inayohusiana kidogo (“agizo linaposafirishwa, huduma ya uaminifu inatoa pointi”) na uratibu kwa muamala uliofafanuliwa wenye hali wazi ya mafanikio na hitaji la kuripoti hali. Usiache mchakato muhimu uishi kama maarifa ya kikabila yaliyotawanyika kuvuka vishughulikiaji kumi vya matukio.

Fikia event sourcing na CQRS tu inapostahili nafasi yake

Event sourcing huhifadhi hali kama mfuatano wa kuongeza tu wa matukio badala ya picha ya sasa unayoibatilisha, na unajenga hali ya sasa kwa kuyacheza upya. Faida ni njia kamilifu ya ukaguzi, uwezo wa kujenga upya hali yoyote ya zamani, na hoja za muda; gharama ni kwamba unaweka matoleo ya miundo ya matukio milele, unashughulikia kucheza upya na picha, na kubeba kielelezo cha kiakili ambacho wasanidi wengi hawajawahi kukitumia. CQRS (Command Query Responsibility Segregation) hutenganisha kielelezo cha kuandika na kimoja au zaidi cha kusoma ili usomaji na uandishi vipanuke na kubadilika kwa kujitegemea; huoana kwa asili na event sourcing lakini haihitaji. Vyote viwili vinang’aa kwa vikoa vyenye mahitaji ya kweli ya ukaguzi, uzingatiaji, au hoja changamano, ndiyo sababu fedha na serikali zinazodhibitiwa huona zinastahili shida. Kwa huduma rahisi ya kuunda-kusoma-kusasisha-kufuta ni ugumu wa bahati mbaya utakaoujutia, kwa hiyo vitumie kwenye kipande cha kikoa chako kinachovihitaji, si mfumo mzima kwa silika.

Simamia miamala iliyosambazwa kwa sagas, si two-phase commit

Kwa kawaida huwezi kufunga muamala mmoja wa atomiki kuzunguka huduma na hifadhidata kadhaa. Two-phase commit iliyosambazwa hushikilia kufuli kuvuka mtandao, hupunguza upatikanaji, na hupanuka vibaya, kwa hiyo mara chache inafaa mfumo unaoendeshwa na matukio. Muundo wa saga huibadilisha: unda muamala kama mfuatano wa miamala ya ndani, kila mmoja ukitoa tukio linaloanzisha unaofuata, na umpe kila hatua kitendo cha fidia kinachoitengua hatua ya baadaye ikishindwa. Ikiwa “hifadhi hesabu” inafanikiwa lakini “tozo kadi” inashindwa, fidia inaachilia hesabu. Sagas zinaweza kuchorewa au kuratibiwa, na uratibu kwa kawaida hushinda kwa chochote unachopaswa kukifuatilia. Kwa sababu sagas hukumbatia uthabiti wa mwisho, mfumo hupitia hali za kati (“imehifadhiwa lakini haijalipwa”) kabla ya kuungana, kwa hiyo buni uzoefu wa mtumiaji na njia ya ukaguzi kuonyesha hali za “inaendelea” na “imefidiwa” kwa uaminifu. Sura ya 3.3 inashughulikia ardhi hii hii kutoka pembe ya mifumo iliyosambazwa.

Buni kwa utoaji angalau-mara-moja na ufanye watumiaji wasibadilike thamani

Mifumo ya ujumbe haiwezi kutoa mara moja tu kweli kuvuka kushindwa, kwa sababu kukiri kunakosema “nimechakata hili” kunaweza kupotea chenyewe, kikilazimisha kutoa tena. Unachoweza kupata ni utoaji angalau-mara-moja pamoja na uchakataji usiobadilika thamani, unaozalisha athari za mara-moja-tu. Kutobadilika thamani kunamaanisha kuchakata tukio lilelile mara mbili kunaacha matokeo yaleyale kama mara moja; fikia hapo kwa ufunguo wa kutobadilika thamani kwenye kila tukio na rekodi ya ulichoshughulikia tayari, ili marudio yatambuliwe na kudondoshwa. Utoaji wa mara-moja-kwa-zaidi (tuma-na-sahau, hakuna kutoa tena) ni rahisi lakini hupoteza ujumbe kimyakimya, kwa hiyo uuhifadhi kwa data unayoweza kumudu kupoteza. Chukulia lebo ya “mara-moja-tu” ambayo baadhi ya wauzaji hutangaza kwa mashaka: kwa kawaida inamaanisha mara-moja-tu ndani ya mpaka wa mfumo mmoja chini ya masharti mahususi, si hakikisho la mwanzo hadi mwisho ambalo kauli inadokeza.

Dhibiti mpangilio kwa vipande, na ujue vikundi vyako vya watumiaji

Mpangilio si wa kimataifa na bure; ni wa mahali na wa kulipiwa. Mkondo umegawanywa katika vipande, na unapata mpangilio ndani ya kipande, si kuvuka mada. Matukio huelekezwa kwa kipande kwa ufunguo wa kipande, kwa hiyo kuchagua ufunguo huo ndiko unakodhibiti kinachobaki kwa mpangilio: weka ufunguo kwa kitambulisho cha mteja na matukio ya mteja mmoja yanabaki kwa mpangilio kuhusiana, huku wateja tofauti wakichakatwa sambamba. Vikundi vya watumiaji huruhusu seti ya wafanyakazi kushiriki vipande vya mada, kila kipande kikishughulikiwa na mfanyakazi mmoja, ndivyo unavyopanua uwezo wa kupitisha huku ukihifadhi mpangilio wa kila kipande; hapa ukubwa unakutana na usahihi, ukiunganishwa na sura ya 3.5. Chagua ufunguo wa kipande unaoakisi hitaji lako halisi la mpangilio na unaosambaza mzigo sawasawa, kwa sababu ufunguo unaoelekeza trafiki nyingi kwenye kipande kimoja unaunda nukta moto ambayo hakuna idadi ya wafanyakazi inayoweza kuondoa.

Chukulia miundo kama mikataba yenye rejista na kanuni za mageuzi

Muundo wa tukio ni kiolesura kilichochapishwa kinachotumiwa na timu ambazo huenda hutawahi kukutana nazo, kwa hiyo kukibadilisha bila uangalifu kunazivunja kwa mbali. Weka miundo ya matukio yako kwenye rejista ya miundo, katalogi ya pamoja inayohifadhi kila muundo na kutekeleza kanuni za uoanifu mzalishaji anapojaribu kubadilisha mmoja. Pokea sera wazi: mabadiliko yanayooana nyuma (kuongeza uga wa hiari) yanaruhusiwa; mabadiliko yanayovunja (kuondoa uga, kubadilisha aina, kubadilisha jina) yanahitaji toleo jipya la muundo na mpango wa uhamishaji. Hii inaruhusu wazalishaji kubadilika bila usambazaji wa pamoja kuvuka kila mtumiaji, ambayo ndiyo sababu nzima uliyochagua matukio. Nidhamu ileile ya kuweka matoleo ya violesura kutoka sura ya 2.3 inatumika, kwa sababu muundo wa tukio ni API kwa jina lingine.

Hakikisha utoaji kwa outbox ya muamala, na ushughulikie kushindwa waziwazi

Hitilafu ya kawaida: huduma yako inaandika kwenye hifadhidata yake kisha kuchapisha tukio, na inaanguka kati ya hivyo viwili, kwa hiyo hifadhidata ilibadilika lakini tukio halikutoka. Outbox ya muamala hurekebisha hili kwa kuandika tukio kwenye jedwali la outbox katika muamala uleule wa hifadhidata kama badiliko la hali, ili vifanikiwe au vishindwe pamoja; kisha kituo tofauti husoma outbox na kuchapisha kwa dalali, mara nyingi kikitumia kunasa mabadiliko ya data kufuata kumbukumbu ya hifadhidata. Kwa kushindwa kwa kutumia, foleni ya barua zilizokufa hushikilia ujumbe unaoshindwa mara kwa mara ili ujumbe wa sumu (usiofanikiwa kamwe, labda kwa sababu umeharibika) usizuie foleni nyuma yake milele. Ongeza shinikizo la nyuma ili mzalishaji wa haraka asimlemee mtumiaji polepole: funga foleni zako, na punguza au umwaga mzigo zinapojaa badala ya kuchosha kumbukumbu. Mifumo hii minne hutenganisha onyesho na mfumo unaoweza kuendesha saa tisa usiku.

Fanya mtiririko usio wa papo hapo uonekane mwanzo hadi mwisho

Gharama ngumu zaidi ya kwenda kwenye matukio ni kwamba kitendo kimoja cha biashara sasa kinatawanyika kuvuka wazalishaji, madalali, na watumiaji bila safu ya miito inayovifunga pamoja. Sambaza kitambulisho cha uhusiano kupitia kila tukio ili uweze kufuata mtiririko mmoja wa kimantiki kuvuka kila kituo, nidhamu ileile ambayo sura ya 3.3 inaelekeza kwa miito ya usawazishaji. Fuatilia ucheleweshaji wa mtumiaji (jinsi kila mtumiaji alivyo nyuma ya wakati halisi anaposoma) kama kipimo cha daraja la kwanza, kwa sababu ucheleweshaji unaopanda ni onyo lako la mapema zaidi la matatizo, na fuatilia kina cha foleni ya barua zilizokufa, ucheleweshaji wa uchakataji, na viwango vya kutoa tena. Bila hili, tukio linaloshindwa kutumiwa kimyakimya linakuwa hitilafu isiyoonekana inayojitokeza siku baadaye kama data inayokosekana.

Mabadilishano: faida na hasara

MbinuFaidaHasara / gharama
Ombi/jibu la usawazishajiRahisi kufikiria, matokeo ya papo hapo, ufuatiliaji rahisiUunganishaji mkali wa muda, kushindwa kwa mfululizo, ukubwa mdogo
Inayoendeshwa na matukio (chapisha/jiandikishe juu ya kumbukumbu)Kutenganisha, ukubwa huru, kucheza upya, njia ya ukaguziUthabiti wa mwisho, ufuatiliaji mgumu zaidi, sehemu nyingi zinazosonga
Foleni ya ujumbe (usambazaji wa kazi)Kusawazisha mzigo, kuhifadhi kwa muda, rafiki kwa shinikizo la nyumaMtumiaji mmoja kwa kila ujumbe, haifai sana kutangaza
Event sourcing + CQRSHistoria kamili, hoja za muda, kusoma/kuandika kupanuka kwa kujitegemeaMatoleo ya miundo milele, ugumu wa kucheza upya, mkunjo mkali wa kujifunza
Saga (dhidi ya two-phase commit)Inapanuka, inapatikana, hakuna kufuli zilizosambazwaUthabiti wa mwisho, mantiki ya fidia, ngumu zaidi kufikiria

Mvutano wa msingi ni kati ya kutenganisha na kueleweka. Kila tukio unaloongeza hulegeza uunganishaji kati ya mzalishaji na mtumiaji, likinunua uhuru wa timu na ukubwa huru, na kwa wakati huohuo huondoa mstari wa hadithi ambao wito wa usawazishaji ungekuambia wazi: mtiririko unakuwa unaojitokeza, ukiishi katika mwingiliano badala ya faili moja yoyote. Suluhisha kwa kuchagua: tumia matukio pale kutenganisha kunalipa kweli, kama uunganishaji kuvuka mipaka ya timu, kutawanya kwa watumiaji wengi, kuhifadhi kwa muda vilele vya mzigo, na ukaguzi. Weka miito ya usawazishaji pale unahitaji jibu la papo hapo na kielelezo rahisi cha kiakili, kama kusoma data kutoa ukurasa. Hali ya kushindwa ya kuepuka ni kugeuza kila wito wa kazi wa ndani kuwa tukio na kuliita usanifu, busara ileile ya usanifu ambayo sura ya 3.2 inaiomba kwa kila muundo unaoupokea.

Maswali ya kujadili na timu yako

  1. Kwa mwingiliano huu mahususi, tunahitaji tukio kweli, au wito wa usawazishaji ungekuwa wazi zaidi na salama zaidi? Kuruka swali hili ndivyo mfumo unavyokusanya ugumu wa bahati mbaya. Jaribio la uaminifu ni kama mzalishaji anahitaji matokeo sasa hivi (wito) au anatangaza ukweli ambao wengine wanaweza kuitikia kwa wakati wao (tukio). Leta mwingiliano mahususi, si mapendeleo ya jumla, na uliza ni kutenganisha gani mnapata na ni uwazi gani wa ufuatiliaji mnaoacha. Mpigaji akizuiwa akisubiri “tukio” lichakatwe, mmejenga wito wa usawazishaji wa polepole, mgumu kutatua na kulipa ziada kwa fursa hiyo. Chaguo-msingi kwa mwingiliano wa ndani, wa timu moja, wa kuhitaji jibu-sasa linapaswa kuwa wito wa moja kwa moja; hifadhi matukio kwa pale uunganishaji legevu unastahili gharama yake.

  2. Nini kinatokea mtumiaji anapopokea tukio lilelile mara mbili, na je, tumelijaribu kweli? Utoaji angalau-mara-moja unahakikisha marudio yatatokea, kwa hiyo kila mtumiaji lazima asibadilike thamani, hata hivyo kutobadilika thamani ni rahisi kudai na rahisi kukosea. Pitia mtumiaji halisi na ufuatilie hasa jinsi utoaji wa pili unavyotambuliwa na kutenguliwa, iwe kwa ufunguo wa kutobadilika thamani, kumbukumbu ya matukio yaliyochakatwa, au operesheni isiyobadilika thamani kwa asili. Leta matokeo ya jaribio halisi ambapo mnatoa tena kundi na kuthibitisha hakuna tozo mara mbili, rekodi zilizorudiwa, au arifa zilizorudiwa. Zingatia hasa athari za pembeni zinazotoka hifadhidata yenu, kama barua pepe, malipo, na miito ya mtu wa tatu, kwa sababu hapo ndipo hitilafu zisizobadilika thamani zinapowaumiza wateja moja kwa moja. Timu yenu isipoweza kuonyesha jaribio linalothibitisha usalama dhidi ya marudio, dhania hamna usalama dhidi ya marudio.

  3. Mtiririko wa matukio unapovunjika kwenye uzalishaji, inachukua muda gani kabla hatujagundua, na tunaweza kufuatilia ujumbe mmoja mwanzo hadi mwisho? Kushindwa kusiko kwa papo hapo ni kimya, kwa hiyo mtumiaji anayeacha kuchakata kimyakimya anaweza kupita bila kugunduliwa hadi data inayokosekana igeuke malalamiko ya mteja au pengo la ukaguzi. Uliza ishara yenu ya mapema zaidi ni ipi, na kama mnafuatilia ucheleweshaji wa mtumiaji na kina cha foleni ya barua zilizokufa kama vipimo vya tahadhari badala ya dashibodi ambazo hakuna anazitazama. Leta tukio halisi au zoezi la siku ya mchezo na upime inachukua muda gani kufuata kitambulisho kimoja cha uhusiano kuvuka mzalishaji, dalali, na kila mtumiaji. Jibu likiwa “tunatafuta kwenye huduma kadhaa na kubahatisha,” uonekanaji wenu hauko tayari kwa ugumu mliouchukua. Katika sekta zinazodhibitiwa, kuweza kujenga upya hasa jinsi ujumbe ulivyosonga mara nyingi ni sharti la uzingatiaji, si fadhila.

  4. Tutabadilishaje muundo wa tukio ambao timu nyingi tayari zinautumia bila kuvunja yeyote? Umbo la tukio ni mkataba wa umma, na mara watumiaji kadhaa wanapoutegemea, badiliko linalosikika la kutokuwa na madhara linaweza kuvunja mifumo ambayo hujawahi kuisikia, kwa mbali, bila mkusanyaji wa kukuonya. Mvutano ni halisi: wazalishaji wanataka kusonga haraka na kusafisha matukio yao, wakati kila mtumiaji anataka umbo lisimame milele, kwa hiyo kubaliana mapema mabadiliko yapi ni salama (kuongeza uga wa hiari) na yapi yanadai toleo jipya na dirisha la uhamishaji (kuondoa uga, kubadilisha aina, kubadilisha jina). Leta orodha halisi ya watumiaji kwa kila mada, kama rejista ya miundo inatekeleza kanuni za uoanifu leo au maumbo yanabadilika kwa makubaliano yasiyo rasmi, na matoleo mawili yanaweza kuendesha sambamba kwa muda gani wakati wa uhamishaji. Katika shirika kubwa au mpango wa serikali wa kushiriki data kuvuka mashirika, muundo uliovunjika kimyakimya unaweza kuharibu rekodi katika mifumo msiyoimiliki na kujitokeza baadaye kama kushindwa kwa ukaguzi, kwa hiyo chukulia utekelezaji wa uoanifu kama utawala, si adabu.

  5. Kwa muamala wetu muhimu zaidi wa huduma nyingi, kila kitendo cha fidia kinatengua nini hasa, na hali gani za kati watumiaji na wakaguzi wataziona? Sagas hubadilisha uongo wa kupendeza wa muamala mmoja wa atomiki kwa mfuatano wa hatua za ndani ambazo kila moja inaweza kushindwa, kwa hiyo mfumo hupitia kweli hali kama “imehifadhiwa lakini haijalipwa” na “imetozwa lakini haijasafirishwa” kabla ya kuungana, na kujifanya vinginevyo ndivyo unavyosafirisha saga inayovuja fedha au kuacha rekodi bila wamiliki. Pitia mchakato halisi mwanzo hadi mwisho, taja fidia kwa kila hatua (nini kinaachilia hesabu, nini kinarejesha kadi), na uamue kama saga iliyoratibiwa unayoweza kuifuatilia inashinda uchoreaji unaojitokeza usioelezwa na mahali pamoja. Leta visa vya kushindwa mlivyovijaribu kweli, si njia ya furaha, na uthibitishe uzoefu wa mtumiaji na njia ya ukaguzi vinaonyesha hali za “inaendelea” na “imefidiwa” kwa uaminifu badala ya kuzificha. Katika mifumo ya fedha, manufaa, au kodi, mdhibiti ataulizia rekodi ilionekanaje katika kila wakati wa kati na nani alikuwa anawajibika kwa fidia, kwa hiyo hali za saga wenyewe ni kitu cha uzingatiaji.

  6. Nani anaendesha dalali au kumbukumbu ya matukio, na tumehesabu gharama halisi ya kuiendesha dhidi ya mbadala unaosimamiwa? Uti wa mgongo wa ujumbe si miundombinu ya bure inayoonekana mara unapoichora kwenye mchoro: mtu anaipachika, anapanua vipande vyake, anarekebisha uhifadhi, anaitikia inapopiga simu saa tisa usiku, na anamiliki uwezo wake na njia zake za kushindwa. Amua kwa makusudi kati ya kuendesha dalali huria wewe mwenyewe na kununua huduma inayosimamiwa, ukipima udhibiti na makazi ya data dhidi ya mzigo wa uendeshaji na gharama ya leseni, na uwe mkweli kama timu yenu ina kina cha kuendesha kumbukumbu iliyosambazwa vizuri. Leta jumla ya gharama ya umiliki: mzigo wa zamu, ujuzi maalumu unaohitajika, bili ya uhifadhi na uhifadhi wa kumbukumbu, na kukatika kwa dalali kunafanya nini kwa kila mtiririko tegemezi. Kwa shirika kubwa jibu linaumba mamlaka ya timu ya jukwaa, na kwa chombo cha serikali kanuni za ununuzi, mahitaji ya enzi ya data, na hitaji kali la kuepuka kufungwa na muuzaji vinaweza kubatilisha chaguo la bei nafuu zaidi, kwa hiyo yafichue vikwazo hivyo kabla ya kujitolea kwa teknolojia utakayoiendesha kwa muongo.

Mtazamo wa sekta

Kampuni changa. Rasilimali yako adimu zaidi ni umakini wa kihandisi, kwa hiyo baki wa usawazishaji hadi kutawanya kuanze kuumiza kweli. Vitu vitatu vikihitaji kuitikia kitendo kimoja, chapisha tukio moja (kama “OrderPlaced”) kwenye foleni au kumbukumbu inayosimamiwa badala ya kuweka kundi lako mwenyewe la dalali, na uweke malipo na chochote unachohitaji jibu la papo hapo kama wito wa moja kwa moja. Usipokee event sourcing, CQRS, au sagas ili uonekane wa kisasa; ugumu huo utazidi timu ndogo na kupunguza kasi ya kurudia ambako mnashindana nako.

Biashara ndogo. Huna mtaalamu wa ujumbe wala hamu ya kuendesha Kafka, kwa hiyo chukulia uunganishaji usio wa papo hapo kama kitu unachonunua, si kuendesha. Tegemea matukio ambayo zana zako zilizopo tayari zinatoa (webhooks, foleni zilizojengwa kwenye mtoa huduma wako wa wingu au majukwaa ya SaaS) na uache huduma inayosimamiwa imiliki utoaji, uhifadhi, na mabomba ya kutobadilika thamani. Weka uchaguzi kama kununua-dhidi-ya-kujenga kwa uaminifu: vishughulikiaji vichache vya webhook vinavyotegemewa vinashinda dalali maalumu usioweza kuuajiri wala kutatua saa tisa usiku.

Biashara kubwa. Tatizo lenu ni gharama ya uunganishaji kuvuka timu nyingi, kwa hiyo malipo ni jukwaa la pamoja linalotawaliwa: kumbukumbu ya matukio ya kudumu, rejista ya miundo yenye sera ya uoanifu inayotekelezwa, umiliki wazi wa mada, na mifumo ya kawaida ya kutobadilika thamani na outbox ili kila timu isivumbue upya. Huu ndio mazingira ambapo kubadilisha basi ya huduma ya shirika dhaifu au mtandao wa viungo vya nukta-kwa-nukta hujumlika kuwa akiba halisi, na ambapo sagas zilizoratibiwa zenye hali inayoonekana huruhusu wafanyakazi wa uendeshaji kusimamia michakato ya hatua nyingi. Weka bajeti ya uwekezaji wa uonekanaji na utawala wa miundo waziwazi, kwa sababu kwa ukubwa huu kushindwa kwa kimya kwa mtumiaji kunakuwa data inayokosekana kuvuka mifumo kadhaa.

Serikali. Kumbukumbu ya matukio ya kudumu, iliyopangwa ni mali ya ukaguzi na uwazi: inajibu “kwa nini uamuzi huu ulitoka hivi” kwa mfuatano usiobadilika wa ukweli, kwa hiyo egemea event sourcing pale uwajibikaji unapodai. Kushiriki data kati ya mashirika kunahitaji utoaji angalau-mara-moja na kuondoa marudio kwenye kitambulisho thabiti cha tukio ili rekodi iliyotolewa tena isiunde kesi iliyorudiwa kamwe, na ununuzi unapaswa kupima enzi ya data, ufichuzi wa mapungufu ya dalali, na uhamishikaji dhidi ya kufungwa. Chapisha, pale panapofaa, jinsi mtiririko unavyofanya kazi na jinsi raia anavyoweza kupinga matokeo ya kiotomatiki, na uweke kumbukumbu ya matukio kama rekodi inayoweza kutetewa ambayo vyombo vya usimamizi vitaomba kuikagua.

Mifano

Kampuni changa. Kampuni changa ndogo ya biashara ya mtandaoni inaanza na mtiririko mmoja wa usawazishaji: malipo yanaita huduma ya malipo na kusubiri. Inapokua, inataka barua pepe za uthibitisho wa agizo, masasisho ya hesabu, na programu ya uaminifu kuitikia ununuzi, na kuunganisha kila moja kama wito mwingine wa usawazishaji ndani ya malipo kunafanya malipo kuwa ya polepole na dhaifu. Timu inachapisha tukio moja la “OrderPlaced” kwenye kumbukumbu ya kudumu na kuacha watumiaji watatu huru waitikie, kwa hiyo malipo yanakuwa ya haraka tena na kuongeza mwitikio wa nne baadaye hakuhitaji badiliko lolote kwake. Wanaweka kuchukua malipo kuwa ya usawazishaji, kwa sababu wanahitaji jibu la ndiyo-au-hapana kabla ya kuthibitisha agizo, ambayo ndiyo mstari sahihi hasa wa kuchora kwa ukubwa wao.

Biashara kubwa. Kampuni ya kimataifa ya bima inazama katika uunganishaji wa nukta-kwa-nukta na basi ya huduma ya shirika (ESB) inayozeeka, kitovu cha kati ambacho kila mfumo hupitia na ambacho kimekuwa kizuizi na nukta moja ya kushindwa. Inahamia kwenye kumbukumbu ya matukio ya kudumu ambapo kila kikoa kinachapisha ukweli wake (sera imetolewa, dai limewasilishwa, malipo yamefanywa) na timu zinazotumia zinajiandikisha kwa wanachohitaji. Saga ya madai, iliyoratibiwa ili wafanyakazi wa uendeshaji waone hali ya kila dai, inaratibu suluhisho la hatua nyingi lenye fidia kwa hatua zinazoshindwa. Rejista ya miundo inaiwezesha timu ya sera kubadilisha matukio yake bila usambazaji wa pamoja kuvuka mifumo arobaini ya watumiaji, hasa udhaifu ambao ESB ya zamani iliweka.

Serikali. Mamlaka ya kitaifa ya kodi lazima iwape raia na wakaguzi jibu linaloweza kutetewa la “kwa nini tathmini yangu ilitoka hivi.” Inaunda kikoa cha tathmini kwa event sourcing, kwa hiyo kila badiliko ni tukio lisilobadilika katika kumbukumbu iliyopangwa na tathmini ya sasa ni uchezaji upya wa matukio hayo; raia anapopinga takwimu, mfanyakazi wa kesi anajenga upya hali kamili katika tarehe yoyote ya zamani na kuonyesha mfuatano wa ukweli ulioizalisha. Kushiriki data kati ya mashirika kunaendesha juu ya mada za kudumu zenye utoaji angalau-mara-moja, na mtumiaji wa kila wakala anaondoa marudio kwa kitambulisho cha tukio ili rekodi iliyotolewa tena isiunde kesi iliyorudiwa kamwe. Kumbukumbu ya matukio pia inafanya kazi kama njia ya ukaguzi ambayo vyombo vya usimamizi vinadai, ikigeuza wajibu wa uzingatiaji kuwa zao la pembeni la usanifu.

Kesi ya biashara: sababu, ROI, na TCO

Malipo ya usanifu unaoendeshwa na matukio yanatawaliwa na kitu kimoja: gharama ya uunganishaji kwa muda. Uunganishaji wa nukta-kwa-nukta hufanya gharama hiyo ikue na idadi ya miunganisho, ambayo inakua haraka kuliko idadi ya mifumo, kwa hiyo uunganishaji unakuwa kodi inayokula uwezo wako wa utoaji. Matukio huifanya iwe tambarare, kwa sababu timu huunganisha kupitia mkondo wa pamoja wa ukweli, mtumiaji mpya hujiunga kwa kujiandikisha, na wazalishaji hubadilika nyuma ya muundo wenye matoleo, kwa hiyo gharama ya pembeni ya uunganishaji unaofuata inashuka kwa kasi. Hiyo ndiyo hadithi kuu ya ROI ya kumwambia uongozi: si utendaji ghafi, bali kupungua kunakojumlika kwa gharama ya mabadiliko kuvuka timu nyingi.

Taja jumla ya gharama ya umiliki kwa uaminifu ili uaminiwe. Unachukua miundombinu ya dalali ya kuendesha, utawala wa miundo wa kudumisha, na mkunjo mkali wa kujifunza wa uendeshaji, kwa sababu mifumo isiyo ya papo hapo ni migumu zaidi kutatua kweli, kwa hiyo weka bajeti ya uwekezaji wa uonekanaji mapema. Pima haya dhidi ya gharama ya kutopokea matukio pale yanapofaa: safu ya uunganishaji iliyoganda ambapo kila badiliko ni mradi wa kuratibu timu nyingi, ESB ya urithi iliyokuwa kizuizi ambacho hakuna anayethubutu kuigusa, na kutoweza kuongeza uwezo bila kusumbua wa zamani. Kwa shirika kubwa linalobadilisha uunganishaji wa nukta-kwa-nukta dhaifu na serikali inayojenga njia za kudumu za ukaguzi, malipo ni imara zaidi pale mahitaji ya ukaguzi na kutenganisha ni halisi. Pale mahitaji hayo hayapo, jibu la uaminifu ni kwamba usanifu rahisi wa usawazishaji una TCO ya chini, na unapaswa kusema hivyo.

Mifumo mibaya na mitego

  • Monolith iliyosambazwa iliyojificha. Huduma zinazopaswa kusambazwa pamoja na kutegemea matukio ya ndani ya kila mmoja. Uliongeza dalali lakini ukahifadhi uunganishaji, kwa hiyo una hasara za mitindo yote miwili.
  • Matukio kama amri. Kuchapisha “matukio” yanayomaanisha kweli “tafadhali fanya kitu hiki mahususi kwa ajili yangu,” kuunda upya uunganishaji mkali na ucheleweshaji wa ziada na ufuatiliaji mbaya zaidi.
  • Kudhani utoaji mara-moja-tu. Watumiaji wanaovunjika, kutoza mara mbili, au kurudia rekodi dalali anaporudisha ujumbe bila kuepukika.
  • Event sourcing kila mahali. Kutumia event sourcing na CQRS kwenye vikoa rahisi vya kuunda-kusoma-kusasisha-kufuta ambavyo havikuhitaji historia, kununua ugumu mkali bila faida.
  • Hakuna utawala wa miundo. Wazalishaji wakibadilisha maumbo ya matukio kwa uhuru, wakivunja watumiaji wa chini ya mkondo kwa mbali bila ukaguzi wa uoanifu.
  • Kupuuza outbox. Kuandika kwenye hifadhidata na kuchapisha tukio kama hatua mbili tofauti, kwa hiyo ajali kati yake hupoteza matukio kimyakimya au kutoa ya uongo.
  • Hakuna ushughulikiaji wa barua zilizokufa. Ujumbe mmoja wa sumu ukizuia kipande, au ujumbe ulioshindwa ukitoweka bila foleni ya kuvinasa na kuvikagua.
  • Mtiririko usioonekana. Uchakataji usio wa papo hapo bila vitambulisho vya uhusiano, bila tahadhari za ucheleweshaji wa mtumiaji, na bila ufuatiliaji, kwa hiyo kushindwa kunabaki kimya hadi kuwa data inayokosekana.

Kielelezo cha ukomavu

  • Ngazi ya 1, Kuanzisha: Uunganishaji ni miito ya papo hapo ya nukta-kwa-nukta, au dalali yupo lakini anatumika kama ombi/jibu la usawazishaji. Marudio huvunja watumiaji, hakuna nidhamu ya miundo wala ufuatiliaji wa kuvuka vituo, na ujumbe ulioshindwa unatoweka kimyakimya.
  • Ngazi ya 2, Kuendeleza: Dalali au kumbukumbu iko kwenye matumizi halisi kwa baadhi ya mtiririko, na timu chache zina mazoea ya msingi: watumiaji wanazidi kutobadilika thamani na foleni za barua zilizokufa zinanasa baadhi ya kushindwa. Lakini mbinu hazina uthabiti kuvuka timu, matukio na amri bado zimechanganywa, miundo inabadilika kwa makubaliano yasiyo rasmi, na uonekanaji ni mwembamba.
  • Ngazi ya 3, Kusawazisha: Matukio, amri, na ujumbe vinatofautishwa kwa makusudi shirika zima. Watumiaji hawabadilishi thamani kama kiwango, miundo inaishi kwenye rejista yenye sera ya uoanifu iliyoandikwa na kutekelezwa, na outbox ya muamala inahakikisha utoaji. Sagas zenye fidia zinashughulikia miamala ya huduma nyingi, vitambulisho vya uhusiano vinasambaa kupitia kila kituo, na mifumo hii imeandikwa na kutumika kwa uthabiti badala ya kuachwa kwa kila timu.
  • Ngazi ya 4, Kusimamia: Jukwaa la matukio linapimwa na kudhibitiwa kwa data dhidi ya vipimo vya msingi. Ucheleweshaji wa mtumiaji, kina cha foleni ya barua zilizokufa, viwango vya kutoa tena, na ucheleweshaji wa uchakataji vinafuatiliwa kama vipimo vya tahadhari vyenye vizingiti vilivyokubaliwa, si dashibodi ambazo hakuna anazitazama; uoanifu wa miundo unathibitishwa kiotomatiki kabla mzalishaji hajaweza kusafirisha badiliko; kucheza upya, ushughulikiaji wa kushindwa, na kutobadilika thamani vinajaribiwa kwa mzunguko thabiti badala ya kutumainiwa. Kama mwingiliano fulani unapaswa kuwa tukio au wito wa usawazishaji unaamuliwa kwa ushahidi, na uwezo wa kila dalali, gharama ya uhifadhi, na kutegemewa vinapitiwa dhidi ya malengo.
  • Ngazi ya 5, Kuratibu: Mitindo inayoendeshwa na matukio na ya usawazishaji huchaguliwa kwa kila mwingiliano kama jambo la kawaida, na event sourcing na CQRS vinatumika hasa pale mahitaji ya ukaguzi na hoja yanapohalalisha na si pengine. Mtiririko usio wa papo hapo unaonekana kama wa usawazishaji, jukwaa linaboreka mfululizo mahitaji yanapohama (kustaafisha mada zilizokufa, kubadilisha utawala wa miundo, kusawazisha upya vipande), na ujumbe umeunganishwa na usanifu mpana na mkakati wa ukaguzi ili shirika libadilishe usanifu wake wa matukio biashara na wajibu wake vinapobadilika.

Mawazo ya kujadili

  1. Ni “matukio” yapi ya sasa kati ya yenu ni amri zilizojificha, na uunganishaji gani mngeondoa kwa kuyaunda kwa uaminifu?
  2. Mngecheza upya siku nzima ya matukio kupitia watumiaji wenu kesho, nini kingevunjika, na hilo linaambia nini kuhusu kutobadilika thamani na usalama wa kucheza upya?
  3. Ni sehemu zipi za kikoa chenu zinahitaji kweli njia ya ukaguzi ya event sourcing, na zipi ni hali rahisi ambayo ungeifanya ngumu tu kwa kuiweka kwenye chanzo?
  4. Mngehamaje kutoka basi ya huduma ya shirika ya urithi au mtandao wa uunganishaji wa nukta-kwa-nukta bila kubadilisha kwa mlipuko mkubwa wa hatari?
  5. Kwa mchakato wenu muhimu zaidi wa huduma nyingi, ni saga halisi iliyoratibiwa yenye fidia, au uchoreaji unaojitokeza usioelezwa na mahali pamoja?

Mambo muhimu ya kukumbuka

  • Usanifu unaoendeshwa na matukio hununua kutenganisha, ukubwa huru, kucheza upya, na njia za ukaguzi, na unagharimu kueleweka na ugumu wa uendeshaji, kwa hiyo uchague kwa kila mwingiliano pale faida ni halisi.
  • Weka matukio (ukweli uliotokea), amri (maombi ya kutenda), na ujumbe (bahasha) tofauti, kwa sababu mkanganyiko husababisha makosa halisi ya uunganishaji.
  • Buni kwa utoaji angalau-mara-moja na ufanye kila mtumiaji asibadilishe thamani; utoaji mara-moja-tu ni hadithi, na athari za mara-moja-tu ni mafanikio ya kihandisi.
  • Mpangilio ni kwa kila kipande, miundo ni mikataba inayostahili rejista, na outbox, foleni za barua zilizokufa, na shinikizo la nyuma ndio mabomba yanayofanya ujumbe uwe tayari kwa uzalishaji.
  • Tumia sagas zenye fidia badala ya two-phase commit, na ufikie event sourcing na CQRS tu pale mahitaji ya ukaguzi na hoja yanapohalalisha gharama yake kali.
  • Mtiririko usio wa papo hapo ni kimya unaposhindwa, kwa hiyo vitambulisho vya uhusiano, ufuatiliaji wa ucheleweshaji wa mtumiaji, na ufuatiliaji wa mwanzo hadi mwisho ndio tofauti kati ya mfumo unaoweza kuendeshwa na usioonekana.

Marejeo na usomaji zaidi

  • 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)