2

負荷分散/共有構成でエンドユーザーからの接続を処理する N > 1 の TCP ベースの接続指向 (読み取り: Web サイトではない) サービスがあるとします。

これらのユーザーは、一元化された Tokyo Tyrant データストア内の 1 つ以上のキーを更新するような操作を行います。

これらの変更を、同じプライベート ネットワーク (同じ色) で実行されている別のサービス インスタンスに接続している関心のあるユーザーにプッシュするには、何をお勧めしますか?

User 1     Service 1      Tokyo Tyrant      Service 2           User 2
------     ---------      ------------      ---------           ------
  |            |               |                |                 |
  ------> do something         |                |                 |
  |            |       ---> put K 42            |                 |
  |            |               |     ----> Hey! K is now 42       |
  |            |               |                |          ---> K was updated

いくつかのアイデア:

データストアの更新が成功したら、サービス N から他のすべてのサービスに変更をブロードキャストします。

User 1     Service 1      Tokyo Tyrant      LAN Broadcast       Service 2       User 2
------     ---------      ------------      -------------       ---------       ------
  |            |               |                |                 |                |
  ------> do something         |                |                 |                |
  |            |       ---> put K 42            |                 |                |
  |            |       -----------------> Hey! K is now 42        |                |
  |            |               |                |         --> Hey! K is now 42     |
  |            |               |                |                 |         ---> K was updated

関心のある各ユーザーがログオンしているサービスを保存し、それらのサービスにメッセージを送信してから、関心のあるユーザーに中継します。これがIRCサーバー間の接続の仕組みだと思います(調査する必要があります)。

User 1     Service 1      Tokyo Tyrant      Service 2           User 2
------     ---------      ------------      ---------           ------
  |            |               |                |                 |
  ------> do something         |                |                 |
  |            |       ---> put K 42            |                 |
  |            |       ---> who cares?          |                 |
  |            | <--- User 2 on Service 2       |                 |
  --------------------------------------> Hey! K is now 42        |
  |            |               |                |          ---> K was updated

メッセージブローカー (RabbitMQ など) を実行します。関心のあるユーザーに代わって、各サービス X をキューにサブスクライブさせます。成功した「プット」に投稿する

User 1     Service 1      Tokyo Tyrant      RabbitMQ           Service 2    User 2
------     ---------      ------------      --------           ---------    ------
  |            |               |                | <--- subscribe --|         |
  ------> do something         |                |                  |         |
  |            |       ---> put K 42            |                  |         |
  |            | ------------------- post msg -->                  |         |
  |            |               |                |----- notify ---->|         |
  |            |               |                |                  |  ---> K was updated

さらに別のアイデアは、レプリケーション スレーブのふりをして、マスターに接続することです。

一般的に、CouchDB にあるが Tokyo Tyrant の「変更通知」を取得する方法を探しています。ただし、考え方はより一般的です。

Tokyo Tyrant のようなデータストアの代わりに永続的なキューを備えたメッセージ ブローカーを使用することをお勧めする場合は、検証などを可能にするためにどのようにフックするかを説明してください。

4

1 に答える 1

1

私の推奨事項(および私が使用するもの)は、メッセージブローカーのアプローチです。RabbitMQは、さまざまなキューに(非)サブスクライブしているサービスを追跡し、ファンアウト交換を使用できます。

また、東京内閣には、更新を取得してキューにプッシュするために使用できるログ(奇妙な形式ですが)があります。cronを使ってみただけですが、ソケットを使ってリアルタイムで取得できると思います。

于 2009-11-05T14:19:12.200 に答える