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