当前位置:网站首页>- Oui. Net Distributed Transaction and Landing Solution
- Oui. Net Distributed Transaction and Landing Solution
2022-07-05 20:00:00 【Li zhenghao】
Cet article se concentre sur les transactions distribuées courantes et leurs applications dans.NetPlan d'atterrissage sous la plateforme,Beaucoup de références,Principalement deDTMDocuments officiels、Oui.
Cet article est publié sur mon blog personnel:
Liens vers les articles
Mode de transaction distribué couramment utilisé
XA(Soumission en deux étapes)
XAC'est parX/OpenSpécification des transactions distribuées proposées par l'Organisation,XALa spécification définit principalement(Global)Gestionnaire de transaction et(Local)Explorer(RM)Interface entre.Base de données locale telle quemysqlInXADans le rôle deRMRôle
XAIl y a deux étapes.:
Première phase(prepare):Tous les participantsRMPréparer l'exécution de la transaction et verrouiller les ressources nécessaires.ParticipantsreadyHeure,VersTMLe rapport est prêt..
Deuxième phase (commit/rollback):Lorsque le gestionnaire de transaction confirme tous les participants(RM)TousreadyAprès,Envoyer à tous les participantscommitLes ordres.
À l'heure actuelle, la base de données principale est essentiellement prise en charge.XAServices,Y compris:mysql、oracle、sqlserver、postgre
L'organigramme est le suivant::
TCC
TCCDivisé en trois étapes:
- Try
Tester les ressources de chaque service,Verrouiller ou réserver les ressources à l'avance(En généralTry Si ça marche Confirm Par défaut, la phase réussira , En cas d'échec, la cause possible est une exception au réseau 、Arrêt du serveur, etc.) - Confirm
Effectuer des opérations réelles dans chaque service - Cancel
En cas d'erreur dans l'exécution de la méthode d'affaires d'un service,Alors il y a une compensation.,C'est - à - dire effectuer une opération de ROLLBACK pour la logique d'entreprise qui a fonctionné avec succès
Dans le cas des virements interbancaires :
TryPhase
D'abord, geler les fonds des deux comptes bancaires.,Ne laissez pas l'opérationConfirmPhase
Effectuer les opérations de transfert réelles,ADéduction pour compte bancaire,BAugmentation du financement des comptes bancairesCancelPhase
Si une opération bancaire échoue,Il faut donc faire demi - tour pour compenser.
Par exemple,ASi le compte bancaire a été réduit,MaisBL'augmentation du capital du compte bancaire a échoué,Alors, il faut le faire.ALes fonds du compte bancaire sont récupérés.
Scénarios applicables:
Exigences élevées en matière de conformité , Scénario commun à la catégorie de financement ,Peut être utiliséTCC,Écrivez vous - même beaucoup de logique d'entreprise,Déterminer par vous - même si chaque étape d'une transactionok,- Non.okPour effectuer une compensation/Code de retour en arrière
Tableau des messages locaux
Utilisation de la base de données+ Mise en file d'attente des messages pour les transactions distribuées asynchrones ,Le processus est le suivant:
ALorsque le système fonctionne dans une transaction locale,Insérer une donnée dans le tableau des messages
Et voilà.ALe système envoie ce message àMQ
BQuand le système reçoit le message,Dans une affaire,Insère une donnée dans votre propre formulaire de message local,Effectuer d'autres opérations commerciales en même temps,Si ce message a été traité,Alors cette transaction va revenir en arrière,Cela garantit que les messages ne seront pas traités en double
BUne fois le système exécuté avec succès, Je vais me mettre à jour localement Tableau des messagesEtAÉtat de la table de messages système
SiBÉchec du traitement du système,Alors l'état de la table de messages ne sera pas mis à jour,À ce stade,ALe système scanne régulièrement sa propre table de messages,S'il y a des messages non traités,Sera envoyé à nouveau àMQÀ mi - chemin,JeanBRetraitement
Cette option garantit la cohérence finale
Même siBLa transaction a échoué,MaisAIl y aura des messages répétés,Jusqu'àBJusqu'à ce que ça marche
SAGA
SagaC'est un article de base de données.SAGASUn schéma de transaction distribuée mentionné.L'idée de base est de diviser les transactions longues en plusieurs transactions courtes locales,ParSagaCoordination des coordonnateurs des transactions,Si chaque transaction locale est terminée avec succès, elle est terminée normalement,Si une étape échoue,L'opération de compensation est appelée une fois dans l'ordre inverse
Exemples
Par exemple, nous allons effectuer une opération similaire à un virement interbancaire ,Oui.ADans30 Transfert de yuan B,SelonSagaPrincipe de la transaction,Nous allons faire toute la transaction globale, Divisé en services suivants :
- Transfert(TransOut)Services, Ici, le transfert fonctionnera A-30
- Indemnité de transfert(TransOutCompensate)Services,Faire reculer l'opération de transfert ci - dessus,C'est - à - dire:A+30
- Virements(TransIn)Services, Le transfert aura lieu B+30
- Transfert à la compensation (TransInCompensate)Services,Faire reculer l'opération de transfert ci - dessus,C'est - à - dire:B-30
À propos de la compensation vide 、Suspension、 Problèmes idémpotentiels et solutions
Extrait deDTMDocuments
Classification des exceptions
Le plus grand ennemi des systèmes distribués pourrait être NPCC'est,Ici, c'estNetwork Delay, Process Pause, Clock DriftInitiales de. Voyons d'abord les détails NPCQuel est le problème?:
- Network Delay,Latence du réseau. Bien que le réseau fonctionne bien dans la plupart des cas ,Bien queTCP Garantir la séquence de transmission et ne pas perdre , Mais il n'élimine pas le problème de latence du réseau .
- Process Pause,Suspension du processus. Il y a plusieurs raisons pour lesquelles le processus peut être interrompu : Comme dans le langage de programmation GC(Mécanisme de collecte des ordures) Tous les Threads en cours d'exécution sont mis en pause ;Encore une fois., On met parfois en pause le serveur Cloud , Cela permet de migrer le serveur Cloud d'un hôte à un autre sans redémarrer . Nous n'avons pas pu prédire avec certitude la durée de l'arrêt du processus , Vous pensiez que ça faisait des centaines de millisecondes , Mais il n'est pas rare que le processus s'arrête pendant quelques minutes .
- Clock Drift,Dérive de l'horloge. Dans la vraie vie, nous pensons généralement que le temps passe en douceur ,Monotone incrémental, Mais pas dans un ordinateur . L'ordinateur utilise le matériel d'horloge pour chronométrer , En général, une horloge à quartz , La précision du timing est limitée , Simultanément affecté par la température de la machine . Pour synchroniser le temps entre plusieurs machines sur le réseau ,Généralement utiliséNTP Le Protocole Aligne le temps de l'appareil local sur un serveur de temps dédié , Une conséquence directe de cela est que l'heure locale de l'appareil peut soudainement sauter vers l'avant ou vers l'arrière .
Les transactions distribuées puisque c'est un système distribué ,Naturellement.NPCQuestions. Parce qu'il n'y a pas d'horodatage impliqué , Les problèmes sont principalement NP.
Compensation vide
CancelAu moment de l'exécution,TryNon exécuté, De la branche des transactions Cancel L'opération doit être jugée TryNon exécuté, Il faut ignorer Cancel Mise à jour des données commerciales ,Retour direct
Solutions générales:Réponse à cette question, Au moment de la conception du service , Une compensation nulle est nécessaire , C'est - à - dire lorsque la clé primaire de l'entreprise à compenser n'est pas trouvée , Retour à la compensation réussie , Et enregistrer la clé primaire de l'entreprise originale , Marquer que le flux d'affaires a été compensé avec succès
Suspension
TryAu moment de l'exécution,Cancel Exécution terminée , De la branche des transactions Try L'opération doit être jugée CancelExécuté, Il faut ignorer Try Mise à jour des données commerciales ,Retour direct
Solutions générales: .Il est nécessaire de vérifier si la clé primaire de l'entreprise actuelle existe déjà dans la clé primaire de l'entreprise enregistrée avec une compensation vide , Refuser le service s'il existe , Pour éviter les incohérences dans les données
Idempotent
Une exception réseau peut se produire en raison de l'une ou l'autre des demandes,Une demande en double s'est produite, Toutes les opérations de la branche des transactions distribuées ,Doit garantir l'idémpotence( C'est - à - dire que le résultat d'une demande multiple et d'une demande unique est le même , Par exemple, changer le solde en 100, Peu importe combien d'appels sont 100, Et réduire le solde 100, Les résultats des appels multiples seront différents , Il faut donc tenir compte de ce problème lors de la conception )
DTM Barrière de sous - transaction pour
dtmMoyenne, La première technologie de barrière de sous - transaction ,Utiliser la technologie, Il est très pratique de résoudre des problèmes anormaux , Réduire considérablement le seuil d'utilisation des transactions distribuées :
Le principe de la technique de barrière des sous - transactions est le suivant:,Dans la base de données locale, Créer un tableau d'état des opérations de la branche dtm_barrier,La clé unique est une transaction globaleid-Branchesid-Opérations de branchement(try|confirm|cancel)
- Ouvrir la transaction locale
- Pour l'opération en cours op(try|confirm|cancel),insert ignoreUne donnéegid-branchid-op,Si l'insertion échoue, Commit transaction returned successful ( Méthodes courantes de contrôle idémpotentiel )
- Si l'opération en cours est cancel,Alors, dansinsert ignoreUne donnéegid-branchid-try,Si l'insertion réussit( L'attention est un succès ), La transaction commit a été retournée avec succès
- Appelez la logique d'entreprise à l'intérieur de la barrière , Si l'entreprise est retournée avec succès , La transaction commit a été retournée avec succès ;Si l'entreprise ne retourne pas, La transaction de retour en arrière a échoué
Dans le cadre de ce mécanisme, Résoudre les problèmes liés au désordre
- Contrôle de la compensation de l'espace–SiTryNon exécuté,Exécution directeCancel,Alors3MoyenneCancelInsérergid-branchid-tryÇa va marcher.,Logique sans barrière,Contrôle de la compensation de l'espace garanti
- Contrôle idempotent–2 Aucune des opérations ne peut répéter l'insertion d'une clé unique ,Garantie de ne pas répéter
- Contrôle anti - suspension–TryInCancelMise en œuvre ultérieure,AlorsCancelIl sera là.3Insérergid-branchid-try,CauseTryIn2Pas de succès, Ne pas exécuter la logique à l'intérieur de la barrière ,Contrôle anti - suspension garanti
Voici ce que je comprends ,IntryPhase,SitryDeopInsertion réussie,Incancel Insérer d'abord la phase try, La normalité est un échec , Si l'insertion réussit ,Descriptiontry L'insertion a échoué à l'étape , C'est - à - dire que l'entreprise n'a pas été exécutée ,Alorscancel La compensation correspondante dans n'a pas besoin d'appeler , C'est - à - dire en passant dans la base de données gid-branchid-op Le champ vient à la fois pour éviter la compensation vide et la suspension ,En même tempsgid-branchid-opEst le seul, Le problème des demandes répétées est donc également évité , L'idémpotence de l'interface n'exige pas non plus que nous considérions nous - mêmes
Les transactions distribuées sont .NetPlan d'atterrissage en
DTM
Site officiel:https://dtm.pub/
Fortement recommandé,Prise en charge de plusieurs modes de transaction,Y compris:SAGA、TCC、Message de phase 2
.NetDeDemo:https://github.com/dtm-labs/dtmcli-csharp-sample Il contientSAGA、TCC Exemple de code pour la barrière des sous - transactions , Lisez après avoir lu dtmDe.Net SDK Et les documents officiels , C'est presque familier.
CAP
Site officiel:https://github.com/dotnetcore/CAP
CAP Est basé sur .NET Standard De C# Bibliothèque,C'est une solution pour les transactions distribuées,A également EventBus La fonction de.
Son Sous - sol passe par la base de données + La façon dont les messages sont mis en file d'attente pour assurer la fiabilité des transactions distribuées , Mais parce que c'est asynchrone, , La mise en œuvre du mécanisme de compensation est complexe , Convient aux scénarios qui ne nécessitent pas de mécanisme de compensation ( Essayez encore et encore jusqu'à ce que vous réussissiez , Alarme après un certain nombre de retry )
Comment choisir le mode de transaction approprié
Forte cohérence des transactions:
- Mode de message en deux étapes : Idéal pour les scènes où il n'y a pas besoin de rouler en arrière (dtmUnique)
- sagaMode: Idéal pour les scènes qui nécessitent un ROLLBACK
- tccMode de transaction: Convient pour les scénarios où les exigences de cohérence sont élevées
- xaMode de transaction: L'adaptation aux exigences de concurrence n'est pas élevée , Il n'y a pas de scène de saisie de ligne de base de données (Pas du tout.)
Transactions distribuées asynchrones (Accord final):
- Tableau des messages locaux
Si elle est utiliséeDTM Il vaut mieux utiliser la barrière des sous - transactions , Il n'est pas nécessaire de penser à la suspension vide 、Idempotent、Compensation vide, etc., C'est très confortable d'écrire sur les affaires , Réduire son fardeau mental
Une personne pense qu'il vaut mieux savoir répondre
Pour les scénarios où les exigences de financement strictes ne doivent jamais être erronées ,Ça marcheTCCProgramme
S'il s'agit d'un scénario général de transaction distribuée,Appeler le Service d'inventaire pour mettre à jour l'inventaire après l'insertion de la commande,Les données sur les stocks ne sont pas aussi sensibles que le financement,Un système de cohérence final peut être mis en place avec des messages fiables
En fait, vous utilisez n'importe quel schéma de transaction distribuée,Ça rend votre code compliqué.10X.Dans de nombreux cas,SystèmeASystème d'appelB、SystèmeC、SystèmeD,Nous pourrions ne pas faire de transactions distribuées du tout.Le Journal des exceptions est imprimé en cas d'erreur d'appel.
Ce n'est que quelques - uns par mois.bug,Beaucoup.bugC'est fonctionnel,Expérientiel,Il s'agit vraiment de donnéesbug,Quelques mois,Deux ou trois.?Si vous voulez vous assurer que le système garantit automatiquement les données100%On ne peut pas se tromper,Des dizaines de transactions distribuées,Le Code est trop compliqué;Mauvais rendement,Débit du système、Les performances ont fortement chuté.
99%Appel d'interface distribuée pour,Ne pas effectuer de transactions distribuées,Directement, c'est la surveillance(Envoyer un courriel、Envoyer un SMS)、Journal de bord(En cas d'erreur,JOURNAL COMPLET)、Positionnement rapide après coup、Dépannage et dépannage des solutions、Réparer les données.
Tous les mois,Tous les quelques mois,Pour une petite quantité parce que le Codebug,Données à l'origine de l'erreur,Effectuer une réparation manuelle des données,Écrivez un programme pour vous - même.,Il faudra peut - être compléter les données.,Certaines données peuvent être supprimées,Vous pouvez modifier les valeurs de certains champs.
Plus que toi.50Transactions distribuées,C'est 100 fois moins cher.,Des dizaines de fois plus bas
trade off,Compromis,Lors de l'utilisation d'une transaction distribuée,Ça doit coûter,Le Code sera compliqué,Le développement est long,Baisse des performances et du débit,Les systèmes sont plus complexes, plus fragiles et plus faciles à détecter.bug;Les avantages,Si c'est fait,TCC、Système de cohérence finale des messages fiables,C'est sûr.100% Assurez - vous que vos données sont correctes .
1%,0.1%,0.01%Opérations,Financement、Commerce、Ordre,Nous utiliserons une solution de transaction distribuée pour garantir,Points d'adhésion、Coupons、Informations sur les produits,Ne fais pas ça.
Ce qui précède est tiré de: La réponse de Xiao Zhi à zhihu ,Lien de fin de référence3
Références
Le contenu ci - dessus ainsi que des images ou des parties du contenu sont extraits du blog suivant or Répondez
- Quelles sont les solutions de transaction distribuées les plus couramment utilisées ? - Réponse de Netease Digital sail - Oui. https://www.zhihu.com/question/64921387/answer/225784480
- L'interview est obligatoire.:Six solutions pour les transactions distribuées - L'article d'O - bing - Oui. https://zhuanlan.zhihu.com/p/183753774
- Quelles sont les solutions de transaction distribuées les plus couramment utilisées ? - La réponse de Xiao Zhi - Oui. https://www.zhihu.com/question/64921387/answer/1976701060
À propos de cet aspect des transactions distribuées , Peut se référer à DtmManuel officiel,C'est très détaillé.,Adresse:https://dtm.pub/guide/start.html,Non seulement contientDtm Mise en oeuvre de diverses transactions distribuées dans le cadre , Il existe également des solutions disponibles dans différents scénarios d'affaires , Très facile à apprendre
En plus, La plupart des questions peuvent être posées à dtmDegithub repositoryRechercherissue,OuCAPDegithub repositoryRechercherissue, La plupart des questions se trouvent ici ,Ou entrerdtm Wechat Group Exchange of
边栏推荐
- 解决php无法将string转换为json的办法
- leetcode刷题:二叉树11(平衡二叉树)
- Go language | 01 wsl+vscode environment construction pit avoidance Guide
- 使用 RepositoryProvider简化父子组件的传值
- sun.misc.BASE64Encoder报错解决方法[通俗易懂]
- third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
- c语言oj得pe,ACM入门之OJ~
- Concept and syntax of function
- leetcode刷题:二叉树13(相同的树)
- How to select the Block Editor? Impression notes verse, notation, flowus
猜你喜欢
建立自己的网站(16)
[OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
秋招字节面试官问你还有什么问题?其实你已经踩雷了
四万字长文说operator new & operator delete
Build your own website (16)
2023年深圳市绿色低碳产业扶持计划申报指南
S7-200smart uses V90 Modbus communication control library to control the specific methods and steps of V90 servo
[untitled]
What do software test engineers do? How about the prospect of treatment?
40000 word Wenshuo operator new & operator delete
随机推荐
Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables
浅浅的谈一下ThreadLocalInsecureRandom
Parler de threadlocal insecurerandom
Where is the operation of new bonds? Is it safer and more reliable to open an account
14. Users, groups, and permissions (14)
id选择器和类选择器的区别
Multi branch structure
sun.misc.BASE64Encoder报错解决方法[通俗易懂]
城链科技数字化创新战略峰会圆满召开
Analysis of openh264 decoded data flow
Android interview classic, 2022 Android interview written examination summary
Fundamentals of deep learning convolutional neural network (CNN)
leetcode刷题:二叉树12(二叉树的所有路径)
Inventory of the most complete low code / no code platforms in the whole network: Jiandao cloud, partner cloud, Mingdao cloud, Qingliu, xurong cloud, Jijian cloud, treelab, nailing · Yida, Tencent clo
Xaas trap: all things serve (possible) is not what it really needs
字节跳动Dev Better技术沙龙成功举办,携手华泰分享Web研发效能提升经验
【c语言】快速排序的三种实现以及优化细节
Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
股票开户哪里好?网上客户经理开户安全吗
如何安全快速地从 Centos迁移到openEuler