写点什么

2021 年冲刺年薪 40w,Java 从基础到高级知识点汇总

发布于: 21 小时前

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 中去的。


既然我们知道了要发送到哪个 Topic 中,下一步就是要定位 Topic 的位置,如何定位呢?就是与 NameServer 建立 Tcp 长连接,定时拉取注册信息,可以获取到这个 Topic 目前被分配到哪些 Broker 中。然后就可以根据负载均衡算法,选定一台 Broker(具体的负载均衡算法后边文章再介绍)。


选定了 Broker 后,就可以再与 Broker 建立 Tcp 长连接,通过 Tcp 长连接发送消息给 Broker 中的 Topic。


而 Broker 在接收到消息后,就会把消息存储到磁盘中,再往后就是 SlaveBroker 与 MasterBroker 数据同步,形成副本,保证高可用了。


整个过程就是这样的。

消费者如何从 Broker 上消费消息

说完了生产者发送消息的过程,我们再来聊聊消费者消费消息的过程。


其实消费者消费消息的过程和生产者是类似的,同样第一步也是定义 Topic,然后从 NameServer 获取信息,定位到 Topic 所在的多个 Broker,之后负载均衡定位到要访问的 Broker,与 Broker 建立连接获取消息。


这里唯一不同的就是,再获取消息的时候是可能在 MasterBroker 上获取的,也可能在 SlaveBroker 上获取,要依据当时的情况而定。

整体架构总结

最后我们再来看一看这套架构,是可以实现完全的高可用的。


NameServer 集群化部署,Broker 集群化部署,还可以通过 Dledger 自动化切换主从,生产者消费者也是集群部署,随便挂了一台不受影响。


而且这套架构也不怕高并发,高并发下的消息可以分布到多个 Broker 下处理,减少系统压力。


然后我们的集群可以存储海量的消息,因为存储方式是分布式存储的。


最后,这套架构是具有可扩展性的,如果业务需求并发量增大,也是可以扩展 Broker 的数量以支持更高的并发和更大的存储的。


这样我们的 RocketMQ 的生产部署架构就算完成了。


好了,今天就说到这里,欢迎小伙伴们一起走入消息中间件的世界。

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。


为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的


开源分享:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】


并且我也将自己刷的题全部整理成了 PDF 或者 Word 文档(含详细答案解析)



66 个 Java 面试知识点


架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)



算法刷题(PDF)



评论

发布
暂无评论
2021年冲刺年薪40w,Java从基础到高级知识点汇总