Table des matières
Avantages et inconvénients des implémentations de files d'attente courantes
Maison développement back-end tutoriel php PHP implémente la file d'attente des messages

PHP implémente la file d'attente des messages

Mar 22, 2018 pm 03:05 PM
php 消息 队列

Comme nous le savons tous, lors de la conception d'un site Web, vous rencontrerez des « messages texte en masse » aux utilisateurs, « un grand nombre de journaux dans le système de commande », une « conception de vente flash », etc. Le serveur ne peut pas gérer cela soudainement explosion de pression. Dans cette situation Pour assurer l'utilisation normale et efficace du système, l'aide de la « file d'attente des messages » est nécessaire. Cet article étudie principalement à travers l'idée de file d'attente de messages.

Comprendre principalement les connaissances suivantes :

1. Qu'est-ce qu'une file d'attente et que peut-elle faire ?

2. Quels sont les scénarios d'application de l'alignement ?

3. Comment utiliser les files d'attente pour découpler les services ?

4. Comment utiliser la file d'attente Redis pour éliminer la haute pression ?

5. Comment utiliser le système d'alignement professionnel RabbitMQ ?

Le contenu principal est résumé comme suit

 @Concepts, principes et scénarios de file d'attente de messages

 @Cas de découplage : système de commande de traitement de file d'attente et système de distribution

@ Cas de réduction des pics de trafic : le type de liste de Redis réalise une vente flash

@RabbitMQ : Une solution de mise en œuvre de système de messagerie plus professionnelle

Comprendre la file d'attente des messages

1.

1.1 Concept de file d'attente de messages

Essentiellement, la file d'attente de messages est un middleware avec une structure de file d'attente, ce qui signifie que le message peut être renvoyé directement après avoir été placé dans ce middleware, et n'a pas besoin d'être traité immédiatement par le système. De plus, il y aura un programme qui lit les données et les traite une par une en séquence.

C'est-à-dire que lorsque vous rencontrez une situation où la concurrence est particulièrement importante et prend beaucoup de temps, et que vous n'avez pas besoin de renvoyer les résultats du traitement immédiatement, l'utilisation de files d'attente de messages peut résoudre de tels problèmes.

1.2 Structure de base

Mettez la file d'attente par un système d'entreprise, insérez le message dans la file d'attente des messages un par un et renvoyez directement le résultat réussi après l'insertion est réussie. Il y aura un système de traitement de messages à l'avenir, qui supprimera et traitera les enregistrements dans le système de messagerie un par un, complétant ainsi un processus de retrait de la file d'attente.

1.3 Scénarios d'application

Redondance des données : par exemple, le système de commande nécessite une conversion et un enregistrement stricts des données à l'avenir. La file d'attente des messages peut stocker ces données de manière persistante dans la file d'attente, puis il y en a. commandes , le programme de traitement ultérieur l'obtient et une fois le traitement ultérieur terminé, cet enregistrement est supprimé pour garantir que chaque enregistrement peut être traité.

Découplage du système : après avoir utilisé le système de messagerie, le système de mise en file d'attente et le système de sortie de file d'attente sont séparés, ce qui signifie que tant qu'il plante un jour, cela n'affectera pas le fonctionnement normal de l'autre système.

Réduction des pics de trafic : par exemple, pour les ventes flash et les ventes urgentes, nous pouvons utiliser des files d'attente de messages en conjonction avec la mise en cache, ce qui peut résister efficacement au nombre de visites instantanées et empêcher le serveur d'être submergé et de provoquer un crash.

Communication asynchrone : le message lui-même peut être renvoyé directement après avoir été mis en file d'attente.

Évolutivité : par exemple, la file d'attente des commandes peut non seulement traiter les commandes, mais peut également être utilisée par d'autres entreprises.

Garantie de tri : certains scénarios doivent être traités dans l'ordre des produits, comme l'entrée et la sortie uniques pour garantir que les données sont traitées dans un certain ordre. Il est possible d'utiliser des files d'attente de messages.

Les scénarios ci-dessus sont des scénarios d'utilisation courants de la file d'attente de messages. Bien entendu, la file d'attente de messages n'est qu'un middleware et peut être utilisée conjointement avec d'autres produits.

1.4 Avantages et inconvénients courants de la mise en œuvre des files d'attente

Médias de file d'attente

1 Base de données, telle que MySQL (haute fiabilité, facile à mettre en œuvre, vitesse lente)

