10 MQ路由中心的架构原理

1.上节回顾

在上小节的场景中,知道了RocketMQ是可以将消息进行分发,采取主从架构+集群部署可以达到高可用、高并发的目的。另外,就是每个MQ进程也就是Broker都将自己注册到了NameServer上,而生产者、消费者都是从NameServer去获取路由信息来决定写入、读取哪个Broker。

2.新的问题

  • 生产者是以什么方式去NameServer拉取路由信息?
  • 生产者怎么和broker建立连接和发送消息的?
  • 消费者怎么拿到Broker里的消息的?通过什么方式连接?

3. NameServer的高可用

NameServer是一个关键的角色,在MQ集群中负责管理每个Broker的注册信息,无论生产者还是消费者只有通过NameServer才能知道要访问哪个Broker。一旦NameServer挂掉,那么就会导致整个集群故障。

所以,这里可以确定的是,NameServer是一定会部署多机器部署,实现一个集群,起到高可用的效果。一旦其中的一台或机台宕机,其他的Broker依旧能通过幸存的NameServer提供服务。

4.Broker服务注册

前面提到NameServer是可以高可用的,也就是说,集群部署的NameServer如果其中某个宕机不会影响所有Broker对外提供服务。

也就意味着如果当前有5个master和5个slave的Broker,master注册到第一个NameServer,slave注册到另一个NameServer这种场景是不成立的。因为一旦有一个NameServer宕机,那么久会丢失一般的注册信息。

总结:每个Broker启动都得向所有的NameServer进行注册。

5.系统如何从NameServer获取注册信息

按照上图所示,NameServer只有Broker的注册信息,而系统对NameServer是不可知,它不可能知道系统要调用哪个Broker。所以,系统是主动从NameServer去pull拉取注册信息的。

从NameServer拉取的信息被称之为路由信息。通过这些路由信息,每个系统就知道发送消息或获取消息去哪台Broker上去进行了。

6.心跳保活机制

(1)发起心跳

Broker通过每隔30s发送心跳包的机制来告诉NameServer自己还活着

(2)更新心跳时间

每次NameServer收到某个Broker心跳后,都会更新最近一次该Broker的心跳时间记录

(3)定时扫描心跳

NameServer每隔10s会启动一个任务,检查各个Broker最近一次的心跳时间

(4)120s时间

当NameServer发现某个Broker超过120s没发送心跳了,就认为这个Broker已经挂掉了

7.客户端容错机制

producer当要发送过去的broker宕机了后,我们可以通过broker的slave副本节点来接受数据或者等producer拉取最新的broker信息。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值