|关于消息中间件,看完这篇介绍你会更懂

文章图片

文章图片

文章图片

文章图片
一、什么是消息中间件
消息中间件是一套平台 , 用于应用之间的数据通信 。 举个例子:淘宝网的用户注册 , 在注册的同时需要有一系列的操作 , 如下图:
同时 , 伴随着业务的扩展 , 后端流程还会增加 。 如果在注册时要顺序的完成每一步操作 , 整个流程会耗费很多的时间 , 从而使得用户等待延迟增加 。 最容易想到的处理方法是将串行改为并行处理 , 如下图:
并行虽然能提速 , 但是由于各个流程之间有同步要求 , 如果某个流程耗时过长 , 就会导致整体的等待时间过长 。 考虑具体的业务 , 用户注册这个操作只和注册是否成功有及时一致性要求 , 其他流程都允许有延迟 , 所以可以将用户注册分为两部分完成 , 分别是主流程和消息推送流程 。 主流程只负责用户注册 , 给出及时性响应 , 如下图:
而消息推送流程 , 则是将用户注册消息提交给消息中间件 , 由消息中间件推送给各个需要该消息的业务流程 , 延迟处理 , 如下图:
消息中间件的作用就是用于将某一消息推送给各个需要的业务流程 , 它相当于一个投递员 , 当收到消息之后 , 传递给多个需要这条消息的第三方 。
二、消息中间件的两种模式
2.1生产者消费者模式:点对点(Queue) , 不可重复
生产者将消息放入队列中 ,多个消费者同时监听队列 , 谁先抢到消息就取走消息 , 每条消息最多只能被一个消费者拥有 。
2.2发布者订阅者模式:点对多点(Topic)
发布者将消息发布到队列中 , 多个监听队列的消费者都会收到一份消息 。 每一份消息都会推送给它的所有订阅者 。
三、消息中间件的几个特点
消息中间件有几个特点 , 分别是
- 分布式:消息中间件要求分布式部署 , 满足大规模数据并发能力 , 同时要求可扩展
- 可靠性:可靠 , 数据一致性要求高 , 要求避免数据丢失 , 提供持久化 , 落盘和落数据库都可选
- 异步:借用消息中间件将消息处理从同步拆解为异步 , 提高系统性能
- 松耦合:消息发布者和订阅者之间完全解耦 , 两者互不知道对方的存在 , 借助于中间件实现松耦合
- 事件驱动:通过消息队列 , 将事件拆分为若干个消息 , 同时能追溯整个变化过程
4.1消息生产者将消息发送到消息中间件
消息中间件提供数据接收接口 , 可以使用TCP和Http两种协议方式 , 一般内网长连接使用TCP , 保障速度和效率 。 公网使用Http , 用于跨防火墙
4.2消息中间件接收消息 , 并将消息转发给订阅者队列
由于消息中间件稳定性要求 , 消息接收后一般要做持久化 , 一般是落盘 , 也可以选择落数据库
4.3消息订阅者处理消息队列
处理消息队列时 , 可以由消息中间件推送给订阅者 , 也可以由订阅者拉取 。
消息处理的级别有不同 , 主要有三种 , 分别是:最多处理一次、至少处理一次、准确的仅处理一次 。 其中:
- 最多处理一次:消息仅消费一次 , 无论消息是否已经消费成功 , 都不再发送 。 此时可能遇到数据丢失的问题 , 尽管消息中间件已经将消息发送给了消费者 , 但是并没有能成功得到消费 。
- 至少处理一次:消息消费者若没有返回有效值 , 消息中间件将再次推送消息给消费者 , 保证消息得到处理 。 此时可能会造成重复现象 。
- 精确的仅处理一次 , 消息中间件得到有效返回值之后进行剩余操作 , 此时要求仅处理一次 , 若返回值为失败 , 将再次推送 , 若返回值成功 , 则消息移出队列 。 这种方式对机器性能消耗较高 。
消息中间件主要有以下一些主要的应用场景 , 分别如下:
5.1业务解耦
由于系统业务流程较多 , 如果一次操作所有的流程 , 耗时较长 。 通过消息中间件平台 , 将消息发送给各个消费者 , 使得各个消费者仅需要处理自己的业务逻辑 , 而不需要等待其他消费者的状态 , 从而实现消息的异步处理 , 提高系统对消息的处理性能 。
5.2削峰填谷
一般来说 , 消息中间件相当于一个消息缓冲池 。 当上游的系统吞吐量高于下游第三方消费者的吞吐量的时候 , 如果直接推送给第三方 , 会使得第三方由于来不及处理 , 使得系统崩溃 。 如果采用消息中间件 , 上游的峰值数据可以在消息中间件平台得到缓冲 , 而第三方则按照自身的消费能力去处理消息队列 , 达到均衡峰谷数据量的作用 。
5.3广播通知
系统中一个状态 , 需要通知多个第三方 , 借用消息中间件平台 , 实现高效、高可用的系统广播 。
5.4 日志分析
日志分析是大规模分布式系统不可避免的一个环节 , 用于快速定位系统问题 , 高效运维 , 实现高可靠的系统 。 一般来说 , 日志分布在若干台机器上 , 借助于消息中间件 , 收集多台机器上的日志数据 , 统一到日志分析平台作处理 。
六、常见的消息中间件产品
Notify:淘宝之前使用的消息中间件系统 , 使用MySQL作为落地媒介 , 可完全水平扩展
Kafka:Apache基金会支持的开源项目 , 实现高效的持久化 , 常用于日志系统
RocketMQ:淘宝开源的一个消息中间件 , 原本是借鉴了kafka的思路实现的中间件 , 原名称为MetaQ , 后来开源捐献给Apache基金会 , 改名为RocketMQ 。
其他的 , 包括JMS、ActiveMQ、ZeroMQ等等 , 有兴趣自己看吧 。 重点推荐RocketMQ 。
作者|Maxwell_7|CSDN七、面试专题
获取方式:关注 , 私信“666”即可
【|关于消息中间件,看完这篇介绍你会更懂】
推荐阅读
- 百度|AI公司百度能给港交所带来什么?
- 杨振宁|清华辟谣杨振宁去世消息
- 新冠疫苗|好消息!我国又一个新冠疫苗获批紧急使用
- 地球|发生了什么?日美专家透露不好消息,地球或不再适合人类居住
- 辣椒|关于信仰、哲学与科学的迷思|東西堂主
- 高血脂|聚焦2021CROI大会,发布多项关于日常服药引发血脂问题的研究
- 新冠疫苗|这些关于新冠疫苗的健康知识,建议收藏!
- 糖尿病|糖吃多了就会得糖尿病?关于糖尿病的疑惑,这篇文章一次性解答!
- 低血糖|关于低血糖的那些事儿
- 疫苗接种|重磅!关于疫苗接种,天津最新消息来了!
