Wir haben einen rechenintensiven Service, der für eine Reihe von Transformationen verwendet wird. Sein weitgehend rechenintensiver (CPU-gebundener) Prozess. Im Wesentlichen haben wir einen Nachrichtenbroker, der Nachrichten über Thrift an den Verarbeitungsservice sendet.
Jetzt haben wir mehrere verschiedene Verarbeitungsdienste, die verschiedene Algorithmen ausführen, um die Verarbeitung der Nachrichten durchzuführen - diese Nachrichten werden an ein oder mehrere Verarbeitungsalgorithmen weitergeleitet. Unsere Nachrichtenvolumina sind variabel und ebenso die Bedürfnisse der Verarbeitungsalgorithmen (d. H. Wir können viele Nachrichten erhalten, die XYZ enthalten, dann an Algo 1 senden, andernfalls an Algo 2 senden).
Wir möchten dies zu etwas erweitern, das horizontal skalierbar ist. Wir haben also mehrere Knoten, auf denen die Verarbeitungsalgorithmen laufen. Abhängig von den Nachrichtenladungen sollten nun unsere Thrift-Anfragen an verschiedene Server gesendet werden (angenommen, dass alle Dienste eine Instanz jeder Verarbeitung Algo1 bis 3 ausführen). Sagen wir zum Beispiel, wir erhalten eine große Anzahl von Nachrichten, die wir auf Algo 1 verarbeiten wollen, dann haben wir zwei Server, auf denen algo 1 läuft, und der dritte Server kümmert sich um Anfragen für die anderen zwei Algos (Algo 2 & 3).
Also sieht das System so aus:
%Vor%Alle Prozesse sind in Java geschrieben.
Wie einfach wäre es also, wenn Sie mit Zookeeper etwas einrichten würden? Ich weiß, dass wir beim Hinzufügen oder Ändern von Algos einfach Zookeeper verwenden können, um die Konfigurationsseite der Dinge zu handhaben (dh Server warten auf Aktualisierungen oder Ergänzungen von Algo und bieten sie wie konfiguriert an), aber wie verwalten wir den Lastenausgleichaspekt?
>Prost!
Sie wollen wahrscheinlich etwas wie Norbert von LinkedIn: Ссылка Sie verwenden persistente Peer-to-Peer-Kommunikation zwischen Clients und Servern und verwenden zookee für die Service-Registrierung und Out-of-Band-Signalisierung. Ziemlich coole Sachen. Es ermöglicht Ihnen, einfach einen anderen Verarbeitungsknoten hochzufahren, der helfen kann, Anforderungen bei hoher Auslastung zu verarbeiten.
/ Jonas
Tags und Links java distributed-computing thrift apache-zookeeper load-balancing