2, mise en cache, telle que Redis (rapide, faible efficacité lorsqu'un seul paquet de messages est trop volumineux)

3. Système de messagerie, tel que RabbitMq (très professionnel, fiable, coût d'apprentissage élevé)

Mécanisme de déclenchement du traitement des messages

1. Lecture en boucle sans fin : facile à mettre en œuvre, impossible de récupérer à temps en cas de panne (plus adapté à la vente flash, fonctionnement et maintenance plus centralisés)

2. Tâches planifiées : la pression est uniformément répartie, avec une limite supérieure de traitement, un mécanisme de déclenchement de traitement actuellement populaire ; (Le seul inconvénient est que vous devez faire attention à l'intervalle et aux données. N'attendez pas que la tâche précédente ne soit pas terminée et que la tâche suivante recommence)

 3. Processus démon : similaire à php- fpm et php-cg, nécessite les bases du shell

2 Cas de découplage : Traitement des files d'attente "Système de commande" et "Système de distribution" Parlons brièvement du découplage des programmes :

Le découplage des programmes consiste à éviter le problème de savoir qui doit être secouru en premier lorsque votre femme et votre mère tombent à l'eau en même temps

(en riant) Pour les commandes Pour le processus, nous pouvons concevoir deux systèmes, l'un est le "système de commande" et l'autre est le "système de livraison". Nous aurions tous dû le voir lors de nos achats en ligne. Je passe une commande, je vois ma marchandise en arrière-plan. À l’heure actuelle, un « système de prestation » doit être impliqué.

Si nous concevons ensemble le « système de commande » et le « système de livraison » lors de la réalisation de l'architecture, il y aura quelques problèmes. Tout d'abord, pour le système de commande, la pression sur le système sera plus grande, mais. Le « système de distribution » ne doit pas nécessairement réagir immédiatement à ces pressions.

Deuxièmement, nous ne voulons pas que la défaillance du système de commande entraîne une défaillance du système de distribution, ce qui affecterait le fonctionnement normal des deux systèmes en même temps. Nous espérons donc découpler ces deux systèmes. Une fois les deux systèmes séparés, nous pouvons communiquer entre les deux systèmes via une « table de file d'attente » intermédiaire.

2.1 Conception de l'architecture

 1. Tout d'abord, le système de commande recevra la commande de l'utilisateur, puis traitera la commande.

2. Ces informations de commande seront ensuite écrites dans la table de file d'attente. Cette table de file d'attente est la clé de la communication entre les deux systèmes.

3. Un programme exécuté régulièrement par le système de distribution lit la table de file d'attente pour traitement.

4. Après traitement par le système de distribution, les enregistrements traités seront marqués.

2.2 Déroulement du programme

3. Cas de réduction des pics de trafic : le type de liste de Redis réalise une vente flash

redis Basé sur la mémoire, ce sera très rapide. Redis est un très bon complément à la base de données car il est durable, Redis écrira périodiquement des données sur le disque dur, il n'a donc pas à se soucier des pannes de courant. a plus d'avantages qu'un autre cache memcache. De plus, redis fournit cinq types de données (chaîne, liste doublement chaînée, hachage, ensemble, ensemble ordonné)

De manière générale, faire des ventes flash Redis est un bon choix pour les cas où les cas, les achats urgents et les cas nécessitant une file d’attente sont instantanément plus élevés que les vôtres.

3.1 Type de liste dans le type de données Redis

La liste de Redis est une liste doublement chaînée, et les données peuvent être ajoutées à partir de la tête ou de la queue.

* LPUSH/LPUSHX : Insérez la valeur dans la tête de la liste (/existante)

* RPUSH/RPUSHX : Insérez la valeur dans la queue de la liste (/existante)

* LPOP : Supprimer et obtenir le premier élément de la liste

* RPOP : Supprimer et obtenir le dernier élément de la liste

* LTRIM : Conserver les éléments dans la plage spécifiée

* LLEN : Obtenez la longueur de la liste

* LSET : Définissez la valeur de l'élément de la liste par index

* LINDEX : Récupérez l'élément de la liste par index

* LRANGE : obtenez les éléments dans la plage spécifiée de la liste

3.2 Conception de l'architecture

Une conception de programme Flash Kill à structure simple.

 1. Enregistrez d'abord quel utilisateur a participé à la vente flash et enregistrez son temps.

2. Enregistrez l'ID de l'utilisateur dans la liste Redis et laissez-le mettre en file d'attente. S'il est stipulé que seuls les 10 premiers utilisateurs peuvent participer avec succès, si le nombre dans la liste est suffisant, il ne sera pas autorisé à continuer à ajouter des données. De cette façon, la longueur de la liste Redis ne sera que de 10

3. Enfin, écrivez lentement les données en Redis dans la base de données pour réduire la pression sur les données

3.3 Au niveau du code conception

1. Lorsque l'utilisateur démarre la vente flash, écrivez la demande du programme de vente flash dans Redis (uid, time_stamp).

2. S'il est stipulé que seules 10 personnes peuvent réussir la vente flash, vérifiez la longueur des données stockées dans Redis. Si elle dépasse la limite supérieure et supprimez-la directement, cela signifie que la vente flash est terminée. complété.

3. Enfin, les 10 données stockées dans Redis sont traitées dans une boucle infinie, puis les données sont lentement récupérées et stockées dans la base de données MySQL.

La zone de vente flash met beaucoup de pression sur la base de données. Si nous n'avons pas une telle conception, cela provoquera un goulot d'étranglement en écriture dans MySQL. Nous utilisons une liste de files d'attente dans Redis, puis plaçons la demande de vente flash dans Redis. Enfin, nous écrivons lentement les données dans la base de données via le programme d'entreposage, de cette façon, le trafic peut être équilibré et il n'y aura aucun impact sur MySQL. . Trop de pression.

4. RabbitMQ

Nous expliquons ici quelques utilisations de RabbitMQ Tout d'abord, lorsque nous avons parlé du cas de la vente flash auparavant, nous avons mentionné le mécanisme de verrouillage pour empêcher. d'autres programmes ne traitent pas le même enregistrement. Si notre architecture système est très complexe, il existe plusieurs programmes lisant une file d'attente en temps réel, ou j'ai plusieurs programmes d'envoi qui exploitent une ou plusieurs files d'attente en même temps, et je veux même ces programmes. à distribuer sur différentes machines dans ce cas, l'utilisation de la file d'attente Redis est quelque peu inadéquate. Que faire à ce stade ? Nous devons introduire des systèmes de file d'attente de messages plus professionnels, qui peuvent mieux résoudre le problème.

4.1 Architecture et principes de RabbitMQ

 

Caractéristiques : Implémentation complète d'AMQP, simplification du cluster, persistance, multiplateforme

Utilisation de RabbitMQS

1. Installation de RabbitMQ (rabbitmq-server, php-amqplib)

2. Le producteur envoie des messages au canal de messages

3. Processeur consommateur message

File d'attente des travaux

 

Idée : le producteur l'envoie au système de messagerie, et le système de messagerie encapsule la tâche dans une file d'attente de messages, puis utilise la même file d'attente pour plusieurs consommateurs

Ce n'est pas seulement cela résout le découplage entre producteurs et consommateurs, mais peut également réaliser le partage des consommateurs et des tâches, réduisant ainsi la pression sur le serveur.

5. Résumé

Ce qui précède se concentre principalement sur l'apprentissage des concepts, des principes et des scénarios des files d'attente de messages. Cas de découplage et cas d'écrêtage de pointe, ainsi que compréhension de l'utilisation simple de RabbitMQ.

6. Question

Quelle est la plus grande différence entre Redis et la sélection du serveur de messages.

D'après ce que j'ai compris, Redis traite les requêtes une par une. Redis est un seul thread. Il est différent de l'implémentation des IO du serveur de messages. L'un est synchrone et l'autre est asynchrone, tandis que Redis utilise le blocage synchrone, tandis que l'autre est synchrone. serveur de messages Utiliser un mode asynchrone non bloquant.

Avantages et inconvénients des implémentations de files d'attente courantes

Support de file d'attente :

Mysql : haute fiabilité, facile à mettre en œuvre, vitesse lente
Redis : vitesse rapide, message volumineux unique package Faible efficacité en termes de temps
Système de messagerie : hautement professionnel, fiable, coût d'apprentissage élevé (par exemple : RabbtiMQ)

Mécanisme de déclenchement pour le traitement des messages :

Lecture en boucle infinie : facile à mettre en œuvre, Impossible de récupérer à temps lorsqu'un défaut survient ;
Tâches planifiées : la pression est uniformément répartie et il existe une limite supérieure à la capacité de traitement. (Le plus gros défaut : l'intervalle de temps entre les tâches de positionnement et les données traitées doivent être saisis avec précision. La tâche suivante ne peut pas être considérée comme ayant été démarrée avant que la tâche précédente ne soit terminée)

Processus démon : similaire à PHP -FPM et PHP-CGI, nécessite une connaissance du shell.

Recommandations associées :

Implémentation et application de la file d'attente de messages PHP

Comment PHP et Redis implémentent la file d'attente de messages

Implémentation PHP du partage d'instances de classe de file d'attente de messages

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles