Micro-canal ouvert PhxQueue: haute disponibilité, une fiabilité élevée, à haute performance file d'attente distribuée

Auteur | Liang Junjie

Modifier | Ash

PhxQueue est un protocole Paxos micro-canal open-source basé haute disponibilité, un débit élevé et la file d'attente distribuée très fiable, d'assurer le At-moins-Une fois la livraison, largement soutenue par un certain nombre d'importants services de paiement micro-canaux, plate-forme publique à l'intérieur du micro-canal.

Adresse Open Source

https://github.com/Tencent/phxqueue

Message Queue Présentation

Comme les files d'attente de messages matures pour la communication asynchrone, mode de communication synchrone contraste utilisé, présente les avantages suivants:

  • Découplage: Prévenir l'introduction de pose API trop un risque pour la stabilité du système, appelant une mauvaise utilisation du système sera la pression sur l'appelant, l'appelant n'est pas manipulé correctement va réduire la capacité de répondre au système de l'appelant.

  • Détourage et le contrôle de flux: sans bloquer les producteurs de message, éclaté tampon de message dans la file d'attente, le consommateur la possibilité de lire le message réel.

  • Multiplexage: une publication multi-abonnement.

  • naissance de fond PhxQueue

    file d'attente vieux

    L'utilisation précoce des micro-canaux file d'attente distribuée (appelée file d'attente d'héritage) est un élément important dans les coulisses micro lettre d'auto-développement, largement utilisé dans une variété de scénarios d'affaires, prévoyant le découplage des affaires, cache, etc. capacités asynchrones.

    Quorum NRW vieux file d'attente en tant que mécanisme de synchronisation, où N = 3, R = W = 2, la plaque porte-balais disque de brosse de manière asynchrone, en tenant compte de la performance et de disponibilité.

    De nouvelles exigences

    Avec le développement des entreprises, améliorer l'accès à des types d'activité, l'ancienne file d'attente est apparu progressivement insuffisants, les principaux problèmes sont les suivants:

    Disque de brosse asynchrone, la fiabilité des données inquiétante

    Pour les services liés aux paiements, assurer la fiabilité des données sont des besoins primaires. La plupart des programmes sont distribués file d'attente de réplication asynchrone + disque Brosse pour assurer la fiabilité des données, mais nous pensons besoin de mettre en brosse Synchronize pour améliorer encore la fiabilité des données.

    Sur problème d'ordre

    Une partie de l'entreprise fait une demande tout à fait ordonnée, mais ne garantit pas l'ordre de NRW, incapable de répondre à la demande.

    En outre, il y a aussi une ancienne file d'attente de re-équipe, d'autres aspects doivent être améliorés d'équilibrage de charge. Il nous a amenés à considérer tous ces nouveaux programmes.

    Le manque de solutions de l'industrie

    Kafka grand champ de données est utilisé dans la file d'attente de messages, d'abord par l'utilisation de Scala LinkedIn développement du langage, comme flux d'activité LinkedIn système de suivi et de traitement des opérations à base de pipeline de données.

    Son débit élevé, l'équipe de reprise après incident automatique hors d'usage et d'autres caractéristiques, l'utilisation a attiré de nombreuses entreprises joue un rôle important dans la collecte des données, des scénarios de transmission, voir Powerd par Kafka.

    Mais nous enquête complète de Kafka, en ce que son accent sur la fiabilité de la scène de données, moins que ce qui suit:

    Contradictoires performances Kafka et la plaque de balai de synchronisation

    Dans la configuration ouverte Kafka log.flush.interval.messages = 1, après avoir ouvert les caractéristiques de synchronisation de la plaque de brosse, le débit diminuerait de façon spectaculaire. Ce phénomène est causé par les facteurs suivants:

    SSD écriture amplification

    La taille moyenne des nouvelles entreprises sur le nombre de 1k. SSD plus petite unité d'un disque de brosse pour une taille de page, une taille de 4k. Lorsque le message Kafka de taille insuffisante pour 4k plaque de brosse, la quantité de données est en fait écrit à la taille physique du message plusieurs fois. Causer des ressources de l'écriture sur le disque dur sont gaspillées.

    effet de lot à la production n'est pas bon sur les lieux d'affaires

    Kafka lot de producteur, tout simplement, est emballé avec une pluralité de messages envoyés au courtier, il est largement utilisé dans les grands scénarios de données. Logiquement, assez d'effet de lot pour être en mesure de compenser l'impact de l'amplification en écriture. Cependant, le scénario service de messagerie diffère des données du journal de production produites dans les grands scénarios, chaque demande de service requis dans le contexte en file d'attente d'un système d'affaires séparées, un grand lot difficile. Même si l'agent couche supplémentaire entre l'entreprise et courtier, producteur transféré dans le lot de couche proxy, mais aussi parce que la couche d'agent de nombreux nuds, l'effet de lot est difficile à améliorer, ce qui entraîne une amplification d'écriture ne peut pas être compensée.

    Le manque de Kafka replica conception synchrone

    Kafka replica conception synchrone brève:

    chef Kafka Broker conservera sa synchronisation de liste de suiveur de piste, la liste est appelée ISR (c.-à-synchronisation de réplication). Si un suiveur est vers le bas, ou trop derrière, le leader sera retiré de la RSR.

    Le mode synchrone synchrone accent sur l'efficacité, mais des performances légèrement moins en termes de facilité d'utilisation:

    Courtier basculent le taux de réussite du processus de déclin grave

    Dans le scénario 3 répliques, répartis uniformément sur chaque courtier Leader, tombe en panne courtier, cela signifie que 1/3 du chef, hors ligne suiveur, le taux de réussite en lecture gouttes:

    • Pour chef hors ligne de partition, temporairement incapable de lire et d'écrire, besoin d'attendre pour récupérer après contrôleur élire un nouveau chef;

    • Pour la partition hors ligne suiveur, temporairement aussi incapable de lire et d'écrire, il faut attendre un certain laps de temps (selon replica.lag.time.max.ms, 10s par défaut) après, suiveur de faute leader enlevé pour récupérer de l'ISR.

    En d'autres termes, lorsque l'un du courtier échoue, lisez le taux de réussite baissera à zéro sur une période de temps.

    La synchronisation de retard déterminé par le plus lent nud

    Dans le scénario de réplication synchrone, tous les nuds doivent attendre des retours ack.

    En comparant les performances de répliques Kafka et Paxos, nous croyons de manière synchrone Paxos est un meilleur choix:

    Par conséquent, nous avons basé sur l'ancienne file d'attente, un accord Paxos avec la transformation de la logique de synchronisation, et effectué un certain nombre d'optimisation de synchronisation pour inclure plaque de brosse, complète PhxQueue.

    PhxQueue Présentation

    PhxQueue actuellement largement pris en charge dans le salaire micro-canal micro-canal un certain nombre d'affaires importantes, plate-forme publique, moyenne quotidienne dans l'équipe de centaines de milliards de minutes au sommet de l'équipe de 100 millions.

    Le point de départ est la conception de haute fiabilité des données, la haute disponibilité et un débit élevé sans perte, tout en soutenant une variété de caractéristiques de file d'attente commune.

    PhxQueue prend en charge les fonctionnalités suivantes:

    • plaque de brosse de synchronisation, l'équipe est certainement pas la perte de données, est livré avec un rapprochement à temps réel interne

    • accès strict et ordonné à l'équipe

    • Abonnez-vous à plusieurs

    • La limite de vitesse d'équipe

    • L'équipe de relecture

    • Tous les modules peuvent être extension parallèle

    • couche de stockage en vrac brosse à disque, synchrone, garantissant un débit élevé

    • couche de stockage prend en charge le déploiement de la ville multi-centre

    • reprise après incident de la couche de stockage automatique / égaliseur accès

    • Les consommateurs reprise après incident automatique / équilibrage de charge

    PhxQueue Conception

    Architecture globale

    PhxQueue par les cinq modules suivants.

    Store - stockage de file d'attente

    stockage de file d'attente de magasin en tant que bibliothèque PhxPaxos présenter à copier protocole Paxos pour la synchronisation. Tant que le nud majoritaire et le travail d'interconnexion, la cohérence peut fournir des services de lecture et d'écriture linéaire.

    Afin d'améliorer la fiabilité des données, la synchronisation de la plaque de brosse activé par défaut et les caractéristiques des performances en tant que disque de brosse beaucoup asynchrone.

    En termes de facilité d'utilisation, la banque une pluralité de groupes de Paxos indépendants, chaque groupe de Paxos maître uniquement lire et services d'accès en écriture, généralement répartie uniformément dans les noeuds maître dynamique magasin, l'accès de compensation de pression, les nuds maîtres passent automatiquement à l'autre la catastrophe nud disponible.

    Producteur - Producteur

    Producteur en tant que producteurs de message, le message en fonction des principales décisions de routage des magasins. Ils les mêmes messages d'itinéraire par défaut à la même file d'attente, nous nous assurons le même ordre et la séquence enqueue dequeue.

    Consommateur - Consommateur

    Consommateurs En tant que consommateurs, de manière à tirer le message en vrac du tirage magasin prend en charge plusieurs de manière traitement par lots message coroutine.

    services à la consommation comme une trame de service, de manière à obtenir une fonction de rappel de l'utilisateur, en fonction de différents thèmes (sujet), différents types de traitement (Handler) définissent une logique de traitement de message spécifique.

    Planificateur - Gestionnaire des consommateurs (déploiement en option)

    Le rôle du planificateur est que la consommation a recueilli des informations de charge globale, consommateurs pour faire la reprise après incident et d'équilibrage de charge. Lorsque l'utilisateur fait ce besoin d'être déployé Scheduler omis, chaque poids détermination du consommateur traitement selon la relation de configuration entre les poids de file d'attente.

    Une fois déployé Scheduler, dirigeant Scheduler et tout Conusmer maintenir le rythme cardiaque, tout en collectant des informations de charge du consommateur, relation inverse à la consommation avec la file d'attente de traitement de réglage.

    Lorsque le leader Scheduler est en panne, Planificateur Fiez service distribué de verrouillage suite à l'élection d'un nouveau chef, n'est pas disponible pendant affecte uniquement l'équilibrage de la reprise après incident à la consommation et la charge, n'affectent pas la consommation normale de la consommation.

    Lock - Distribué (Déploiement en option)

    Lock est un verrou distribué, sa conception d'interface est très universelle, l'utilisateur peut choisir de verrouiller le déploiement indépendant, fournir un service de verrouillage distribué commun.

    rôle verrouillage PhxQueue dans les deux points suivants:

  • élection Scheduler en tant que chef;

  • traiter simultanément une pluralité de files d'attente à prévenir la consommation.

  • Lock est également le déploiement du module optionnel:

    • Si déployé Scheduler, le Planificateur doit déployer Lock est élu chef;

    • Dans le cas contraire, si le service est pas sensible à la consommation répétée, vous pouvez choisir de ne pas déployer Lock.

    Renvoi au scénario de consommation est répété ici: si omis si le déploiement Scheduler, un ensemble de files d'attente qui peuvent nécessiter des processus de consommation en configuration de lecture; file d'attente lorsqu'il y a un changement (par exemple, la réduction file d'attente d'expansion), un changement de configuration de chaque machine doit Consumer là après, ce temps peut être différent dans chaque vous en même temps des consommateurs voir l'état de configuration, ce qui conduit à une période de temps les deux se considèrent comme des consommateurs consomment la même file d'attente, ce qui entraîne une duplication des dépenses. déploiement de verrouillage pour éviter la duplication des dépenses dans ce scénario. (Notez que même sans le déploiement de verrouillage, la scène a provoqué que la consommation répétée, sans provoquer la consommation de trouble)

    processus de réplication de magasin

    PhxQueue Répliques Store par accord PhxPaxos.

    PhxPaxos exécution du projet est subdivisé en trois couches: couche d'application est responsable du traitement des demandes de service, la couche de Paxos les exécute le processus de synchronisation, une couche de machine d'état pour mettre à jour l'état du service.

    Dans lequel, la proposition de initiés de la couche application, paxos couche de chaque protocole de paxos de noeud terminé identifier conjointement un paxos bûche, après quoi la machine d'état à paxos journal comme une entrée pour la transition d'état, le service de mise à jour d'état, et renvoie les résultats de transition d'état à la couche d'application. La couche était état cohérent, plus la contribution des paxos mêmes couches, génère la même transition d'état, une pluralité de noeuds afin d'assurer une forte uniforme.

    nous PhxPaxos ici mettre en uvre une couche à base machine à états de file d'attente, il est nécessaire de faire la cartographie des concepts suivants:

    • Ce modèle ne comporte pas une modification de données de file d'attente, il est une collection ordonnée de données et Paxos log définitions comme, de sorte que vous pouvez rendre les données directement dans l'équipe Paxos loch, mais l'état n'a besoin que d'enregistrer Paxos séquence connecter.

    • id instance strictement les caractéristiques de plus en plus de telle sorte qu'il peut être facilement déplacé en file d'attente.

    • File d'attente avant de lire les données de décalage, les données qui peuvent être supprimés, ce qui est conforme à la définition du point de contrôle.

    Queue machine d'état, et la rencontre d'ensemble et de Paxos.

    Store Group Commit - disque brosse copie efficace et synchronisée

    Unoptimized accord Paxos n'a pas résolu le problème de synchronisation du disque brosse amplification en écriture. En outre, une copie de synchronisation efficace que Kafka.

    La raison en est qu'une copie de la masse de flux de synchronisation de Kafka, et le protocole Paxos est paxos connectent des unités synchrone, synchronisation de tête de série chaque journal de paxos est un RTT + 1 fois la plaque porte-balais.

    cela conduira à un maximum théorique TPS unique groupe Paxos de seulement 250 en scène plus que le déploiement DC, de retard ping jusqu'à 4ms,.

    Nous déployons un groupe multi-Paxos et Groupe COMMIT façon de résoudre simultanément le problème de synchronisation du disque brosse écriture et l'amplification Paxos débit problèmes.

    Comme indiqué ci-dessus, nous avons déployé un groupe paxos pluralité, Groupe engager à groupe paxos comme une unité, correspondant à une pluralité de files d'attente de groupe paxos, la file d'attente en une pluralité de données équipe combinés dans une période de temps, ou lorsque le temps d'attente accumulées consommant le nombre de données atteint le seuil pour déclencher une plaque de balai Paxos et synchrone, le blocage de la période d'attente avant.

    Par rapport à la logique lot de producteur Kafka dans la couche mémoire aux avantages du groupe de vrac combinés comme suit S'engager:

  • Sans prêter attention à la façon d'organiser le lot de demande de couche d'affaires;

  • Paxos groupe dans la couche de mémoire aux unités de polymérisation des résultats de polymérisation mieux que la couche supérieure.

  • PhxQueue contraste avec Kafka

    Étaient la conception comparaison PhxQueue Kafka, la performance, la couche de mémoire à trois procédure de basculement.

    conception Comparaison

    Bien que l'architecture PhxQueue semblable à Kafka et d'autres files d'attente distribuées commune, mais il y a encore beaucoup de conception unique. Afin de faire une certaine compréhension des lecteurs Kafka à comprendre plus facilement PhxQueue, ci-dessous comparer les deux.

    Note: Les comparaisons suivantes sont basées sur la même fiabilité des données Scène: défaillance d'un noeud minoritaire ne provoque pas de perte de données, et l'ensemble est toujours disponible.

    Comparaison des performances

    Environnement de test

    Repères et configuration

    Résultats des tests

    Lot ouvert Producteur:

    Fermer Producteur Lot:

    Le scénario ci-dessus, le cpu de PhxQueue, le taux d'utilisation de 70% à 80%.

    résumé

  • rendement PhxQueue et Kafka inchangé;

  • Dans les mêmes QPS, parce qu'ils ne sont pas comme les plus lents noeud ayant, PhxQueue légèrement mieux que le temps moyen Kafka;

  • Après la fermeture de lot à la production, la plaque de la brosse dans le scénario synchrone, la performance PhxQueue jusqu'à 2 fois Kafka, parce que, la couche de stockage de disque PhxQueue avant d'écrire fait LOT, mais pas Kafka, cette dernière amplification volonté d'écriture.

  • procédure de basculement de la couche de mémoire comparative

    Après avoir tué une couche de stockage de noeud de contraste majeur, l'impact sur le débit global.

    Kafka

    Performance:

    • Au cours du basculement, les différents niveaux à différents stades de mise en attente succès de taux de 0 à 33%;

    • Basculement est déterminée par la durée du bail, les 10s par défaut de longueur de location.

    Le processus de test:

    Replica.lag.time.max.ms des 10s à 60s réglage (prolongation du délai pour faciliter l'observation), puis tuer Broker 0, Partition 3 sélection, les changements observés ISR comme suit:

    Dans laquelle le second / taux de réussite en trois étapes de dommages à l'équipe:

    • Au cours de la deuxième phase, la partition 96/97/98 ne peut pas être écrit, le taux de réussite succès de l'équipe a chuté à 0%.

    • Au cours de la troisième étape, la partition 96 peut continuer à écrire, mais la partition 97/98 ne peut pas être écrit, parce que l'écriture attendre Broker 0 retour ack, mais déjà Broker 0 tuer, le taux de succès de l'équipe est tombé à 33%.

    L'observation réelle, pas complètement au cours de la seconde / débit à trois étages, à cause de l'outil de mesure de pression des échecs de connexion déjà signalés, l'écriture d'arrêt.

    Outil de mesure de la pression de sortie:

    Les moyens de pression connecté bûche de défaillance Broker:

    analyse:

    Kafka est élu chef courtier par le contrôleur, la liste ISR est un chef de file maintenu.

    Contrôleur ancien de location est définie, ce qui est la configuration Broker replica.lag.time.max.ms bail spécifiés.

    Par conséquent, la durée plus courte de la deuxième étape, le contrôleur du temps de location déterminé, plus longue durée de la troisième étape, est la décision de replica.lag.time.max.ms.

    Lorsque Broker 0 est tuer, l'impact aurait été l'ancien courtier 0 est le chef d'équipe du taux de réussite de 1/3 partitions qui affectent Broker 0 comme le taux de réussite de l'équipe 2/3 partitions de suiveurs.

    PhxQueue

    Performance:

    • Au cours de Failover, l'équipe, le taux de succès a chuté à 66%;

    • Basculement est déterminée par la durée du bail, le bail par défaut à long 5s.

    • Après le changement d'ouverture, les caractéristiques de la file d'attente de nouvelle tentative (car il n'y a pas d'exigence absolue afin d'améliorer la disponibilité des services), au cours de la Failover encore 90 +% de réussite dans l'équipe.

    Le processus de test:

    La durée du bail de 10s à 60s Réglage maître Store (prolongation du délai pour faciliter l'observation), puis tuer magasin 0, l'équipe a observé un taux de réussite Producteur:

    Fermer transducteur Retry Caractéristiques: File d'attente

    Ouvrir transducteur Retry Caractéristiques file d'attente:

    résumé

  • Dans la couche de stockage lors de la reprise, PhxQueue Kafka et enqueues les taux de réussite ont refusé de certaine durée, PhxQueue taux de réussite en file d'attente de 66% ~ 100%, le taux de réussite Kafka de mis en file 0% à 33%;

  • Après nouvelle tentative d'ouverture de la file d'attente PhxQueue changement de caractéristique, le processus de basculement taux de réussite en file d'attente est maintenue à 90 +%;

  • PhxQueue et Kafka peuvent changer automatiquement le maître, dans l'équipe de réussite finale de récupération complète.

  • Écrit dans la dernière

    couche de mémoire PhxQueue a fait beaucoup d'efforts pour: réaliser maître de commutation automatique, et d'assurer toujours linéaire constante, toujours au cours de la disponibilité de transfert, le débit des garanties plaque de balai de synchronisation, le disque de performance inférieure de la brosse asynchrone.

    En plus d'obtenir les caractéristiques de la file d'attente les plus pratiques, comme une équipe cohérente hors d'usage, et plus d'abonnements, vitesse, rediffusion de messages, etc., pour une variété de scénarios d'affaires.

    À l'heure actuelle PhxQueue été utilisation à grande échelle dans les micro-lettre interne, officiellement ouverte.

    Nous serons cohérents PhxQueue version open source et construire, a accueilli le public pour essayer de commentaires.

    Open Source Adresse:

    https://github.com/Tencent/phxqueue

    Les auteurs introduisent

    Liang Junjie, un micro-canal d'ingénieur senior, actuellement en charge des systèmes de messagerie micro-canaux, middleware de messagerie et d'autres le développement et l'optimisation. En 2011, la Chine du Sud Diplômé de l'Université normale, a été impliqué dans et menant microblogging lettre privée, anti-système, ainsi que des projets d'optimisation de l'architecture micro-canaux multiples. Et plus, comme l'un des PhxQueue membres créateurs du micro-canal architecture distribuée de file d'attente importante transformation l'année dernière, nous nous sommes engagés à fournir une haute disponibilité, un débit élevé et une grande fiabilité des services de middleware de messagerie.

    texte recommandé aujourd'hui

    Cliquez ci-dessous pour lire l'image

    Distributed Systems Solutions cohérence transactionnelle grand contraste

    Si le canal de récompense dans le douzième mois lunaire une neige saison prunier
    Précédent
    190324 forgetten prouvent Xue Qian chanté les paroles manger de ce CD ne pouvait pas manger la
    Prochain
    6499 yuans à vendre, iPhone XR officiellement publié
    Keira Knightley a joué dans « méthodes dangereuses », ce vrai beaucoup d'histoire!
    200000 salaire annuel payé seulement 50 yuans lorsque vous faites! Votre 996 vaut vraiment la peine?
    Regardez ancien programme Wang Shi, ils savent pourquoi ils sont si bons une
    Achat? « Chien de garde 2 »
    vivent 190,324 chevaux! tutoriel dialecte du Sichuan vous permet de comprendre chaque minute de Li Yi Feng
    Apple pousse iOS 12 / watchos 5 / macOS Mojave mise à jour de la version officielle
    « Savoir » pas de détails sont à la louange place aussi, sous le nom de personnes avaient été préfiguré les résultats des différents personnages
    Netflix a lancé le drame italien « Rome bébé » d'une jeune fille histoire inédite!
    « TFBOYS » « news » 190324 sont montés à bord TFBOYS les lecteurs anglais du secondaire, est l'idole des manuels scolaires tout à fait le niveau
    débuts Apple iPhone XS Series: la nouvelle version de Max, fonction double carte SIM sont également
    propagande utilisateur « sait pas » scénariste d'aller embaucher un professeur de langue et parce que les erreurs lignes trop évidentes