首页IT科技分布式计算技术(《分布式技术原理与算法解析》学习笔记Day19)

分布式计算技术(《分布式技术原理与算法解析》学习笔记Day19)

时间2025-05-01 06:01:38分类IT科技浏览3845
导读:分布式通信:消息队列 什么是消息队列?...

分布式通信:消息队列

什么是消息队列?

队列是一种具有先进先出特点的数据结构            ,消息队列是基于队列实现的            、存储具有特定格式的消息数据            。消息以特定格式放入这个队列的尾部后直接返回                  ,不需要系统马上处理      ,之后有其他进程从队列头部开始读取消息            ,按照消息放入顺序逐一处理                  。

引入消息队列的好处是可以提升响应速度                  ,实现组件之间的解耦      。

消息队列的工作原理

消息队列模式包括3个核心部分:

生产者      ,产生消息或者数据      ,并将其插入到消息队列中            。 消息队列                  ,一种具有先进先出特点的数据结构            ,用来存储消息                  。 消费者      ,从消息队列中获取消息                  ,进行相关处理      。

生产者将发送的消息插入到消息队列            ,称为入队,消费者从消息队列中按照顺序取出消息进行处理                  ,称为出队      。

RocketMQ工作原理

RocketMQ的架构图如下所示                  。

RocketMQ架构包括4部分:

NameServer Cluster                  ,它和Kafka中的ZooKeeper类似,提供分布式服务的协同和管理功能            ,主要是和Broker相关的信息                  ,包括有哪些Broker                  、Broker地址和状态等      ,以方便生产者基于它来发布消息            ,消费者基于它来获取消息            。 Producer Cluster                  ,负责接收用户数据      ,然后将数据发布到消息队列Broker Cluster      。一般采用集群方式部署      ,这样可以1)多个Producer并发接收用户输入数据                  ,提升系统效率            ,2)增加可靠性                  。 Consumer Cluster      ,负责从Broker中获取消息进行消费            。一般也是采用集群方式部署                  ,这样可以提升消费者的消费能力            ,避免消息溢出或者丢弃。 Broker Cluster,负责存储Producer Cluster发布的消息                  ,并供消费者消费                  。Broker Cluster中的每个Broker都进行了主从设计                  ,即每个Broker分为Broker Master和Broker Slave,Master既可以写也可以读            ,Slave不可以写只可以读                  ,Broker Master会把接收到的消息同步给Broker Slave      ,以实现数据备份            ,一旦Broker Master崩溃                  ,可以切换到Broker Slave继续提供服务      ,这样就提高了系统可靠性                  。

在Broker Cluster中      ,消息的存储采用主题(Topic)+ 消息队列(Queue)的方式实现。

RocketMQ中的主题是一个逻辑概念                  ,一个主题可以分区            ,分布在不同的Broker上      ,每个Broker只有该主题的部分数据            。每个主题分区中                  ,队列的数量可以不同            ,由用户在创建主题时指定                  。队列是资源分配的基本单元,消息进行存储时会存放到相应主题的分区中      。

RocketMQ的工作流程如下:

首先启动NameServer                  ,然后启动Broker            。Broker启动后                  ,会主动找NameServer建立连接,并将自己的信息注册到NameServer上                  。注册完毕后            ,Broker会定期给NameServer发送心跳包                  ,心跳包中除了状态信息外      ,还可以包括Broker当前存储的数据信息      。 创建主题            ,并确定这个主题的数据存储到哪些Broker上      。 当Producer生产消息发送到主题时                  ,需要先到NameServer查询该主题存放在哪些Broker中      ,获取到Broker信息后      ,将消息发送给这些Broker进行存储                  。 Consumer要从主题消费消息                  ,也需要首先到NameServer查询一下该主题的消息存储在哪些Broker上            ,然后去相应的Broker获取消息进行消费            。

消息队列模式是根据消费者需求到消息队列获取数据进行消费的      ,消费者只需要知道消息队列地址                  ,消息队列中心无需提前知道消费者信息      。因此            ,消息队列模式比较适合消费者为临时用户的场景                  。

发布订阅模式和消息队列模式的区别

首先,从实现解耦的数据结构看:

发布订阅模式采用了消息中心                  ,消息队列模式采用了消息队列                  ,它们都是用来存储生产者发布的数据,都有Topic      、Broker等概念            。 发布订阅采用map或者数组等方式存储数据            ,消息队列采用队列结构来存储数据。

其次                  ,从实现解耦方式来看:

消息队列模式中      ,生产者发布数据到消息队列中心            ,消息队列中心会存储数据                  ,等待消费者按需获取数据      ,这样生产者就不需要和消费者进行直接通信      ,实现了生产者和消费者的解耦                  。 发布订阅模式中                  ,消费者需要提前向消息中心订阅自己感兴趣的数据            ,当生产者发布数据到消息中心后      ,消息中心根据订阅者订阅信息讲数据主动推送给消费者                  ,实现了生产者和消费者的解耦                  。

消息队列中的消息            ,可以被设置只消费一次            、至少消费一次或者最多消费一次。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
前端包含哪三个部分(〖大前端 – 基础入门三大核心之CSS篇㉒〗- 过渡属性的基本使用) 验证码诈骗是怎么把钱骗走的(【验证码逆向专栏】安某客滑块逆向)