RocketMQ - RocketMQ的架构原理和使用方法

1. MQ如何集群化部署来支撑高并发访问

假设RocketMQ部署在一台机器上,即使这台机器的配置很高,但是一般来说一台机器也就支撑10万+的并发访问。
在这里插入图片描述
这个时候,假设有大量的系统都要往RocketMQ里高并发的额写入消息,可能达到每秒有几十万的请求,这样单机的RocketMQ是支撑不了的。

没关系,RocketMQ是可以集群化部署的,可以部署在多台机器上,假设每台机器能抗10万并发请求,然后你只要让几十万请求分散到多台机器上就可以了,让每台机器承受的QPS不超过10万就可以了。
在这里插入图片描述

2. MQ如果要存储海量消息应该怎么做?

MQ会收到大量的消息,这些消息并不是立马就会被所有的消费方获取过去消费的,所以一般MQ都得把消息在自己本地磁盘存储起来,然后等待消费方获取消息去处理。

既然如此,MQ就得存储大量的消息,可能是几百万条,可能是几亿条,甚至是万亿条,这么多的消息在一台机器上肯定是没有办法存储的,那么RocketMQ是如何分布式存储海量消息的呢?

延续上面的图,其实发送消息到MQ的系统会把消息分散发送给多台不同的机器,假设共一万条消息,分散发送给10台机器,可能每台机器就接收1000条消息。

其次,每台机器上部署的RocketMQ进程一般称之为broker,每个broker都会收到不同的消息,然后就会把这批消息存储在自己本地的磁盘文件里。这样的话,假设你有1亿条消息,然后有10台机器部署了RocketMQ的broker,理论上不就可以让每台机器存储1000万条消息了吗?
在这里插入图片描述
所以本质上RocketMQ存储海量消息的机制就是分布式的存储,所谓分布式存储,就是把数据分散在多台机器上来存储,每台机器存储一部分消息,这样多台机器加起来就可以存储海量消息了。

3. 高可用保障,万一Broker宕机了怎么办

要是任何一台Broker突然宕机了怎么办?是不是RocketMQ的一部分消息就丢失了?

其实RocketMQ可以通过Broker主从架构以及多副本策略来保证可用性;简单来说,Broker是有Master和Slave两种角色的。
在这里插入图片描述
Master Broker收到消息之后会同步给Slave Broker,这样Slave Broker上就有一模一样的额一份副本数据。这样同一条消息在RocketMQ整个集群里不就有两个副本了,一个是在Master Brocker中,一个是在Slave Broker中。

整个时候,如果任何一个Master Broker出现故障,还有一个Slave Broker上有一份数据副本,可以保证数据不丢失,还能继续对外提供服务,保证了MQ的可靠性和高可用性。

4. 数据路由,怎么知道访问哪个Broker?

对于系统来说,要发送消息到MQ里去,还要从MQ里消费消息,那么怎么知道有哪些Broker?怎么知道要连接到哪一台Broker上去发送和接收消息?
在这里插入图片描述
RockerMQ为了解决这个问题,有一个NameServer的概念,他也是独立部署在几台机器上的,然后所有Broker都会把自己注册到NameServer上去,NameServer就知道集群里有哪些Broker了。

然后对于业务系统而言,如果要发送消息到Broker,会找NameServer去获取路由信息,就是集群里有哪些Broker等信息,如果系统要从Broker获取信息,也会找NameServer获取路由,去找到对应的Broker获取消息。
在这里插入图片描述

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值