你懂RocketMQ 的架构原理吗?
前言
前面我们跟大家聊了聊什么是消息中间件,以及哪些场景使用哪些消息中间件更加合适。
我们了解到RocketMQ是java语言开发的,我们能更深入的阅读源码了解它的底层原理,而且它具有优秀的消息中间件高级功能。再换个角度想,对于面试MQ来说,其实我们需要深入的了解一个中间件来与面试官聊,其他的中间件了解基本原理就可以了(后文会讲解)。
所以接下来我们就以RocketMQ为敲门砖,一点一点了解MQ的奥秘。
今天我们来聊一聊RocketMQ 的架构原理
RocketMQ是如何承受高并发的呢?
先聊一聊RocketMQ是怎么实现高并发的呢,我们先从它的单机模式说起。
之前我们说过,单机的RocketMQ可以承受十万多的并发,那么这个时候如果业务上突然出现了几十万的并发量,这时候如何处理呢。
没关系,RocketMQ是支持集群化部署的,部署多台机器,每台机器承受十万的并发不就可以了吗。
其实这就是RocketMQ承受高并发的原理,当然,关于它是如何将流量分配到集群的每台机器上,这个问题以后会单独讲解,今天主要聊一聊总体的架构原理。
RocketMQ是如何存储大量消息数据的呢?
现在我们来看看,RocketMQ是如何持久化数据的。MQ收到大量消息后,这些消息是不能实时消费掉的,所以就会存在消息的积压,同时为了保证消息不丢失,所以持久化是很必要的。
而对于海量的消息,单独一台机器是存储不下的。退一步来讲,就算能够存储的下,一旦这台机器坏掉,数据就丢失了,无法保证消息的可靠性。
其实对于消息数据的持久化,和高并发的解决方案是类似的,看下图:
假设一共有一万条消息要发送给MQ,分散到10台机器,可能每台机器就会收到1000条左右的消息,这时候MQ会把发送到自己机器的消息保存到自己的磁盘里,其实就是数据的分布式存储。
所谓分布式存储就是把数据分散到多台机器存储,可以通过扩展机器存储海量数据。
如果RocketMQ挂掉了怎么办?
在讨论这个问题之前,我们先引入一个新的概念,Broker。

Master Broker收到消息后会同步给Slave Broker,这样Slave Broker就有了一份副本数据,
这样,当RocketMQ挂掉了一个Broker,还有一份副本Broker可以继续提供服务,这就保证了系统的高可用性。

对于系统而言(无论是生产者还是消费者),要调用MQ服务,首先会去NameServer中获取路由信息,也会知道系统中有哪些Broker正在提供服务,从而确定自己应该访问哪台机器上的Broker。
RoketMQ的基本架构原理就是这样了,当然这只是个总体的架构,很多细节的东西都可以去深入探索,欢迎小伙伴们关注后续的文章,和HUC王子一起细嚼慢咽,探索消息中间件的乐趣吧。
往期文章推荐:
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2dl7u9oadykgw
你懂RocketMQ 的架构原理吗?的更多相关文章
- RocketMQ(1)-架构原理
RocketMQ(1)-架构原理 RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现:集群和HA实现相对简单:在发生宕机和其它故障时消息丢失率更低. ...
- RocketMQ(1)---架构原理及环境搭建
一.架构简述 RocketMQ阿里开源的一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性, 万亿级容量和灵活的可伸缩性.跟其它中间件相比,RocketMQ的特点是纯JAVA实现,在发生宕机和 ...
- RocketMQ架构原理解析(四):消息生产端(Producer)
RocketMQ架构原理解析(一):整体架构 RocketMQ架构原理解析(二):消息存储(CommitLog) RocketMQ架构原理解析(三):消息索引(ConsumeQueue & I ...
- RocketMQ架构原理解析(一):整体架构
RocketMQ架构原理解析(一):整体架构 RocketMQ架构原理解析(二):消息存储(CommitLog) RocketMQ架构原理解析(三):消息索引(ConsumeQueue & I ...
- 一张图进阶 RocketMQ - 整体架构
前 言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片链接,关于 RocketMQ 你只需要记住这张图!如果你第一次看到这个系列,墙裂建议你打开链接.觉得不错的话,记得点 ...
- NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)
NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...
- 简单理解Hadoop架构原理
一.前奏 Hadoop是目前大数据领域最主流的一套技术体系,包含了多种技术. 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 有些朋友可能 ...
- Hbase的架构原理、核心概念
Hbase的架构原理.核心概念 1.Hbase的表.行.列.列族 2.核心组件: Table和region Table在行的方向上分割为多个HRegion, 一个region由[startkey,en ...
- [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密
本课主题 BlockManager 运行實例 BlockManager 原理流程图 BlockManager 源码解析 引言 BlockManager 是管理整个Spark运行时的数据读写的,当然也包 ...
随机推荐
- layer.js : n.on is not a function
当时使用的jQuery为1.4.x的版本.换成高版本就好了. 参考 https://blog.csdn.net/marswill/article/details/69316003
- 【PA2014】Bohater 题解(贪心)
前言:一道经典贪心题. -------------------------- 题目链接 题目大意:你有$z$滴血,要打$n$只怪.打第$i$只怪扣$d_i$滴血,回$a_i$滴血.问是否存在一种能够通 ...
- 《JAVA并发编程的艺术》学习笔记
第一章:并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制.时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通 ...
- 深度学习论文翻译解析(十二):Fast R-CNN
论文标题:Fast R-CNN 论文作者:Ross Girshick 论文地址:https://www.cv-foundation.org/openaccess/content_iccv_2015/p ...
- 002_centos7关闭防火墙
防火墙是比较烦人的,在自己做实验,或者实际应用中,如果配置不好的话,会出现各种匪夷所思的问题,那么如何关闭呢 在centos7里,防火墙改为了firewalld进程 首先用命令firewall-cmd ...
- “随手记”开发记录day12
就我们团队昨天的讨论,今天进行更改. 今天我们先简单的更改了之前的粉色背景图,因为用户反应总览界面的“总览”二字,是深粉色背景不太美观.进过多次更改之后使颜色变得更舒适.
- 100例Python代码带你从入门到进阶!
以下所有代码全都至少运行一遍,确保可复现.易于理解.逐步完成入门到进阶的学习. 此教程经过我 反复打磨多遍 ,经常为此熬夜,真心不易,文章比较长,看完有用,帮我点个在看或分享支持. 教程包括 62 个 ...
- Java基础高级篇 NIO
nio模型与io模型的对比 netty 是什么 怎么使用
- Vue3 为何使用 Proxy 实现数据监听
博客地址:https://ainyi.com/93 vue3 响应式数据放弃了 Object.defineProperty,而使用Proxy来代替它 我们知道,在 vue2 中,实现数据监听是使用Ob ...
- 2020重新出发,JAVA学前了解,Windosws常用快捷键
前言:windows 常用快捷键 标准计算机键盘共104键,除了26个字母键.符号键.数字键外,剩下的都是一些功能键: 键盘功能键 常用功能键:Esc.Tab.Caps Lock.Shift.Ctrl ...