【发布时间】:2023-11-09 05:28:01
【问题描述】:
假设我有 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 这样的数据存储,请解释我如何连接到此类以允许验证等。我还不熟悉这样的。
【问题讨论】:
标签: message-queue soa notifications publish-subscribe tokyo-cabinet