Ich habe vor kurzem angefangen, die Nuancen der skalierbaren und Enterprise-Computerarchitektur zu erlernen, und eine der zentralen Komponenten ist eine Messaging-Warteschlange. Um so viel wie möglich von jedem Programmierparadigma zu lernen, versuche ich, eine eigene Version eines Messaging-Warteschlangendienstes zu implementieren.
Bisher läuft mein anfängliches Design auf einem Threaded-Socket-Listener, aber um zu verhindern, dass dieselbe Nachricht zweimal von zwei separaten Verarbeitungsknoten heruntergeladen wird, wird das Indexregister der Nachrichtenwarteschlange gesperrt, wenn ein Lesevorgang eingeleitet wird, und entsperrt, nachdem das Register freigegeben wurde aktualisiert. Dies macht ein Threading überflüssig und bedeutet, dass es eine Obergrenze für die Größe eines skalierbaren Systems gibt, die auf der Verarbeitungsgeschwindigkeit des Servers basiert, auf dem der Messaging-Warteschlangendienst ausgeführt wird.
Die Möglichkeit, dies zu umgehen, besteht darin, den Nachrichtenwarteschlangendienst auf mehreren Servern auszuführen. Dies erhöht jedoch die Wahrscheinlichkeit, dass dieselbe Nachricht zweimal heruntergeladen wird. Die einzige Möglichkeit, solche Probleme zu vermeiden, besteht darin, einen Widerrufsrückruf einzuschließen, der (nachdem die Server oder sogar die Threads auf einem einzelnen Server ihre Informationen synchronisiert und eine solche Neuausgabe festgestellt haben) den Verarbeitungsknoten anweist, seine Ausführung zu stoppen aktuellen Job und fragen Sie die Nachrichtenwarteschlange erneut nach der nächsten Nachricht ab. Es würde jedoch eine Obergrenze geben, an der der größte Teil des gesendeten Datenverkehrs aus Synchronisierungen und Widerrufsrückrufen besteht. Dies führt zu einem Engpass und verlangsamt die Verarbeitung von Informationen, sodass a Viele der Verarbeitungsknoten würden Nulloperationen ausführen und Zeit verschwenden.
Die letzte Möglichkeit, um dieses Problem zu umgehen, besteht darin, dass jeder Message Queue-Server (und jeder Thread auf jedem Server) einen bestimmten Versatz hat, um festzustellen, wo in der Warteschlange er sich befindet Art der Anwendung, insbesondere wenn die Verarbeitung in einer bestimmten Reihenfolge erfolgen muss.
Gibt es also Entwürfe für Nachrichtenwarteschlangenarchitekturen, die mir zeigen könnten, wie vorhandene Nachrichtenwarteschlangendienste für Unternehmen diese Probleme vermeiden?