5.0基于mria的方案是网+星,那coreA节点下的rep1节点的消息,到coreB节点下rep2的消息的路由是怎样的?
我理解应该不是rep1–coreA–coreB–rep2这样的路径;如果不是这样那我理解是不是不同broker之间的路由拓扑和数据拓扑是独立的,或者说分层的,路由拓扑是网状的,数据拓扑是网+星的?
不知道我的理解是否有问题,望解答。
Pub/Sub 的路由过程可以简化为,假设 现在有 core1, repl1 repl3 三个节点的集群:
订阅/取消过程:
- sub1 链接到 repl1 并发起一个订阅
- repl1 接收到该订阅后:
2.1. repl1 将写路由表的请求,转交给所链接的 core 节点,进行写 (即 core1)并同步等待写成功
2.2 core1 收到写请求后,将在所有 core 节点中,执行写事务,
2.3 全部core节点路由写成功后,开始异步复制到所有的 repl 节点,并同时返回写成功
2.4 sub 在repl1 订阅成功
2.5 repl1 和 repl2 收到异步的复制数据,并写入把路由写入本地路由表 - 订阅成功后,repl1 本地写入订阅表
发布过程
- pub1 链接到 repl2 并发起一个 PUBLISH
- repl2 查询本地路由表,并返回存在该订阅关系的节点列表
- repl2 将消息分发给列表中的所有节点
- repl1 收到消息后,查询本地订阅表 ,并返回订阅客户端列表
- repl1 将消息分发给所有的订阅客户端。
其中:路由表保存是主题和节点的映射;订阅表保存是是主题和订阅改主题的客户端列表的映射
那coreA节点下的rep1节点的消息,到coreB节点下rep2的消息的路由是怎样的?
所以,结论是 repl1 上的消息,会根据路由表 会直接投递对应的 repl 节点。