2

假设我有 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 这样的数据存储,请解释我如何连接到此类以允许验证等。我对此并不熟悉。

4

1 回答 1

1

我的建议(以及我使用的)是消息代理方法。RabbitMQ 跟踪订阅不同队列的服务(取消),您可以使用扇出交换。

此外,东京内阁有一个日志(虽然格式很奇怪),您可以使用它来获取更新并将它们推送到队列中。我只尝试使用 cron,但我认为可以使用套接字实时获取它。

于 2009-11-05T14:19:12.200 回答