10 MQ路由中心的架构原理

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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信息。

以上是关于10 MQ路由中心的架构原理的主要内容,如果未能解决你的问题,请参考以下文章

dubbo 的注册中心挂了可以继续通信吗?

dubbo 的工作原理?注册中心挂了可以通信吗? rpc 请求的流程是怎样的?dubbo 支持哪些通信协议以及序列化协议?

服务注册中心设计原理与Golang实现

服务注册发现之服务注册中心设计原理与Golang实现

猜测的rpc负载均衡原理,基于dubbo的架构

Dubbo 源码分析系列之三 —— 架构原理