RabbitMQ messages solutions de transactions distribuées en fonction des files d'attente - MQ distribué messagerie combat middleware

1 Vitesse comprendre MQ

Introduction Rabbitmg pour résoudre la transaction distribuée doit maîtriser les cinq concepts de base

Un middleware de messagerie distribuée, puissance de traitement élevée basée sur le développement concurrency de langage Erlang, avec le niveau de langue. Et le cadre du Printemps est la même société.
la persistance de soutien, la haute disponibilité

Cinq concepts fondamentaux:

  1. File d'attente: stocker des données réelles locales
  2. Echange: réception d'une demande, la décharge de données
  3. Bind: Après avoir reçu la demande où stocker
  4. Données d'application sont transmises: producteur de messages
  5. Message consommateur: Retirez le traitement des données d'application

2, distribué des problèmes de transaction

transaction distribuée est une question d'affaires, pas être dissociée de la scène spécifique.

Plusieurs solutions 2.1 transactions distribuées

● base de données sur voie XA / JTA d'un accord
nécessite le soutien des fournisseurs de bases de données, composants JAVA a atomikos etc.
● asynchrone Relire les données de façon
Alipay, initiative payante micro-canal pour vérifier l' état de paiement, sous forme de factures;
● solutions sont basées sur des sources fiables (MQ) de
asynchrone scène, forte universelle, l' expansion de l'enseignement supérieur
● solutions de programmation de TCC
soigneusement sélectionnés, Ali, fourmis robe d'or propre paquet DTX

Cet objectif de l' article: pour tous les gens, apprendre à résoudre le problème des transactions distribuées basées sur des sources fiables.
Solutions pour les transactions distribuées, entreprise très ciblée, ce sont des idées importantes au lieu de copier

  • l'architecture du système de commentaires des États-Unis Mission

problèmes de transactions distribuées entre plusieurs systèmes 2.2

  • monopostes commandes générées
  • Les commandes doivent transmettre des données, générant ainsi deux problèmes de cohérence transactionnelle

mauvais cas

Lorsque l'appel d'interface échoue, la transaction est annulée système de commande en retrait, l'utilisateur est invité opération échoue

误以为这样的接口调用写法,就不会有分布式事务问题

Interface succès ou l'échec appel, aura un problèmes de transaction distribués:

  1. Interface d'appel est réussie, la transaction de base de données du système de commande échouera, le système ne roule pas en arrière le bordereau d'expédition, de générer des données
  2. Interface appelle un délai d'attente, l'annulation de la transaction de base de données du système de commande, l'interface du système waybill continue à générer des données

Dans les deux cas, il peut conduire à des incohérences de données

3, pour parvenir à une transaction distribuée - cinq étapes

Resolve transactions distribuées via MQ 5 étapes, ainsi que le traitement des transactions locales distribués à la note

  • Avant d'envoyer le système de commande toutes les interfaces requête HTTP système waybill, un problème!
  • Par conséquent, nous considérons un message à MQ, zéro asynchrone!

notion de conception globale 3.1


Après les commandes de restauration, en attendant lentement centre de données de production waybill, n'est pas obligatoire simultanéité

  1. production fiable: veiller à ce que le message doit être envoyé au service Rabitmq
  2. Consommation fiable: pour assurer que le message doit prendre une bonne consommation

Et enfin aux données multipartites pour parvenir à un consensus.

3.2 Étape 1 - produire des informations fiables message enregistré

  • Il y a des dangers cachés - messages possibles n'ont pas l'envoyer!

Pour assurer le succès de certaines données sont envoyées à la MQ.
Dans la même transaction, une augmentation record de la table d'opération, le dossier 每一条发往MQ的数据以及它的发送状态
donc nous ajoutons une table d'information locale dans le système de commande

Donc, en pratique le code, et non par les interfaces des systèmes de facturation des appels d'interface HTTP, mais l'utilisation de MQ

Lors de la génération des commandes, mais également enregistrer la table d'information locale


3.3 Étape 2 - Production messagerie fiable (modification de l'état de transmission de messages)

  • Utiliser mécanisme d'accusé de réception de la publication transactionnelle RabbitMQ (confirmer)
    après l' ouverture, un message d'acceptation MQ précise retour Réception

  • Alors, soyez en mesure de savoir comment mettre à jour la table d'information locale

- mécanisme Confirmer pour assurer ouvert SB


  • Si l'accusé ne reçoit pas, la modification du message a échoué état et d'autres circonstances spéciales
    兜底方案:定时检查消息表,超时没发送成功,再次重发

3.4 Étape 3 - traitement de messagerie fiable (traitement normal)

  • Une fois le système reçoit waybill les données du message va soudainement, ou visitez le bordereau d'expédition lorsque DB, DB va soudainement, les données de message n'est pas perdu sur vous !!!

Nous avons donc besoin les caractéristiques suivantes:

Idempotent
empêcher un double traitement des données de message, une opération de l' utilisateur, le temps de traitement des données correspondant à seulement

ouvert 手动ACK模式
par la retransmission de message de contrôle des consommateurs / supprimer / défausse

3.5 Étape 4 - messagerie fiable (retransmission de messages)


le traitement des consommateurs ne parvient, nous devons re-MQ à nouveau au consommateur.
Nouvelle tentative habituellement plusieurs anomalies fois par les consommateurs eux - mêmes un nombre record d'essais, et le nombre de contrôles (pas toujours nouvelle tentative!)

Cinquième étape 3.6 - messagerie fiable (message défausse)

échec de manipulation des consommateurs, ou directement mise au rancart transféré à une file d'attente de lettre morte (la DLQ)
重试次数过多、消息内容格式错误等情况,通过线上预警机制通知运维人员

4 Résumé et extensions

Avantages et inconvénients de programme 4.1 MQ

avantage d'ouverture

  1. versatilité
  2. Développement et forte
  3. programme d'âge mûr

lacunes bouche

  1. middleware message, uniquement pour les scénarios asynchrones
  2. le traitement du message sera retardé, le besoin d'être en mesure de tolérer d'affaires

Essayez d'éviter des transactions distribuées,
essayez d'effectuer des transactions asynchrones non stratégiques;

4,2 dilatation

Bases théoriques des solutions de transactions distribuées

CAP théorie
BASE théorie
protocole 2PC
protocole 3PC
algorithme Paxos.
Protocole de cohérence Raft

Publié cinq articles originaux · louanges gagnées 0 · Vues 245

Je suppose que tu aimes

Origine blog.csdn.net/weixin_32822759/article/details/105365940
conseillé
Classement