Kotonga système distribué ya kozala na confiance, oyo ezali mingi, oyo ekoki ko évoluer esengaka kokangama na ba techniques, ba principes, pe ba modèles spécifiques. Ndenge ya kosala ba systèmes ya ndenge wana esɛngaka kosilisa mikakatano ebele. Kati na makambo oyo epalangani mingi mpe ya moboko ezali na mokakatano ya kokoma mibale .
« Problème ya kokoma mibale » ezali mokakatano oyo ebimaka na ba systèmes distribués, mingi mingi tango ya kosala na ba sources ya ba données to ba bases de données ebele oyo esengeli kozala na synchronisation. Ezali kolobela mokakatano ya kosala ete mbongwana ya ba données ekomama mbala na mbala na ba magasins ya ba données ndenge na ndenge, lokola ba bases de données to ba caches, sans ko kotisa makambo lokola inconsistence ya ba données, matata, to ba goulets d’étranglement ya performance.
Architecture ya microservices mpe base de données ya modèle na service moko ememeli yo matomba mingi, lokola déploiement indépendant mpe échelle, ba échecs isolé, mpe bomati oyo ekoki kozala ya vitesse ya développement. Kasi, misala esɛngaka mbongwana kati na ba microservices ebele, mpe yango etindaka yo okanisa solution ya kotyela motema mpo na kosilisa mokakatano yango.
Totalela scénario oyo domaine na biso esangisi kondima ba demandes ya crédit, kotala yango, mpe na sima kotinda ba alertes ya notification na ba clients.
Na molimo ya principe ya responsabilité unique, loi ya Conway, mpe approche ya design oyo etambwisami na domaine, sima ya ba sessions ebele ya événement-storming, domaine mobimba ekabolamaki na ba sous-domaines misato na ba contextes limités définis oyo ezali na ba frontières ya polele, ba modèles ya domaine, mpe monoko oyo ezali bisika nyonso.
Ya liboso ezali na mokumba ya kosala onboard mpe kosangisa ba demandes ya sika ya kodefa. Système ya mibale etalaka ba applications wana pe ezuaka ba décisions na kotalaka ba données oyo epesami. Processus oyo ya évaluation, na kati na yango KYC/KYB, antifraud, mpe ba vérifications ya risque ya crédit, ekoki kozua tango, kosenga makoki ya ko traité ba nkoto ya ba demandes na mbala moko. Na yango, fonctionnalité oyo epesameli na microservice dédié oyo ezali na base de données na yango moko, oyo epesi nzela na échelle indépendante.
Lisusu, ba sous-systèmes oyo ekambami na ba équipes mibale ekeseni, moko na moko ezali na ba cycles ya sortie na yango, ba accords ya niveau ya service (SLA), pe ba exigences ya évolutivité.
Lastly , service spécialisé ya notification ezali na esika mpo na kotinda ba alertes na ba clients.
Tala ndimbola ya malamu ya likambo ya bosaleli ya liboso ya système:
Ezali système moko kitoko pete pe primitif na première vue, mais to plonge na ndenge service ya demande ya Loan e traité commande ya soumettre demande ya crédit.
Tokoki kotalela ndenge mibale mpo na boyokani ya mosala:
Ya liboso-Local-Commit-Then-Publish: Na approche oyo, service ezo mettre à jour base de données locale na yango (commits) et puis ebimisaka événement to message na ba services misusu.
First-Publish-Then-Local-Commit: Contrairement, méthode oyo esangisi kobimisa événement to message avant ya ko committre ba changements na base de données locale.
Ba méthodes nionso mibale ezali na ba inconvénients na yango mpe ezali kaka partiellement sécurité ya panne pona communication na ba systèmes distribués.
Oyo ezali diagramme ya sequence ya kosalela approche ya liboso.
Na scénario oyo, Service ya demande ya crédit esalelaka approche ya First-Local-Commit-Then-Publish , esika esala liboso transaction mpe sima emekaka kotinda notification na système mosusu. Kasi, mosala oyo ekoki kolonga te soki, na ndakisa, ezali na mikakatano ya réseau, Service ya botali ezali te, to Service ya bosengi ya kodefa ekutani na libunga ya Hors mémoire (OOM) mpe epanzani. Na makambo ya boye, nsango elingaki kobunga, kotika Evaluation kozanga liyebisi ya bosengi ya sika ya kodefa, longola se soki ba mesures ya kobakisa esalemi.
Mpe oyo ya mibale.
Na scénario ya Première-Publish-Après-Local-Commit , Service ya demande ya crédit ekutanaka na ba risque ya minene mingi. Ekoki koyebisa Service ya botali na ntina ya application ya sika kasi elongi te kobomba mise à jour oyo na esika mpo na mikakatano lokola mikakatano ya base de données, mabunga ya mémoire, to ba bugs ya code. Ndenge oyo ekoki komema na bokeseni monene na ba données, oyo ekoki kobimisa mikakatano minene, na kotalela ndenge nini Service ya botali ba crédits esimbaka ba demandes oyo ekoya.
Na yango, esengeli toyeba solution oyo ekopesa mécanisme ya makasi mpo na kobimisa ba événements na ba consommateurs ya libanda. Kasi, yambo ya ko profonder na ba solutions potentielles, esengeli liboso to clarifier ba types ya ba garanties ya livraison ya message oyo ekoki kozuama na ba systèmes distribués.
Ezali na mitindo minei ya garantie oyo tokokaki kokokisa.
Ba garanties te
Ezali na garantie moko te ete nsango ekomemama na esika oyo ozali kokende. Approche Ya liboso-Local-Commit-Then-Publish ezali précisément na likambo oyo. Ba consommateurs bakoki kozwa ba messages mbala moko, mbala ebele, to ata moke te.
Au plus mbala moko livraison
Au plus mbala moko livraison elakisi que message eko livrer na destination au plus 1 fois. Approche First-Local-Commit-Then-Publish ekoki kosalelama na ndenge oyo lokola pe na politique ya komeka lisusu ya ba tentatives na valeur moko.
Au moins mbala moko livraison\Ba consommateurs bakozua pe bako traité message nionso mais bakoki kozua message moko koleka mbala moko.
Exactement mbala moko livraison\Exactement mbala moko livraison elakisi que consommateur akozua message efficacement mbala moko.
Techniquement, ezali possible ya ko réaliser na ba transactions ya Kafka na mise en œuvre spécifique idempotent ya producteur na consommateur.
Mbala mingi, ba garanties ya livraison ‘ata mbala moko’ etali makambo mingi na kosala que ba messages epesama ata mbala moko, kasi ba consommateurs basengeli kozala idempotent. Kasi, na kotalaka ba panne ya réseau oyo ekoki ko éviter te, logique nionso ya consommateur esengeli ezala idempotent mpo na ko éviter ko traité ba messages doublons, sans considération ya ba garanties ya producteur. Yango wana, esengelami oyo ezali mingi te inconvénient kasi ezali komonisa bosolo.
Ezali na ba solutions ebele ya problème oyo, oyo ezali na ba avantages na ba inconvénients na yango.
Engebene na Wikipedia, Commit ya deux phases (2PC) ezali protocole ya transaction distribuée oyo esalelamaka na informatique mpe ba systèmes ya gestion ya base de données mpo na ko assurer consistance mpe fidélité ya ba transactions distribuées. Esalemi mpo na makambo oyo biloko mingi (ndakisa, ba bases de données) esengeli kosangana na mombongo moko, mpe ezali kosala ete soki bango nyonso basala mombongo to bango nyonso balongola yango, na ndenge yango, kobatela boyokani ya ba données. Ezali koyokana mpenza oyo tozali na yango mposa, kasi Two-Phase Commit ezali na makambo mingi ya mabe:
Solution oyo emonanaka mingi pona architecture ya microservices ezali ya kosalela modèle (to même tango mosusu anti-modèle) — base de données ya kokabola. Approche oyo ezali très intuitive soki ozali na besoin ya consistance transactionnelle na ba tableaux ebele na ba bases de données différentes, salela kaka base de données moko ya partage pona ba microservices oyo.
Ba inconvénients ya approche oyo ezali kokotisa point moko ya échec, kopekisa échelle indépendante ya base de données, pe kopekisa makoki ya kosalela ba solutions ya base de données ndenge na ndenge oyo ebongi malamu pona ba besoins spécifiques pe ba cas ya usage. En plus, ba modifications na ba codebases ya microservices ekozala nécessaire pona ko soutenir forme ya transaction distribuée ya boye.
' Boîte de sortie transactionnelle ' ezali modèle ya conception oyo esalelamaka na ba systèmes distribués pona ko assurer propagation ya message ya kozala na confiance, ata liboso ya ba systèmes ya messagerie ya kozala na confiance te. Ezali kosangisa makambo na tableau oyo epesameli 'OutboxEvents' na kati ya transaction moko na opération yango moko. Approche oyo ezo aligner bien na ba propriétés ACID ya ba bases de données relationales. Na bokeseni, ba bases de données mingi ya No-SQL esimbaka mobimba te ba propriétés ya ACID, e opter na esika na yango ba principes ya théorème ya CAP na philosophie ya BASE, oyo e prioritiser disponibilité mpe na suka consistance sur la consistance strict.
Boîte de sortie ya transaction epesaka garantie ata mbala moko mpe ekoki kosalelama na ba approches ebele :
Mokila ya journal ya transaction
Mobimisi ya ba sondages
Approche ya tailing ya journal ya transaction elingi koloba kosalela ba solutions spécifiques ya base de données lokola CDC (Change Data Capture). Mabe minene ya lolenge wana ya kosala ezali:
Ba solutions spécifiques ya base de données
Latence oyo emati mpo na ba spécificités ya ba mise en œuvre ya CDC
Méthode mosusu ezali Polling Publisher , oyo e faciliter déchargement ya outbox na polling na tableau ya outbox. Inconvénient ya liboso ya approche oyo ezali potentiel ya augmentation ya charge ya base de données, oyo ekoki komema na ba coûts ya likolo. Lisusu, ba bases de données nionso ya No-SQL te nde esungaka requête efficace pona ba segments spécifiques ya mikanda. Kobimisa mikanda mobimba ekoki, na yango, kosala ete mosala ebeba.
Tala diagramme ya séquence ya moke oyo ezali kolimbola ndenge nini esalaka.
Mokakatano ya liboso na motindo ya Boîte de sortie ya Transaction ezali na bozangi bondimi na yango na ba propriétés ya ACID ya base de données. Ekoki kozala semba na ba bases de données OLTP typiques kasi epesaka mikakatano na domaine ya NoSQL. Pona ko régler yango, solution potentielle ezali ya ko leverage journal ya append (par exemple, Kafka) depuis kobanda traitement ya demande.
Na esika ya kosala directement commande ya ‘kotinda demande ya crédit’, totindaka yango mbala moko na sujet moko ya kati ya Kafka mpe sima tozongisaka résultat ‘accepté’ na client. Kasi, lokola ezali mpenza na likoki ete esengeli naino kosala komande yango, tokoki te koyebisa mbala moko kiliya résultat yango. Mpo na ko gérer consistance oyo ya suka, tokoki kosalela ba techniques lokola sondage ya molayi, sondage oyo ebandisami na client, mises à jour ya UI optimiste, to kosalela WebSockets to Server-Sent Events pona ba notifications. Kasi, oyo ezali likambo ekeseni mpenza, yango wana tózonga na likambo na biso ya ebandeli.
Totindaki message na sujet moko ya Kafka interne. Na sima Service ya demande ya crédit ezo consommer message oyo — commande moko oyo ezuaki epayi ya client — pe ebandi ko traité. Ya liboso, esalaka mwa logique ya mombongo; kaka sima ya logique oyo e exécuter na succès mpe ba résultats e persister, e publier ba messages ya sika na sujet ya Kafka public.
Totala mua pseudo-code.
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(); }
Est-ce que soki traitement ya logique ya commerce elongi te? Mitungisi te, lokola offset esalemi naino te, message ekomeka lisusu.
Est-ce que soki kotinda ba événements ya sika na Kafka elongi te? Soucis te, lokola logique ya commerce ezali idempotent, ekosala demande ya crédit double te. Au lieu ya kosala bongo, ekomeka kotinda lisusu ba messages na sujet ya Kafka public.
Ezali boni soki ba messages etindami na Kafka, kasi commit ya offset elongi te? Pas de soucis, lokola logique ya entreprise ezali idempotent, ekosala demande ya crédit double te. Au lieu ya kosala bongo, ekotinda lisusu ba messages na sujet ya Kafka public mpe ekozala na espoir que commit ya offset elonga mbala oyo.
Ba inconvénients ya minene ya approche oyo ezali complexité oyo ebakisami oyo esangisi na style ya sika ya programmation, suka suka consistance (lokola client akoyeba mbala moko résultat te), mpe esengelami ya logique nionso ya entreprise ezala idempotent.
Evenement sourcing ezali nini, mpe ndenge nini ekokaki kosalelama awa? Event sourcing ezali modèle architectural logiciel oyo esalelamaka pona ko modeler état ya système na ko capter ba changements nionso na ba données na yango lokola série ya ba événements immutables. Makambo oyo ezali komonisa makambo to mbongwana ya l’Etat mpe esalaka lokola source unique ya vérité mpo na état ya système ya lelo. Donc, techniquement, na ko mettre en œuvre système ya événement-sourcing, tozali déjà na ba événements nionso na EventStore, mpe EventStore oyo ekoki kosalelama na ba consommateurs lokola source unique ya vérité na oyo esalemaki. Ezali na besoin te ya solution ya base de données spécifique mpo na ko suivre ba changements nionso to ba soucis na oyo etali commande, problème seul ezali kofanda na côté ya kotanga puisque mpo na kozala na makoki ya kozua état ya entité ya solo esengeli ko replayer ba événements nionso.
Na lisolo oyo, totalelaki mayele mingi mpo na kotonga bansango oyo ekoki kotyelama motema na ba systèmes distribués. Ezali na makanisi mingi oyo tokoki kotalela ntango tozali kotonga ba systèmes oyo ezali na bizaleli oyo
Mbala ya sima, tokotala ndakisa moko ya malamu mingi ya kosalela Boîte de sortie ya Transaction. Kotala
yo!