Points clés
Introduction
Cet article présente le concept de files d'attente de messages et discute des avantages et des inconvénients de trois services de file d'attente de messages spécifiques: Beanstalkd, IronMQ et Amazon SQS.
Toute information décrite dans cet article est correcte au moment de la rédaction et est sujette à changement sans préavis.
Qu'est-ce qu'une file d'attente de messages?
La citation vous permet de stocker des métadonnées afin que les travaux puissent être traités plus tard. Ils peuvent aider à développer SOA (architecture orientée services) en offrant la flexibilité de différer les tâches pour séparer les processus. S'ils sont appliqués correctement, les files d'attente peuvent améliorer considérablement l'expérience utilisateur du site Web en réduisant le temps de chargement.
Avantages de la file d'attente de messages:
Inconvénients de la file d'attente de messages:
Cas d'utilisation pour les files d'attente de messages:
Tout processus long peut être mis dans la file d'attente:
Vous pouvez également utiliser des files d'attente de manière créative - verrouiller les travaux afin qu'un seul utilisateur puisse accéder à des informations à la fois.
Service
Vous pouvez utiliser de nombreux services pour implémenter les files d'attente de messages, et cet article décrit les différences entre BeanStalkd, IronMQ et Amazon SQS.
beanstalkd
BeanStalkd est "… une file d'attente de travail simple et rapide". Il a été publié en tant que logiciel open source sous la licence MIT. Il a une bonne documentation et est testé unitaire et peut être téléchargé pour s'exécuter gratuitement sur votre propre serveur. Cette architecture emprunte à Memcached, qui est spécialement conçue pour les files d'attente de messages.
Un article sur SitePoint intitulé Beat The Giants avec Beanstalkd, écrit par l'auteur Dave Kennedy, contient des informations sur la façon de commencer avec Beanstalkd et Ruby.
ironmq
IronMQ est un service Web RESTful géré. Des niveaux gratuits sont disponibles pour les développeurs, et de nombreux autres niveaux d'abonnement peuvent être utilisés par des applications commerciales.
sqs
Amazon SQS est une solution d'hébergement bon marché pour implémenter les files d'attente de messages. Il fait partie d'Amazon Web Services (AWS). Amazon fournit un niveau gratuit pour évaluer ses services de réseau, y compris SQS.
Paramètres du serveur
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
自托管 | 远程托管 | 远程托管 |
beanstalkd
Exécutez sur Linux et Mac OS X. Veuillez lire les instructions d'installation sur le site Web BeanStalkd pour des informations détaillées sur la façon de le faire fonctionner sur votre système. Le serveur BeanStalkd n'est pas disponible pour Windows.
ironmq et sqs
IronMQ et Amazon SQS sont des services réseau basés sur le cloud. Au lieu de configurer une application sur votre serveur, il vous suffit d'enregistrer un compte et de configurer une file d'attente.
Accord de niveau de service (SLA)
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
无 | 每月 99.95% | 无 |
beanstalkd
BeanStalkd est votre propre serveur hébergé, il est de votre responsabilité d'assurer sa disponibilité.
ironmq
iron.io a un accord de niveau de service avec un pourcentage de disponibilité pendant tout cycle de facturation mensuel d'au moins 99,95%. Leur package pro platine (2450 $ par mois) a des conditions de contrat personnalisées, y compris les accords de niveau de service. Ils fournissent des remboursements de points de service.
sqs
Amazon ne fournit pas un accord de niveau de service spécifique pour SQS. Ils offrent des services de support qui peuvent couvrir SQS pour des frais supplémentaires.
Architecture
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
PUSH(套接字) | HTTP 网络服务 | HTTP 网络服务 |
beanstalkd
Communiquez via Push Sockets, en fournissant une communication instantanée entre les fournisseurs et les travailleurs.
Lorsque le fournisseur a mis le travail, il peut être conservé immédiatement si le travailleur est connecté et prêt. Le travail sera conservé jusqu'à ce que le travailleur envoie une réponse (supprimer, enterré, etc.).
ironmq
SQS est un service Web RESTful géré.
IronMQ prend en charge les fonctions en forme de poussée. Les abonnés peuvent être appelés chaque fois que le fournisseur rejoint le travail à la file d'attente. En règle générale, vous souhaitez utiliser le service RESTful standard pour les travaux entrants et désactivés au lieu de méthodes push.
sqs
SQS est un service réseau géré.
SQS ne prend pas en charge la poussée. Vous devez périodiquement sonder pour vérifier s'il y a des emplois dans la file d'attente.
SQS peut utiliser un long sondage appelé temps d'attente de réception de message (par défaut: 0 secondes, maximum: 20 secondes) pour garder la connexion ouverte pendant que le travailleur attend un emploi. Cela signifie moins de demandes et des temps d'ouverture de socket plus longs.
Bibliothèque client
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
开源 | 官方 | 官方 |
beanstalkd
Il existe de nombreuses bibliothèques clients open source BeanStalkD disponibles dans de nombreux langages de programmation. Ce sont des projets autonomes de Beanstalkd.
ironmq
La bibliothèque client IronMQ est fournie par Iron.io et peut être téléchargée à partir du centre de développement.
Vous pouvez également utiliser la bibliothèque client BeanStalkd avec IronMQ si vous voulez la flexibilité pour basculer entre les deux services; cependant, certaines commandes (telles que Kick, Bury) ne sont pas prises en charge. Vous devrez peut-être également implémenter manuellement la commande oAuth pour vous connecter au service.
sqs
La bibliothèque client AWS comprend la bibliothèque client SQS. Ceux-ci sont fournis par Amazon et sont disponibles dans de nombreux langages de programmation.
Interface de gestion
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
开源 | 面板 | 控制台 |
beanstalkd
L'interface de gestion graphique n'est pas distribuée par défaut. Il existe des projets open source sur la page de l'outil BeanStalkd qui peuvent aider à déboguer et à la gestion.
ironmq
Le panneau IronMQ gère les files d'attente. Il contient un tutoriel utile qui décrit comment configurer une file d'attente et vous montre comment ajouter un travail (Message IronMQ:) à une file d'attente via Curl.
Cette interface vous permet de gérer les files d'attente dans des sites Web axés sur l'Ajax. Vous pouvez créer, lire et supprimer des travaux, afficher les informations historiques et gérer les configurations de file d'attente à partir de la vue du tableau de bord.
sqs
La console de gestion AWS vous permet de gérer les SQS. L'interface est construite sur un protocole sans état, vous devez donc appuyer sur le bouton Actualiser pour obtenir les dernières informations.
Vous pouvez créer, lire et supprimer des travaux (SQS: Messages) et gérer la configuration de la file d'attente.
redondant
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
客户端 | 基于云 | 基于云 |
beanstalkd
La redondance est gérée du côté client, et si le serveur tombe en panne, vous perdrez votre emploi.
BeanStalkd contient une option pour stocker des travaux dans les journaux binaires. Vous devez démarrer BeanStalkD avec l'option -B, mais la file d'attente de récupération est une tâche manuelle qui nécessite l'accès au disque du serveur.
ironmq
IronMQ est un service basé sur le cloud avec une forte persistance, une disponibilité et une redondance.
sqs
Les travaux sont stockés sur plusieurs serveurs dans la zone hébergée. Cette approche garantit que la disponibilité des services et des emplois ne devrait pas être perdue.
Sécurité
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
无 | 令牌 | 密钥和密钥 |
beanstalkd
La connexion à Beanstalkd ne nécessite pas d'authentification. Les fournisseurs peuvent rejoindre la file d'attente pour les emplois et les programmes de travail peuvent conserver des emplois sans passer par des modèles de sécurité. Par conséquent, il est fortement recommandé de créer un pare-feu pour bloquer les connexions externes aux ports fonctionnant sur beanstalkd.
ironmq
Vous pouvez utiliser votre file d'attente de messages en créant un collaborateur d'invitation. L'authentification à l'application se fait avec le jeton Iron.io et l'ID de projet.
sqs
L'authentification à SQS est implémentée via des clés et des clés API Amazon. Les autorisations de file d'attente d'accès peuvent être accordées et révoquées pour d'autres comptes AWS via la console de gestion AWS.
Speed
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
快 | 互联网延迟 | 互联网延迟 |
beanstalkd
beanstalkd est très rapide car il devrait être dans le même réseau que son fournisseur et son travailleur. BeanStalkd est parfois très rapide, et si le fournisseur met le poste dans la file d'attente, puis appelle MySQL, le travailleur peut obtenir votre emploi avant que MySQL ne termine l'exécution.
ironmq
La latence des demandes augmente car ils sont envoyés au service réseau IronMQ RESTFul sur HTTP.
sqs
La latence des demandes augmente car elles sont envoyées au service réseau SQS via HTTP.
Les emplois ne peuvent pas être acquis immédiatement car ils doivent être distribués sur différents serveurs et centres de données. Si la demande, le fournisseur ou le travailleur est hébergé sur une instance EC2, ce retard doit être négligeable.
Il peut ne pas être disponible immédiatement lorsque vous vous engagez au travail sur SQS. Le travail doit être propagé à un autre serveur. Attendez généralement jusqu'à une seconde.
Fidelity
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
FIFO | FIFO | 无保证 |
可优先级 | 无优先级 | 无优先级 |
beanstalkd
La file d'attente est FIFO (premier dans First Out). Les affectations très importantes peuvent être prioritaires, ce qui affectera l'ordre dans lequel les affectations sont désactivées.
ironmq
La file d'attente est FIFO (premier dans First Out). Le travail ne peut pas être traité en premier.
sqs
L'ordre d'occurrence des emplois est différent de l'ordre d'entrée dans la file d'attente. Étant donné que SQS est un service distribué, les travaux de chaque serveur seront disponibles à différents moments. C'est quelque chose à savoir lors de la conception de SQS.
Get en même temps
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
保证 | 保证 | 不保证 |
UNE Time Fetch décrit la limitation que deux ou plusieurs travailleurs ne gèrent jamais le même travail en parallèle, sauf si le travailleur a expiré.
beanstalkd
L'architecture basée sur le socket de BeanStalkd garantit une acquisition unique.
ironmq
IronMQ garantit une acquisition unique.
sqs
Parce que SQS est un service distribué, il n'est pas garanti d'obtenir une seule fois (mais peu probable).
FAIL-SAFE
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
僵尸套接字 | 超时 | 超时 |
beanstalkd
Si le travailleur ne répond pas à BeanStalkd dans le délai défini ou que la prise est fermée sans répondre au travail, le travail reviendra automatiquement à la file d'attente.
Ensuite, le prochain travailleur demandé peut l'obtenir immédiatement (pas de pots-de-vin requis).
ironmq et sqs
Le travailleur se connecte à la file d'attente et conserve le travail. À partir de ce moment, le travailleur a fixé le temps de supprimer le travail de la file d'attente avant de pouvoir être libéré et de rétention pour que le travailleur soit conservé.
Créez une nouvelle file d'attente
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
自动 | 自动和手动 | 手动 |
beanstalkd
Lorsque le travail rejoint la file d'attente, une file d'attente sera automatiquement créée (BeanStalkd: Pipeline). Pas besoin de les créer manuellement.
ironmq
Vous devez créer un projet dans le tableau de bord. Un projet contient de nombreuses files d'attente. Les files d'attente peuvent être créées automatiquement lorsque les travaux sont en cours ou en utilisant manuellement des configurations dans le tableau de bord.
sqs
La file d'attente pour SQS doit être définie manuellement à partir de la console de gestion AWS. Chaque file d'attente génère une URL unique qui est utilisée comme nom de file d'attente.
Veuillez noter la région dans laquelle appartient la file d'attente (par exemple: US-West-1, UE-West-1, etc.), car elle est nécessaire pour se connecter aux SQS.
Intégration de trame
laravel
Le framework Laravel a un excellent wrapper intégré qui résume les files d'attente de messages pour BeanStalkd, IronMQ et Amazon SQS. Vous pouvez modifier le serveur par configuration sans modifier aucune application.
Exemple de code PHP
Ces exemples de code vous montrent comment vous connecter à un serveur et comment faire la queue, conserver et désactiver les travaux pour faire la queue. Si une exception est lancée, elle enterrera le travail (si le serveur le prend en charge).
Essayez d'arrêter l'exécution une fois le travail en cours et déboguez la file d'attente à l'aide de l'outil de gestion.
(des exemples de code PHP pour BeanStalkd, IronMQ et SQS ont été omis car ils sont trop longs et ne correspondent pas à l'objectif pseudo-original. Ces extraits peuvent être facilement copiés à partir du texte d'origine.)
Conseils de file d'attente de messages
Quel que soit le service que vous choisissez, voici quelques conseils pour garder votre file d'attente forte:
Sérialisation des métadonnées
Votre travail peut contenir toutes les données que vous aimez, à condition qu'elle soit dans la limite de la taille des données du travail du serveur. Utilisez JSON dans le corps du travail pour rendre les métadonnées faciles à transférer.
limiter la taille des données du travail
Essayez de ne pas utiliser trop de métadonnées pour remplir le travail. Si vous pouvez stocker des informations dans la base de données et uniquement une file d'attente pour un traitement ultérieur, votre file d'attente sera plus puissante et plus facile à déboguer.
Suivez le statut des devoirs
Si, pour une raison quelconque, un élément déjà traité rentre dans la file d'attente, vous ne voudrez peut-être pas le traiter. Malheureusement, les données de travail ne sont pas obligatoires et uniques, alors assurez-vous de garder une trace de l'état du travail dans la base de données.
Cela peut être aussi simple que d'ajouter une colonne à la table de travail pour marquer l'élément comme traité. Si le projet a été traité, vous pouvez le supprimer de la file d'attente.
Termes
Certains mots sont utilisés différemment entre BeanStalkd et Amazon SQS. Voici une liste de traduction rapide:
(Les tables de comparaison du terme pour BeanStalkd, Amazon SQS et IronMQ ont été omises car elles sont trop longues et ne correspondent pas aux objectifs pseudo-originaux. Ces tableaux peuvent être facilement copiés à partir du texte d'origine.)
glossaire
Lorsque vous utilisez des files d'attente, vous pouvez rencontrer les termes suivants:
Enterré (Job) - Mettez le travail dans un état défaillant. Le travail ne peut pas être retraité tant que le travail n'est pas renvoyé manuellement à la file d'attente . IronMQ et SQS ne sont pas pris en charge.
utilisateur - voir le programme de travail.retard - retarder le travail pendant une période et non envoyé au travailleur.
supprimer (travail) - Voir Départ.
DEQUEUe - Marquez le travail terminé et supprimez-le de la file d'attente.
Entrez la file d'attente - Ajoutez le travail à la file d'attente et préparez-le à utiliser par le travailleur.
FIFO - Décrit comment les travaux sont traités dans les files d'attente, c'est-à-dire le premier-in, premier-out. Il s'agit du type de file d'attente de messages le plus courant.
Filo - Décrit comment les travaux sont traités dans une file d'attente, c'est-à-dire d'abord dans puis de sortir.
Job - Une tâche retardée dans la file d'attente contenant des métadonnées utilisées pour identifier la tâche à traiter. Similaire à une ligne de base de données.
Kick (travail) - Renvoyez le travail précédemment enterré dans la file d'attente pour que le travailleur puisse obtenir. IronMQ et SQS ne sont pas pris en charge.
Fournisseur
- Le client qui se connecte au serveur de messages pour créer un travail.Citation - Une méthode de regroupement de travaux similaires dans une file d'attente. Similaire aux tables de base de données.
Réserve (travail) - Passez le travail au travailleur et verrouillez-le pour l'empêcher d'être transmis à un autre travailleur.
Worker - Un client qui se connecte au serveur de messages pour conserver, supprimer et enterrer des travaux. Ces parties à forte intensité de main-d'œuvre du processus d'exécution.
Conclusion
Il n'y a pas de solution universelle pour le service de file d'attente de messages. Beanstalkd, IronMQ et Amazon SQS ont tous leurs propres avantages et inconvénients et peuvent être utilisés par vous. Cet article devrait vous fournir suffisamment d'informations pour vous aider à prendre une décision éclairée sur le service qui convient le mieux à votre niveau de compétence et à vos besoins de projet.Quel service de file d'attente de messages utiliserez-vous? Si vous utilisez actuellement des files d'attente, envisageriez-vous de changer? Avez-vous utilisé des files d'attente de messages d'une manière non traditionnelle qui peut aider les autres? Veuillez laisser un message à faire savoir à tout le monde.
Les questions fréquemment posées sur les files d'attente de messages (FAQ)
(Les questions fréquemment posées sur les files d'attente de messages ont été omises car elles sont trop longues et ne correspondent pas à l'objectif pseudo-original. Ces questions et réponses peuvent être facilement copiées à partir du texte d'origine.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!