負荷分散/共有構成でエンドユーザーからの接続を処理する 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 のようなデータストアの代わりに永続的なキューを備えたメッセージ ブローカーを使用することをお勧めする場合は、検証などを可能にするためにどのようにフックするかを説明してください。