消息中间件 MQ
2023-06-12 07:41:06 15 举报
AI智能生成
消息中间件 MQ
作者其他创作
大纲/内容
概念
Wiki: 面向消息的系统(消息中间件)是在分布式系统中完成消息的发送 和接收的基础软件
自定义消息中间件
生产者消费者模式
MQ的应用场景
异步处理
场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式
应用解耦
场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口
流量削峰
场景:` 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。
消息通讯
日志处理
日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题
主流消息中间件及选型
选型原则
开源
开源意味着如果队列使用中遇到bug,可以很快修改,而不用等待开发者的更新
产品近几年比较流行,且要有活跃的社区
消息传输的可靠性:保证消息不会丢失
支持集群,包括横向扩展,单点故障都可以解决
性能要好,要能够满足业务的性能需求
RabbitMQ
简介
RabbitMQ开始是用在电信业务的可靠通信的,也是少有的几款支持AMQP协议的产品之一。
优点
轻量级,快速,部署使用方便
支持灵活的路由配置
RabbitMQ中,在生产者和队列之间有一个交换器模块。根据配置的路由规则,生产者发送的消息可以发送到不同的队列中。路由规则很灵活,还可以自己实现。
RabbitMQ的客户端支持大多数的编程语言。
缺点
大量消息堆积在队列中,性能会急剧下降
RabbitMQ的性能在Kafka和RocketMQ中是最差的,每秒处理几万到几十万的消息。如果应用要求高的性能,不要选择RabbitMQ。
RabbitMQ是Erlang开发的,功能扩展和二次开发代价很高。
RocketMQ
简介
RocketMQ是一个开源的消息队列,RocketMQ主要用于有序,事务,流计算,消息推送,日志流处理,binlog分发等场景
优点
功能全
RocketMQ几乎具备了消息队列应该具备的所有特性和功能
java开发
阅读源代码、扩展、二次开发很方便
性能较高
性能比RabbitMQ高一个数量级,每秒处理几十万的消息。
缺点
跟周边系统的整合和兼容不是很好。
Kafka
优点
Kafka的可靠性,稳定性和功能特性基本满足大多数的应用场景。 跟周边系统的兼容性是数一数二的,尤其是大数据和流计算领域,几乎所有相关的开源软件都支持 Kafka
Kafka高效,可伸缩,消息持久化。支持分区、副本和容错。
Kafka是Scala和Java开发的,对批处理和异步处理做了大量的设计
如果是异步消息,并且开启了压缩,Kafka最终可以达到`每秒处理2000w`消息的级别。但是由于是异步的和批处理的,延迟也会高,不适合实时性比较高的场景。
Rabbit、RocketMQ、Kafka对比
MQ的优缺点
优点
解耦、削峰平谷、数据分发、异步处理
缺点
系统的可用性降低 解决:集群
系统引入的外部依赖越多,越容易挂掉,本来你就是 A 系统调用 BCD 三个系统的 接口就好了,人 ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一 MQ 挂了咋整?MQ 挂了,整套系统崩溃了,你不就完了么。
系统的复杂性提高
如何保证消息没有被重复消费
怎么处理消息丢失情况?
那么保证消息传递的顺序性?
一致性问题
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要 是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整? 你这数据就不一致了。
异步的消息机制
消息的顺序性 顺序消息
消息的丢失 消息的持久化
一致性问题 事务
消息的重复 消息的幂等性
0 条评论
下一页
为你推荐
查看更多