多くの変換を行うために使用される計算集約型のサービスがあります。その大部分が計算に縛られた (CPU に縛られた) プロセスです。基本的に何が起こるかというと、Thrift を介して処理サービスにメッセージを送信するメッセージ ブローカーがあります。
現在、メッセージを処理するために異なるアルゴを実行する複数の異なる処理サービスがあります。これらのメッセージは、1 つ以上の処理アルゴにルーティングされます。メッセージ量は可変であり、処理アルゴリズムのニーズも同様です (つまり、XYZ を含む多くのメッセージを取得してアルゴ 1 に送信し、それ以外の場合はアルゴ 2 に送信できます)。
これを水平方向に拡張できるものに拡張したいと考えています。そのため、処理アルゴリズムを実行している複数のノードがあります。ここで、メッセージングの負荷に応じて、Thrift リクエストを異なるサーバーに送信する必要があります (すべてのサービスが各処理 Algo1 から 3 のインスタンスを実行していると仮定します)。たとえば、アルゴ 1 で処理したい大量のメッセージを取得し、アルゴ 1 を実行する 2 つのサーバーがあり、3 番目のサーバーが他の 2 つのアルゴ (アルゴ 2 & 3) の要求を処理するとします。
したがって、システムは次のようになります。
Client ----Request-------|
-----------|--------------------
| Coord & Load Balancer Service | ... like zookeeper
--------------------------------
<--|-->
| Route messages to servers...
Server1: Server2: Server 3:
Algo1 instance Algo1 instance Algo2 instance
Algo3 instance
すべてのプロセスは Java で記述されています。
では、Zookeeper を使用してこのような設定を行うのはどれほど簡単でしょうか。アルゴを追加または変更するときに、Zookeeper を使用して構成側を簡単に処理できることはわかっています (つまり、サーバーはアルゴの更新または追加をリッスンし、構成されたとおりに提供します)。
乾杯!