Jour 17 des 100 jours de construction des fondations – Premiers pas avec Message Queuing
concepts de base
Qu'est-ce qu'une file d'attente de messages ?
MQ : File d'attente de messages
Une file d'attente qui stocke les messages lors de la consommation des messages, ils sont consommés dans l'ordre (file d'attente premier entré, premier sorti).
Les deux parties impliquées dans la messagerie sont appelées producteur etconsommateur , le producteur est responsable de l'envoi des messages et le consommateur est responsable du traitement des messages.
A quoi sert la file d’attente des messages ?
Trois avantages familiers:
Traitement asynchrone : le traitement asynchrone est implémenté via la file d'attente des messages. Après l'envoi du message correspondant à la file d'attente des messages, le résultat est renvoyé immédiatement, réduisant le temps de réponse et améliorant l'expérience utilisateur. Par la suite, le système consomme le message.
Coupure de pointe/limitation de courant : stockez d'abord les messages de transaction générés par une concurrence élevée sur une courte période de temps dans la file d'attente des messages, puis le service back-end consommera lentement ces messages en fonction de ses propres capacités, évitant ainsi de vaincre directement le back-end. -fin de service.
Réduire le couplage système : il n'y a pas d'appels directs entre les modules, donc l'ajout ou la modification de modules aura moins d'impact sur les autres modules.
Scénarios d'applications d'entreprise:
Implémenter des transactions distribuées : l'une des solutions pour les transactions distribuées est les transactions MQ, qui sont prises en charge par la plupart des MQ.Les transactions permettent aux applications de streaming d'événements deconsommer, transformer, produireL'ensemble du processus de message est défini comme une opération atomique.
Garantie de séquence : convient aux scénarios qui ont des exigences strictes en matière d'ordre des données, pris en charge par la plupart des MQ.
Traitement du délai/du timing : le message ne sera pas consommé immédiatement après son envoi, mais sera consommé après une heure spécifiée.
Traitement des flux de données : pour les flux de données massifs générés par les systèmes distribués, tels que les journaux d'activité, les données de surveillance, les comportements des utilisateurs, etc., la file d'attente de messages peut collecter ces données en temps réel ou par lots et les importer dans le moteur de traitement du Big Data pour réaliser un traitement de données efficace Gestion et traitement des flux.
Quels problèmes l’utilisation des files d’attente de messages entraîne-t-elle ?
Disponibilité réduite du système : La disponibilité du système est réduite dans une certaine mesure. Pourquoi dites-vous cela ? Avant de rejoindre MQ, vous n'avez pas à penser à la perte de message ou au raccrochement de MQ, etc. Cependant, après avoir présenté MQ, vous devez y penser !
Complexité accrue du système : Après avoir rejoint MQ, vous devez vous assurer que les messages ne sont pas consommés à plusieurs reprises, gérer la perte de messages, garantir l'ordre de livraison des messages et d'autres problèmes !
Problèmes de cohérence : J'ai mentionné ci-dessus que la file d'attente de messages peut réaliser une implémentation asynchrone, et que l'asynchrone apporté par la file d'attente de messages peut en effet améliorer la vitesse de réponse du système. Mais que se passe-t-il si le véritable consommateur du message ne consomme pas le message correctement ? Cela entraînera une incohérence des données !
Files d'attente de messages courantes
Kafka
Kafka est une version open source de LinkedInPlateforme de streaming distribuée, est devenu un projet de haut niveau d'Apache. Il a été utilisé au début pour traiter des journaux massifs, et s'est ensuite progressivement développé pour devenir une file d'attente de messages complète et performante.
Une plateforme de streaming a trois fonctions clés :
file d'attente des messages: publiez et abonnez-vous aux flux de messages. Cette fonction est similaire à une file d'attente de messages, c'est pourquoi Kafka est également classé comme file d'attente de messages.
Stockage persistant tolérant aux pannes des flux de messages d'enregistrement: Kafka conservera les messages sur le disque, évitant ainsi le risque de perte de messages.
Plateforme de traitement du streaming : Pour traiter les messages lors de leur publication, Kafka fournit une bibliothèque complète de traitement de flux.
RocketMQ
RocketMQ est une plateforme cloud native de traitement de données en temps réel « messages, événements, flux » open source d'Alibaba. Elle s'appuie sur Kafka et est devenue un projet Apache de haut niveau.
Fonctionnalités principales de RocketMQ (extraites du site officiel de RocketMQ) :
Cloud natif : né avec le cloud, grandissant avec le cloud, mise à l'échelle élastique illimitée, compatible K8
Débit élevé : un débit de niveau billion garanti, répondant à la fois aux scénarios de microservices et de Big Data.
Traitement de flux : fournit un moteur de calcul de flux léger, hautement évolutif, hautes performances et riche en fonctionnalités.
Qualité financière : stabilité de qualité financière, largement utilisée dans les liens de transaction de base.
Architecture minimaliste : zéro dépendance externe, architecture sans partage.
Respectueux de l'environnement : se connecte de manière transparente aux écosystèmes environnants tels que les microservices, l'informatique en temps réel et les lacs de données.
LapinMQ
RocketMQ est une plateforme cloud native de traitement de données en temps réel « messages, événements, flux » open source d'Alibaba. Elle s'appuie sur Kafka et est devenue un projet Apache de haut niveau.
Fonctionnalités principales de RocketMQ (extraites du site officiel de RocketMQ) :
Cloud natif : né avec le cloud, grandissant avec le cloud, mise à l'échelle élastique illimitée, compatible K8
Débit élevé : un débit de niveau billion garanti, répondant à la fois aux scénarios de microservices et de Big Data.
Traitement de flux : fournit un moteur de calcul de flux léger, hautement évolutif, hautes performances et riche en fonctionnalités.
Qualité financière : stabilité de qualité financière, largement utilisée dans les liens de transaction de base.
Architecture minimaliste : zéro dépendance externe, architecture sans partage.
Respectueux de l'environnement : se connecte de manière transparente aux écosystèmes environnants tels que les microservices, l'informatique en temps réel et les lacs de données.
Pulsar
Pulsar est une plate-forme de flux de messages distribués cloud-native de nouvelle génération. Elle a été initialement développée par Yahoo et est devenue un projet Apache de haut niveau.
Pulsar intègre la messagerie, le stockage et l'informatique fonctionnelle légère. Il adopte une conception d'architecture de séparation de calcul et de stockage pour prendre en charge les locataires multiples, le stockage persistant et la réplication des données entre plusieurs salles de machines et entre régions. Il présente une forte cohérence, un débit élevé et une faible latence. , et des fonctionnalités de stockage de données en streaming hautes performances telles que l'évolutivité sont considérées comme la meilleure solution pour la transmission, le stockage et l'informatique en streaming de messages en temps réel à l'ère du cloud natif.
Les principales caractéristiques de Pulsar sont les suivantes (extraites du site officiel) :
Il s’agit de la nouvelle génération de plateforme de flux de messages distribués cloud-native.
Une seule instance de Pulsar prend en charge de manière native plusieurs clusters et peut effectuer de manière transparente la réplication des messages entre les clusters dans les salles informatiques.
Latence de sortie et latence de bout en bout extrêmement faibles.
S'étend de manière transparente à plus d'un million de sujets.
API client simple prenant en charge Java, Go, Python et C++.
Plusieurs modes d'abonnement pour les sujets (exclusif, partagé et basculement).
La livraison des messages est garantie grâce au mécanisme de stockage persistant des messages fourni par Apache BookKeeper.
Le cadre informatique léger sans serveur Pulsar Functions implémente le traitement des données natif en flux.
Pulsar IO, un framework de connecteurs sans serveur basé sur Pulsar Functions, facilite le déplacement de données vers et depuis Apache Pulsar.
Le stockage hiérarchisé peut transférer les données du stockage chaud vers le stockage froid/à long terme (tel que S3, GCS) lorsque les données deviennent obsolètes.
Comparaison du MQ ci-dessus :
Direction du contraste
résumé
Débit
Le débit d'ActiveMQ et de RabbitMQ de niveau 10 000 (ActiveMQ a les pires performances) est d'un ordre de grandeur inférieur à celui de RocketMQ et Kafka de niveau 100 000, voire d'un million.
Disponibilité
Tous peuvent atteindre une haute disponibilité. ActiveMQ et RabbitMQ sont tous deux basés sur une architecture maître-esclave pour atteindre une haute disponibilité. RocketMQ est basé sur une architecture distribuée. Kafka est également distribué, avec plusieurs copies d'une même donnée. Si quelques machines tombent en panne, il n'y aura ni perte ni indisponibilité de données.
Opportunité
RabbitMQ est développé sur la base d'Erlang, il possède donc de fortes capacités de concurrence, des performances extrêmement bonnes, une latence très faible, atteignant le niveau de la microseconde, et d'autres sont au niveau de la ms.
Prise en charge des fonctions
Pulsar a des fonctions plus complètes et prend en charge la multi-location, plusieurs modèles de consommation et modes de persistance. Il s'agit d'une plate-forme de flux de messages distribués cloud-native de nouvelle génération.
Message perdu
ActiveMQ et RabbitMQ ont une très faible possibilité de perte, et Kafka, RocketMQ et Pulsar peuvent théoriquement atteindre 0 perte.
Résumer:
Bien que RabbitMQ soit légèrement inférieur à Kafka, RocketMQ et Pulsar en termes de débit, car il est développé sur la base d'Erlang, il possède de fortes capacités de concurrence, des performances extrêmement bonnes et une très faible latence, atteignant le niveau de la microseconde. Cependant, comme RabbitMQ est développé sur la base d'Erlang, peu d'entreprises nationales ont la force de faire de la recherche et de la personnalisation au niveau du code source d'Erlang. Si le scénario commercial n'a pas d'exigences de concurrence trop élevées (100 000 ou un million de niveaux), alors RabbitMQ peut être votre premier choix parmi ces files d'attente de messages.
RocketMQ et Pulsar prennent en charge une forte cohérence et peuvent être utilisés dans des scénarios avec des exigences élevées de cohérence des messages.
RocketMQ est produit par Alibaba et est un projet open source Java. Nous pouvons lire le code source directement, puis personnaliser le MQ de notre propre entreprise, qui a été testé dans les scénarios commerciaux réels d'Alibaba.
Les caractéristiques de Kafka sont en fait très évidentes, c'est-à-dire qu'il ne fournit que moins de fonctions de base, mais offre un débit ultra élevé, une latence de niveau ms, une disponibilité et une fiabilité extrêmement élevées, et la distribution peut être arbitrairement étendue. Dans le même temps, il est préférable que Kafka prenne en charge un plus petit nombre de sujets pour garantir son ultra-haut débit. Le seul inconvénient de Kafka est que les messages peuvent être consommés à plusieurs reprises, ce qui aura un très léger impact sur la précision des données. Dans le domaine du Big Data et de la collecte de journaux, ce léger impact peut être ignoré. Cette fonctionnalité est naturellement adaptée au Big Data réel. -le calcul du temps et la collecte des journaux. S'il s'agit d'informatique en temps réel, de collecte de journaux et d'autres scénarios dans le domaine du big data, l'utilisation de Kafka est la norme de l'industrie, et il n'y a absolument aucun problème. La communauté est très active et ne sera jamais pornographique, sans parler du fait qu'elle est très active. est presque une norme de facto dans ce domaine à travers le monde.
Une enquête simple sur MQ auto-développé au niveau de l'entreprise