8

多くの変換を行うために使用される計算集約型のサービスがあります。その大部分が計算に縛られた (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 を使用して構成側を簡単に処理できることはわかっています (つまり、サーバーはアルゴの更新または追加をリッスンし、構成されたとおりに提供します)。

乾杯!

4

2 に答える 2

6

LinkedInのNorbertのようなものが必要になるでしょう:http : //sna-projects.com/norbert/クライアントとサーバー間の永続的なピアツーピア通信を使用し、サービスレジストリと帯域外シグナリングにzookeeperを使用します。かなりクールなもの。これにより、高負荷時にリクエストを処理するのに役立つ別の処理ノードを起動することができます。

/ジョナス

于 2011-12-05T12:59:37.797 に答える
2

DynamicPool と ZooKeeperNode を見てください。デフォルトの配線は、参照用に ThriftFactory で利用できます。 http://twitter.github.com/commons/

于 2012-04-24T18:58:23.033 に答える