Каковы некоторые методы, чтобы выдвинуть изменения из кабинета Токио в мультисервисной установке? - PullRequest
2 голосов
/ 06 октября 2009

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

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

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

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

1 Ответ

1 голос
/ 05 ноября 2009

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

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

...