NATS Gateway的设计目的是解决跨地域集群连接中的两个核心问题:减少跨集群连接数量和优化跨地域数据传输。
与集群内部使用的-route
参数(通常使用4222端口)不同,跨集群连接使用专门的-gateway
参数。
各集群保持内部状态一致性,Gateway只负责同步subject和订阅信息,不参与集群内部协议。
每个集群必须至少有一个节点配置gateway,才能建立多集群同步网络。
NATS提供了三种网络拓扑机制,适用于不同场景:
组件 | 用途 | 连接对象 | 状态共享 | 典型场景 |
---|---|---|---|---|
Cluster | 同一集群内节点连接 | 集群内节点 | 完全共享 | 单数据中心扩展 |
LeafNode | 边缘设备连接到中心集群 | 边缘节点到中心集群 | 不共享 | IoT、边缘计算 |
Gateway | 不同集群之间的连接 | 跨集群节点 | 选择性同步 | 多数据中心、全球部署 |
vpc互联:
- 腾讯云:云联网
- 阿里云:对等网络
- 云服务器一般有内网ip和外网ip,vpc互联的作用就是让两个跨地域机房,比如上海和北京,可以直接通过内网ip通信。
nats启用gateway模式时,advertised地址和gateway地址需要保持一致,否则会出问题。
gateway {
name: "A"
listen: "localhost:7222"
authorization {
user: gwu
password: gwp
}
gateways: [
{name: "A", url: "nats://gwu:gwp@localhost:7222"},
{name: "B", url: "nats://gwu:gwp@localhost:7333"},
{name: "C", url: "nats://gwu:gwp@localhost:7444"},
]
}
nats客户端多集群管理
使用了类似kubectl config context的概念。
列出所有的context: nats context ls
添加context: nats context save shanghai –server ip和端口 –creds 认证文件路径
切换集群:nats context select shanghai
地理感知队列订阅(Geo Aware Queue Subscribes)
仅限queue队列订阅模式
同一消息队列,如果我客户端往北京的集群发的时候,系统如果在北京的集群有订阅这个队列的客户端,那么他的所有消息都会发送到北京这个客户端。
我上海的客户端推的消息,如果在我上海的集群里有订阅的客户端的话,那我所有消息也会推到上海这个消费端来消费。
但是如果出现异常,比如说我北京的这个订阅的这个客户端失效了,那么他就会把这个消息路由到上海的这个客户端来进行消费。
这个就是所谓的这个地理位置感知的能力。
集群原理
在单个集群内,nats的消息,节点和节点之间,它是怎么处理的。
- 我们把nats集群部署好之后,我们看到nats各个节点,每个节点和节点之间,它都建立了一个router的这个连接
- 就是相当于如果我有4个节点,那么他会建立6个连接,保证节点和节点之间,都是能够直接互通的。
- 我的客户端连接到任何一个节点上,之后如果我推消息,那消息到了这个节点之后,会通过router路由到和他相邻的所有节点。
- 那如果在对应节点上,有订阅的客户端的话,他会推到客户端去。如果没有订阅客户端,他就直接丢弃了。
使用命令行建立三节点集群,注意这里B和C节点,只配了一个route连接,生产环境建议将除了自己之外的其他节点都配上:
|
|
跨地域集群,它是怎么处理的:
- 集群之间,要保证每个节点都有到其他集群的一个gateway的连接,有一个就可以。这样就可以保证集群间消息的互通。
- 如果是3个集群,每个集群都会有6个inbound和6个outbound;如果是2个集群,每个集群都会有3个inbound和3个outbound。
- 假设一条消息在A集群里,被客户端推到A1节点,他是怎么样把消息投递到在这个c集群里订阅的客户端的。
- 跨集群,它是通过和A1节点相连的gateway,将消息推送到B和C这两个集群里。
- 之后到了B集群和C集群,普通消息又在集群内分发到其他节点。
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。