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

  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相关的技术文章,希望能和更多的朋友交流。

MQ NameServer模块划分的更多相关文章

  1. Broker模块划分

    本篇在上一篇<消息中间件架构讨论>的基础上分析Broker的模块划分. 上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),几点基础: Broker采用主从结构 Broker负责 ...

  2. 消息中间件Client模块划分

    上图是之间讨论确定的系统架构(后续内容会按照这个架构来叙述),其中: 客户端包含Producer和Consumer两大块 客户端需要和NameServer交互来获取元数据 客户端需要和Broker交互 ...

  3. Android 设计随便说说之简单实践(模块划分)

    上篇随笔随(Android 设计随便说说)便说了一下什么是设计以及设计的原则,这里举一个简单的例子来进一步的说Android设计.我们以应用商店的设计来举例. 在设计之前,需要把握两部分内容,才能使得 ...

  4. C模块划分

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  5. angularJs项目实战!01:模块划分和目录组织

    近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...

  6. 模块划分--MVVM指南(课程学习)

    实现流水化开发,需要使用“模块划分”的程序开发方式.如此,团队里的每个人负责某项\某几项特定的技术领域,在特定的技术领域更加专业.这样,每个人的效率更高.在专业的技能更熟练,更深入,也会提高队员的成就 ...

  7. FPGA常用设计思想与基本模块划分

    常用设计思想与技巧 (1)乒乓操作; (2)串并转换; (3)流水线操作; (4)异步时钟域数据同步.是指如何在两个时钟不同步的数据域之间可靠地进行数据交换的问题.数据时钟域不同步主要有两种情况: ① ...

  8. Ionic2实战——按模块划分app 创建多module

    http://www.jianshu.com/p/d94324b722af 背景 用ionic2开发过一两个小功能的朋友都会发现,每新建一个页面都需要在\src\app\app.module.ts中添 ...

  9. 用c写的简单的日历(学习模块划分)

    简单日历 ​ 主要目的是学习函数模块划分,成品大概是这样,加了一些花里胡哨的东西(/▽\) ​ 分三个模块,主函数.c 显示.c 计算.c 与.h 文件 有两种实现方式,区别在于是否以数组在模块之间传 ...

随机推荐

  1. cocos2dx3.2移植android

    LOCAL_PATH := $(call my-dir)LOCAL_MYDIR = $(LOCAL_PATH)/../../Classesinclude $(CLEAR_VARS) $(call im ...

  2. 阿里云Https部署网站

    0.开始之前 文章图片很多,注意流量 首先你得准备好一个已经备案成功的域名,并且有一个在阿里云的服务器部署了的网站. 然后就是你迫切的希望升级网站为HTTPS部署. 那么我们开始吧! 1.申请CA证书 ...

  3. Python学习一

    安装时遇到的问题 安装anaconda3.0到D盘之后,配置好两个环境变量:D:\anaconda和D:\anaconda\Scripts.发现在命令行中执行python指令可以,但conda指令却是 ...

  4. 【ElementUI】日期选择器时间选择范围限制

    ElementUI是饿了么推出的一套基于vue2.x的一个ui框架.官方文档也很详细,这里做一个element-ui日期插件的补充. 官方文档中使用picker-options属性来限制可选择的日期, ...

  5. Java开发步骤

    3.编辑Java源程序 使用纯文本编辑器,比如记事本notpad.exe:EditPlus.UltraEdit等专业的纯文本编辑器. Word不是纯文本编辑器. 需求:写一个Java程序,在控制台打印 ...

  6. 使用python

    最近看视频学习,老师布置了个作业,关于如何使用python将多个excel进行合并,老师写的代码我感觉比较复杂,下面是我自己改良之后较简单的方式. 实现这个功能主要有两种方法,一种是用xlwd,xls ...

  7. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  8. CCF-201512-1-数位之和

    问题描述 试题编号: 201512-1 试题名称: 数位之和 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个十进制整数n,输出n的各位数字之和. 输入格式 输入一个整 ...

  9. mysql最佳优化经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  10. Linux压力测试软件Stress安装及使用指南

      一.Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户. 二.安装 将stress的安装包上传并解压到linux服务 ...