假设我有 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。然而,这个想法更普遍。
如果您建议只使用带有持久队列的消息代理而不是像 Tokyo Tyrant 这样的数据存储,请解释我如何连接到此类以允许验证等。我对此并不熟悉。