Bati yon sistèm distribiye serye, trè disponib, évolutive mande pou respekte teknik espesifik, prensip, ak modèl. Konsepsyon sistèm sa yo enplike nan adrese yon myriad de defi. Pami pwoblèm ki pi komen ak fondamantal yo se pwoblèm nan doub ekri .
"Pwoblèm ekri doub" se yon defi ki parèt nan sistèm distribiye, sitou lè w ap fè fas ak plizyè sous done oswa baz done ki bezwen kenbe nan senkronizasyon. Li refere a difikilte pou asire ke chanjman done yo toujou ekri nan divès magazen done, tankou baz done oswa kachèt, san yo pa entwodwi pwoblèm tankou enkonsistans done, konfli, oswa blokaj pèfòmans.
Achitekti mikwosèvis ak baz done modèl pou chak sèvis pote ou anpil avantaj, tankou deplwaman endepandan ak echèl, echèk izole, ak yon ogmantasyon potansyèl nan vitès devlopman. Sepandan, operasyon yo mande pou chanjman nan mitan plizyè mikwosèvis, fòse ou panse sou yon solisyon serye pou atake pwoblèm sa a.
Ann konsidere yon senaryo kote domèn nou an enplike aksepte aplikasyon pou prè, evalye yo, epi voye alèt notifikasyon bay kliyan yo.
Nan lespri a nan prensip la responsablite sèl, lwa Conway a, ak domèn-kondwi apwòch konsepsyon, apre plizyè sesyon evènman-storming, domèn nan antye te divize an twa subdomains ak defini kontèks limite ki gen fwontyè klè, modèl domèn, ak langaj omniprésente.
Premye a gen responsablite pou mete ak konpile nouvo aplikasyon pou prè. Dezyèm sistèm nan evalye aplikasyon sa yo epi pran desizyon ki baze sou done yo bay yo. Pwosesis evalyasyon sa a, ki gen ladan KYC/KYB, antifwod, ak chèk risk kredi, ka pran tan, sa ki nesesè pou yo okipe plizyè milye aplikasyon an menm tan. Kontinwe, fonksyonalite sa a te delege nan yon mikwosèvis dedye ak baz done pwòp li yo, ki pèmèt pou dekale endepandan.
Anplis de sa, de ekip diferan jere subsistèm sa yo, yo chak ak pwòp sik lage pa yo, akò nivo sèvis (SLA), ak kondisyon évolutivité.
Anfen , gen yon sèvis notifikasyon espesyalize an plas pou voye alèt bay kliyan yo.
Isit la se yon deskripsyon rafine nan ka itilizasyon prensipal sistèm nan:
Li se yon sistèm trè senp ak primitif nan premye gade, men ann plonje nan fason sèvis aplikasyon prè a trete kòmandman soumèt aplikasyon prè a.
Nou ka konsidere de apwòch pou entèraksyon sèvis:
Premye-Local-Commit-Then-Publish: Nan apwòch sa a, sèvis la mete ajou baz done lokal li a (komèt) epi answit pibliye yon evènman oswa mesaj bay lòt sèvis.
Premye-Pibliye-Lè sa-Local-Commit: Kontrèman, metòd sa a enplike nan pibliye yon evènman oswa mesaj anvan komèt chanjman yo nan baz done lokal la.
Tou de metòd yo gen dezavantaj yo epi yo sèlman pasyèlman san danje pou kominikasyon nan sistèm distribiye.
Sa a se yon dyagram sekans pou aplike premye apwòch la.
Nan senaryo sa a, Sèvis Aplikasyon Prè anplwaye apwòch First-Local-Commit-Then-Publish , kote li premye komèt yon tranzaksyon epi apre li eseye voye yon notifikasyon nan yon lòt sistèm. Sepandan, pwosesis sa a fasil pou echèk si, pa egzanp, gen pwoblèm rezo, Sèvis Evalyasyon an pa disponib, oswa Sèvis Aplikasyon Prè a rankontre yon erè Memwa (OOM) ak aksidan. Nan ka sa yo, mesaj la ta pèdi, kite Evalyasyon an san avètisman nouvo aplikasyon prè a, sof si mezi adisyonèl yo aplike.
Ak dezyèm lan.
Nan senaryo First-Publish-Then-Local-Commit , Sèvis Aplikasyon Prè a ap fè fas ak plis risk enpòtan. Li ta ka enfòme Sèvis Evalyasyon an sou yon nouvo aplikasyon men li pa sove aktyalizasyon sa a lokalman akòz pwoblèm tankou pwoblèm baz done, erè memwa, oswa ensèk kòd. Apwòch sa a ka mennen nan enkonsistans enpòtan nan done yo, ki ka lakòz pwoblèm grav, tou depann de fason Sèvis Revizyon Prè a okipe aplikasyon k ap fèk ap rantre yo.
Se poutèt sa, nou dwe idantifye yon solisyon ki ofri yon mekanis solid pou pibliye evènman bay konsomatè ekstèn. Men, anvan nou fouye nan solisyon potansyèl yo, nou ta dwe premye klarifye ki kalite garanti livrezon mesaj ki ka reyalize nan sistèm distribiye yo.
Gen kat kalite garanti nou ta ka reyalize.
Pa gen garanti
Pa gen okenn garanti ke mesaj la pral delivre nan destinasyon an. Apwòch Premye-Lokal-Komèt-Lè sa a-Pibliye se jisteman sou sa a. Konsomatè yo ka resevwa mesaj yon fwa, plizyè fwa, oswa pa janm ditou.
Nan pifò fwa livrezon
Livrezon maksimòm yon fwa vle di ke mesaj la pral delivre nan destinasyon an omwen 1 fwa. Apwòch la Premye-Lokal-Komèt-Lè sa a-Pibliye kapab aplike nan fason sa a kòm byen ak politik la reeseye nan tantativ ki gen valè yon sèl.
Omwen yon fwa livrezon \ Konsomatè yo pral resevwa ak trete chak mesaj men yo ka resevwa menm mesaj la plis pase yon fwa.
Egzakteman yon fwa livrezon \ Egzakteman yon fwa livrezon vle di ke konsomatè ap resevwa mesaj la efektivman yon fwa.
Teknikman, li posib reyalize ak tranzaksyon Kafka ak aplikasyon espesifik idempotent nan pwodiktè ak konsomatè.
Nan pifò ka yo, 'omwen yon fwa' garanti livrezon adrese anpil pwoblèm lè yo asire mesaj yo delivre omwen yon fwa, men konsomatè yo dwe idempotan. Sepandan, bay echèk rezo inevitab yo, tout lojik konsomatè yo dwe idepotan pou evite trete mesaj kopi, kèlkeswa garanti pwodiktè a. Se poutèt sa, kondisyon sa a se pa tèlman yon dezavantaj kòm li reflete reyalite.
Gen anpil solisyon nan pwoblèm sa a, ki gen avantaj ak dezavantaj yo.
Dapre Wikipedya, Two-Phase Commit (2PC) se yon pwotokòl tranzaksyon distribye yo itilize nan syans enfòmatik ak sistèm jesyon baz done pou asire konsistans ak fyab tranzaksyon distribiye yo. Li fèt pou sitiyasyon kote plizyè resous (egzanp, baz done) bezwen patisipe nan yon sèl tranzaksyon, epi li asire ke swa tout nan yo komèt tranzaksyon an oswa yo tout avòte li, kidonk kenbe konsistans done yo. Li son egzakteman sa nou bezwen, men De-faz Commit gen plizyè dezavantaj:
Solisyon ki pi aparan pou achitekti microservices se aplike yon modèl (oswa menm pafwa anti-modèl) - yon baz done pataje. Apwòch sa a trè entwisyon si ou bezwen konsistans tranzaksyon atravè plizyè tab nan baz done diferan, jis itilize yon baz done pataje pou mikwosèvis sa yo.
Dezavantaj yo nan apwòch sa a gen ladan entwodwi yon sèl pwen echèk, anpeche dechèl baz done endepandan, ak limite kapasite nan sèvi ak solisyon baz done diferan ki pi byen adapte pou kondisyon espesifik ak ka itilize. Anplis de sa, modifikasyon nan baz kod mikwosèvis yo ta nesesè pou sipòte yon fòm tranzaksyon distribye konsa.
' Bwat tranzaksyon an' se yon modèl konsepsyon yo itilize nan sistèm distribiye pou asire pwopagasyon mesaj serye, menm lè yo fè fas a sistèm mesaj ki pa fyab. Li enplike estoke evènman yo nan yon tab 'OutboxEvents' ki deziyen nan menm tranzaksyon an ak operasyon an tèt li. Apwòch sa a aliman byen ak pwopriyete ACID nan baz done relasyon yo. Kontrèman, anpil baz done No-SQL pa totalman sipòte pwopriyete ACID, yo chwazi pito pou prensip teyorèm CAP ak filozofi BASE, ki bay priyorite disponiblite ak konsistans evantyèlman pase konsistans strik.
Yon bwat tranzaksyon bay omwen yon fwa garanti epi yo ka aplike ak plizyè apwòch:
Log tranzaksyon tailing
Piblikatè biwo vòt
Apwòch tranzaksyon tailing implique itilize solisyon baz done espesifik tankou CDC (Change Data Capture). Dezavantaj prensipal yo nan apwòch sa a se:
Solisyon espesifik baz done yo
Ogmante latansi akòz spesifik enplemantasyon CDC yo
Yon lòt metòd se Polling Publisher , ki fasilite dechajman nan biwo vòt la lè yo vote tab la. Dezavantaj prensipal la nan apwòch sa a se potansyèl pou ogmante chaj baz done, ki ka mennen nan pi gwo pri. Anplis de sa, se pa tout baz done No-SQL sipòte rechèch efikas pou segman dokiman espesifik. Se poutèt sa, èkstraksyon tout dokiman yo ka lakòz degradasyon pèfòmans.
Isit la se yon ti dyagram sekans ki eksplike kijan li fonksyone.
Defi prensipal la ak modèl Bwat Tranzaksyon an se nan depandans li sou pwopriyete ACID baz done yo. Li ta ka senp nan baz done OLTP tipik men poze defi nan domèn NoSQL. Pou adrese sa a, yon solisyon potansyèl se ogmante boutèy demi lit la (pa egzanp, Kafka) depi nan kòmanse pwosesis demann.
Olye pou yo trete dirèkteman kòmandman 'soumèt aplikasyon prè' la, nou imedyatman voye li nan yon sijè entèn Kafka epi answit retounen yon rezilta 'aksepte' bay kliyan an. Sepandan, piske li trè posib ke kòmandman an toujou bezwen trete, nou pa ka imedyatman enfòme kliyan an nan rezilta a. Pou jere konsistans sa a evantyèlman, nou ka anplwaye teknik tankou vòt long, vòt kliyan inisye, mizajou optimis UI, oswa itilize WebSockets oswa Evènman Sèvè-Sent pou notifikasyon. Sepandan, sa a se yon sijè diferan tout ansanm, kidonk ann retounen nan sijè inisyal nou an.
Nou voye mesaj la sou yon sijè entèn Kafka. Lè sa a, Sèvis Aplikasyon Prè a konsome mesaj sa a - menm kòmandman li te resevwa nan men kliyan an - epi li kòmanse pwosesis. Premyèman, li egzekite kèk lojik biznis; sèlman apre yo fin egzekite lojik sa a ak rezilta yo pèsiste, li pibliye nouvo mesaj sou yon sijè piblik Kafka.
Se pou nou pran yon gade nan yon ti jan nan pseudo-kòd.
public async Task HandleAsync(SubmitLoanApplicationCommand command, ...) { //First, process business logic var loanApplication = await _loanApplicationService.HandleCommandAsync(command, ...); //Then, send new events to public Kafka topic producer.Send(new LoanApplicationSubmittedEvent(loanApplication.Id)); //Then, commit offset consumer.Commit(); }
E si pwosesis la nan lojik biznis la echwe? Pa gen enkyetid, depi konpansasyon an poko komèt, mesaj la pral eseye ankò.
E si voye nouvo evènman bay Kafka echwe? Pa gen enkyetid, depi lojik biznis la se idempotent, li pa pral kreye yon aplikasyon prè kopi. Olye de sa, li pral eseye voye mesaj yo bay sijè piblik Kafka la.
E si mesaj yo voye bay Kafka, men komite konpanse a echwe? Pa gen enkyetid, depi lojik biznis la se idempotan, li pa pral kreye yon aplikasyon prè kopi. Olye de sa, li pral voye mesaj bay sijè piblik Kafka a epi espere ke komèt konpanse a reyisi fwa sa a.
Dezavantaj prensipal yo nan apwòch sa a gen ladan konpleksite a ajoute ki asosye ak yon nouvo style pwogramasyon, evantyèlman konsistans (depi kliyan an pa pral imedyatman konnen rezilta a), ak egzijans pou tout lojik biznis yo dwe idempotan.
Ki sa ki evènman apwovizyone, ak ki jan li ta ka aplike isit la? Evènman apwovizyone se yon modèl achitekti lojisyèl itilize pou modèl eta a nan yon sistèm nan kaptire tout chanjman nan done li yo kòm yon seri de evènman imuiabl. Evènman sa yo reprezante reyalite oswa tranzisyon eta epi sèvi kòm yon sèl sous verite pou eta aktyèl sistèm lan. Se konsa, teknikman, lè nou aplike yon sistèm evènman-sourcing, nou deja gen tout evènman nan EventStore, epi EventStore sa a ka itilize pa konsomatè yo kòm yon sèl sous verite sou sa ki te pase. Pa gen okenn nesesite pou yon solisyon baz done espesifik pou swiv tout chanjman oswa enkyetid sou kòmann-nan, pwoblèm nan sèlman chita sou bò lekti depi yo dwe kapab jwenn aktyèl eta nan antite oblije rejoue tout evènman yo.
Nan atik sa a, nou te revize plizyè apwòch pou bati yon mesaj serye nan sistèm distribiye yo. Gen plizyè rekòmandasyon nou ta ka konsidere pandan y ap bati sistèm ak karakteristik sa yo
Pwochenn fwa, nou pral gade nan yon egzanp ki pi pratik nan enplemante yon bwat eksklizyon tranzaksyon. Gade
ou!