Каковы некоторые методы, чтобы подтолкнуть изменения из Токийского кабинета в мультисервисной установке?


Предположим, у меня есть N > 1 TCP-ориентированных, ориентированных на соединение (читай: Не веб-сайт) служб, обрабатывающих соединения от конечных пользователей в некоторой конфигурации балансировки нагрузки/совместного использования.

Эти пользователи делают вещи, которые вызывают обновления одного или нескольких ключей в централизованном хранилище данных Tokyo Tyrant.

Что вы рекомендуете передать эти изменения заинтересованным пользователям, подключенным к другому экземпляру службы, работающему в той же частной сети (тот же colo.)?

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

A несколько идей:

Транслируйте изменения при успешном обновлении хранилища данных из службы 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 server-server (нужно это исследовать).

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 подписаться на очередь от имени заинтересованных пользователей; опубликовать ее при успешном " put " s

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, пожалуйста, объясните, как я могу подключиться к такому, чтобы разрешить проверки и т. д. Я не близкий человек и все же с такими.

1 2

1 ответ:

Моя рекомендация (и то, что я использую) - это подход брокера сообщений. RabbitMQ отслеживает сервисы (un), подписывающиеся на различные очереди,и вы можете использовать обмены fanout.

Кроме того, в Tokyo Cabinet есть журнал (в странном формате), который можно использовать для получения обновлений и отправки их в очередь. Я только попробовал использовать cron, но думаю, что его можно получить в реальном времени с помощью сокета.