推荐阅读:
前言
今天我们就来聊一聊具体如何来设计一套高可用的生产部署架构。
在聊如何设计这套架构的同时,我们再补充一些之前没提到的知识。好了,那我们现在开始吧。
NameServer的部署
关于NameServer,我们之前的文章已经详细讲解过了集群化的内容,这里直接把它部署到三台机器上,作为一个高可用集群
Broker的部署
Broker的部署我们之前也有讲到过,主要使用的是4.5版本后的Dledger自动化切换主从的集群
Broker与NameServer之间的通信协议是什么呢?http、rpc还是tcp呢?
其实它们之间采用的是TCP长连接通信,也就是说Broker会跟每个NameServer建立TCP长连接,然后定时通过TCP长连接发送心跳请求过去。
访问MQ的系统(生产者和消费者)的部署
一定会有大量的系统访问RocketMQ,因为RocketMQ就是为此而生的,有些系统自己本身既是生产者又是消费者,所以这些系统的部署也要考虑进去。
对这些系统部署的考虑,其实不应该是搞MQ的部门来考虑的,如果系统本身是自己公司的,可以提出一些建议,让生产者和消费者都集群化部署,保证高可用。但如果是第三方系统,那就无法插手了,我们能做到的只有考虑第三方系统崩溃,无法与MQ正常通信的情况下,如何让MQ正常运转。
Topic是什么
Topic是mq的核心数据模型,如果直接翻译是主题的意思,但是听到主题的解释,是不是一脸懵逼,是不是瞬间想到的是手机主题,电脑主题。
所以它不能直译,它表达的就是一个数据集合的含义,集合的是同一类的数据,不同类型的数据存到不同的Topic中。
所以系统无论是要写入消息还是读取数据,最开始都是要先定义Topic的,然后再从定义的Topic中获取同类型的数据。
那么Topic是如何在Broker中存储的呢?
存储的方式其实就是分布式存储。我们在定义Topic的时候指定它里面的数据分布到多台的Broker上进行存储,这里要注意的一点是,实际上分布的对象是MasterBroker,SlaveBroker会向MasterBroker拉取数据,作为一个副本存在。而Broker在向NameServer发送心跳的时候,会把Topic存储在哪些Broker中的信息告诉NameServer。
生产者如何发送消息给Broker
前边我们聊过,发送消息前首先是定义Topic,然后发送消息的时候是要指定你要发送到哪个Topic中去的。
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
mg-ggdvHOl8-1628237220750)]
[外链图片转存中…(img-Fw4td5vK-1628237220751)]
以上所有文档已经打包好,只需要动动手指点击【转发+关注】,然后点击即可免费获取!