MQ NameServer模块划分

简介: 上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),其中: NameServer做Broker的服务发现,即客户端可以通过NameServer拿到Broker的信息 Broker汇报数据到NameServer NameServer的模块划分 在进行N...

上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),其中:

  1. NameServer做Broker的服务发现,即客户端可以通过NameServer拿到Broker的信息

  2. Broker汇报数据到NameServer

NameServer的模块划分

在进行NameServer的模块划分讨论前,先整理一下NameServer的功能:

  1. 做Broker的服务发现

  2. 提供元数据(Topic、Group等)

  3. 也可以作为Console的操作入口(整个MQ系统是没有DB的,Console可以通过NameServer获取系统信息进行展示)

结合以上提供的功能和之前几篇对系统架构的介绍,NameServer是不需要对数据进行持久化的,因为NameServer的数据都是来自于Broker汇报的。可以认为NameServer是一个无状态的节点。NameServer可以非常方便的做集群部署,高可用之类的,只需要Broker将数据汇报到多个NameServer即可(RocketMQ就是这种架构)。

基于以上的约定(NameServer尽量简单,没有持久化等),对NameServer的模块划分如下。

1. 网络模块

这个不再多说了,属于最基础的公共模块了,Broker、Client、NameServer都会有。

除了基础的网络实现,还有网络相关的就是各个网络请求的处理,比如新建Topic、新建Group等。按照请求来源的维度,NameServer上会包含:

  • ClientPacketHandler

  • BrokerPacketHandler

  • ConsolePacketHandler

  • ...

这些都是网络包的处理入口,可以算到网络模块中。

2. 元数据模块

除去网络模块外,NameServer剩余内容都是对元数据的汇总处理,包含以下组件:

  • TopicManager:Topic元数据的汇总,处理Topic的增删改查

  • GroupManager:Group元数据的汇总,处理Group的增删改查

  • BrokerManager:Broker的管控,进行Broker的上下线及配置变更等

  • PositionManager:汇总位点信息

  • InstanceManager:汇总Consumer和Producer实例

汇总以上内容,NameServer模块如下:

 

以上是基于NameServer的功能限定下讨论的模块。NameServer在MQ中是最简单的一个大模块,也是和消息发送和消费关系最小的模块,所以只有这么多内容。 (NameServer更多在Consumer、Producer初始化的时候会涉及到,一旦运行起来,过程中并不需要进行太多的交互,所以运行过程中脱离了NameServer也是能正常执行消费和发送的)

RocketMQ的NameServer功能上更加简化,不超过1000行代码。

这就是RocketMQ(开源版本)NameServer所有的代码了

结语

本篇主要是把NameServer的组件罗列一下,相对来说比较简单。

下一篇会开始整理MQ系统中的数据流和操作流程,包括消息和元数据在MQ中的流转、元数据的操作、消息的写入、消息的读取等流程。

往期内容:

《什么是分布式消息中间件》

《消息中间件的一些概念》

《业务方对消息中间件的需求》

《消息中间件架构讨论》

《Broker模块划分》

《Client模块划分》

欢迎关注此公众号,将坚持不懈的写MQ相关的技术文章,希望能和更多的朋友交流。 

 

如果本文对您有帮助,点一下右下角的“推荐”
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
4月前
|
消息中间件 Java 应用服务中间件
详解rocketMq通信模块&升级构想(下)
详解rocketMq通信模块&升级构想(下)
422 0
详解rocketMq通信模块&升级构想(下)
|
4月前
|
消息中间件 Java 中间件
详解rocketMq通信模块&升级构想(上)
详解rocketMq通信模块&升级构想(上)
178 0
|
2月前
|
消息中间件 安全 fastjson
消息队列 MQ使用问题之NameServer集群是什么结构
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 数据安全/隐私保护 RocketMQ
消息队列 MQ使用问题之如何设置nameserver监听的IP
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 存储 Java
RocketMQ实战教程之NameServer与BrokerServer
这是一个关于RocketMQ实战教程的概要,主要讨论NameServer和BrokerServer的角色。NameServer负责管理所有BrokerServer,而BrokerServer存储和传输消息。生产者和消费者通过NameServer找到合适的Broker进行交互,不需要直接知道Broker的具体信息。工作流程包括生产者向NameServer查询后发送消息到Broker,以及消费者同样通过NameServer获取消息进行消费。这种设计类似于服务注册中心的概念,便于系统扩展和集群管理。
|
10月前
|
消息中间件 编解码 网络协议
聊聊 RocketMQ 网络通讯模块
RocketMQ 的网络通讯模块负责生产者、消费者与 Broker 之间的网络通信。 笔者学习 RocketMQ 也是从通讯模块源码开始的,并且从源码里汲取了很多营养。
37102 3
聊聊 RocketMQ 网络通讯模块
|
4月前
|
存储 消息中间件 对象存储
RocketMQ 中冷热分离的随机索引模块详解
本文主要介绍了RocketMQ 中冷热分离的随机索引特点、具体内容、与其他系统对比等内容。
102637 6
|
4月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
301 0
|
12月前
|
消息中间件 存储 负载均衡
RocketMQ 源码分析——NameServer
- 编写优雅、高效的代码。RocketMQ作为阿里双十一交易核心链路产品,支撑千万级并发、万亿级数据洪峰。读源码可以积累编写高效、优雅代码的经验。 - 提升微观的架构设计能力,重点在思维和理念。Apache RocketMQ作为Apache顶级项目,它的架构设计是值得大家借鉴的。 - 解决工作中、学习中的各种疑难杂症。在使用RocketMQ过程中遇到消费卡死、卡顿等问题可以通过阅读源码的方式找到问题并给予解决。 - 在BATJ一线互联网公司面试中展现优秀的自己。大厂面试中,尤其是阿里系的公司,你有RocketMQ源码体系化知识,必定是一个很大的加分项。
189 0
|
消息中间件 存储 Java
RocketMQ的NameServer执行流程学习梳理
首先NamesrvStartUp启动,首先经过main()方法,也是我们常见的main方法进入到main0()执行创建controller操作与启动controller操作这两个操作。而创建controller的操作则首先需要拿到namesrvConfig的配置信息和NettyServerConfig的配置信息,此时会 创建这两个对象,并填充配置信息然后放入到创建的controller对象中的构造函数中,并进行controller的启动操作,而启动操作首先会初始化一些信息和添加jvm钩子,也即会进行如下操作:加载键值对配置管理器、创建远程服务器remotingServer,创建远程线程池rem
107 2
RocketMQ的NameServer执行流程学习梳理