Каковы некоторые методы, чтобы подтолкнуть изменения из Токийского кабинета в мультисервисной установке?
Предположим, у меня есть 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 ответ:
Моя рекомендация (и то, что я использую) - это подход брокера сообщений. RabbitMQ отслеживает сервисы (un), подписывающиеся на различные очереди,и вы можете использовать обмены fanout.
Кроме того, в Tokyo Cabinet есть журнал (в странном формате), который можно использовать для получения обновлений и отправки их в очередь. Я только попробовал использовать cron, но думаю, что его можно получить в реальном времени с помощью сокета.