我一直在考虑将WAMP路由器扩展到多台机器上。特别是因为在没有备份系统的情况下依赖一个系统在现场场景中似乎有点困难。
为了不进行复杂的主节点选举以及随之而来的所有事情,我有以下想法,我很想得到一些反馈。
路由器需要共享一些信息,即:
验证
- 会话 ID
RPC
- 使用简单注册时检查客户端是否已经注册了 uri
- 转发基于模式注册的呼叫
- 元 API 信息
发布/订阅
- 向网络中的所有客户端提供事件消息
- 元 API 信息
所有路由器之间必须有连接。为了保持连接和流量低,想法是拥有一个环形基础设施:
+----------------+ +-----------------+ +--------------+
| | | | | |
+--> First Router +----> Second Router +----> Nth Router +--+
| | | | | | | |
| +----------------+ +-----------------+ +--------------+ |
| |
+-----------------------------------------------------------------+
每个路由器都有自己的客户端连接到下一个路由器。通过存储来自客户端的 CALL 或 PUBLISH 的传入消息 ID,路由器可以识别往返行程。来自另一个路由器的来电将按原样处理。产量将具有正确的 INVOCATION.Request|id 并可以转发到正确的路由器。
丢失路由器
该基础架构强制所有路由器都具有一些静态且相同的配置。这意味着动态缩放将不起作用,但因此不需要领导者选举。如果一个路由器被杀死,下一个路由器将从路由器列表中连接。持续轮询可以检查路由器是否重新联机。
我没有对此做任何深入的研究。因此,我很乐意为此获得一些意见。