J'ai récemment commencé à apprendre les nuances de l'architecture informatique évolutive et d'entreprise, et l'un des composants centraux est une file d'attente de messagerie. Afin d'apprendre le plus possible de tout paradigme de programmation, j'essaie d'implémenter ma propre version d'un service de file d'attente de messagerie.
Jusqu'à présent, ma conception initiale s'exécute sur un écouteur de socket fileté, mais afin d'empêcher le même message d'être téléchargé deux fois par deux nœuds de traitement distincts, le registre d'index de file d'attente de messages est verrouillé lorsqu'une lecture est lancée, et déverrouillé après que le registre a été mis à jour. En tant que tel, cela supprime la nécessité de le threader et signifie qu'il existe un plafond pour la taille d'un système évolutif en fonction de la vitesse de traitement du serveur sur lequel le service de file d'attente de messagerie s'exécute.
Pour contourner ce problème, exécutez le service de file d'attente de messages sur plusieurs serveurs, mais cela augmentera la probabilité que le même message soit téléchargé deux fois. Le seul moyen d'éviter de tels problèmes serait d'inclure un rappel de révocation qui (après que les serveurs, ou même les threads sur un seul serveur, ont synchronisé leurs informations et détecté une telle réémission) commanderait au nœud de traitement d'arrêter son travail en cours, et interroger à nouveau la file d'attente de messages pour le message suivant, mais là encore, il y aurait un plafond où la plupart du trafic envoyé serait des synchronisations et des rappels de révocation, provoquant un goulot d'étranglement et ralentissant le traitement des informations afin qu'un beaucoup de nœuds de traitement effectueraient des opérations nulles et perdraient du temps.
La dernière façon à laquelle je peux penser pour contourner ce problème est d'avoir chaque serveur de file d'attente de messages (et chaque thread sur chaque serveur) aurait un décalage spécifique quant à l'endroit dans la file d'attente qu'il recherche, mais cela pourrait avoir des problèmes basés sur le type d'application, en particulier si le traitement doit être effectué dans un ordre spécifique.
Donc, tout cela étant dit, existe-t-il des conceptions d'architecture de file d'attente de messages qui pourraient me montrer comment les services de file d'attente de messages de qualité entreprise évitent ces problèmes?