【完结14章】MQ大牛成长课--从0到1手写分布式消息队列中间件
消息中间件是一种用于构建分布式系统的软件基础设施,提供了一种异步的,可靠的,可伸缩的消息传递机制。
提高系统性能首先考虑的是数据库的优化,但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库之前。
不管是无限的横向扩展服务器,还是纵向阻隔到达数据库的流量,都是这个思路。阻隔直达数据库的流量,缓存组件和消息组件是两大杀器。
什么是消息队列
消息队列(Message queue,简称MQ),是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。从字面理解就是一个保存消息的一个容器。
常见的消息队列
当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等,而部分数据库如Redis、MySQL以及phxsql也可实现消息队列的功能。
消息中间件的应用主要包括以下几个方面:
可靠性数据传输:消息中间件利用高效的可靠消息传递机制,确保数据在分布式环境中的可靠传送。
分布式系统集成:通过提供消息传递和消息排队模型,它在分布式环境下扩展了进程间的通信能力。
屏蔽平台差异:消息中间件能在不同平台之间通信,屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同。
异步通信:可用于业务系统内部的异步通信以及分布式系统信息交互。
系统解耦:有助于将不同性质业务的逻辑分离,提高性能,减少异常影响。
流量削峰:通过间歇性地处理突发性流量,减轻系统压力,提升系统可用性。
分布式事务一致性:某些消息中间件如RocketMQ提供的事务消息功能,可以帮助处理分布式事务的一致性问题。
消息顺序收发:保证消息的先进先出,这是消息队列的基本功能之一。
延时消息:允许延迟触发消息,这在特定业务场景中有用,例如下单后的延迟取消未支付订单。
大数据处理:如Kafka可以用来处理日志数据,而其他消息中间件则可以用于同步或异步地处理大数据。
分布式缓存同步:通过消费MySQL binlog日志进行缓存同步,或者直接推送业务变更到消息队列中进行处理。
综上所述,消息中间件是一种重要的软件系统,它广泛应用于现代分布式计算环境中,帮助不同系统和组件之间进行有效的数据通信和信息交换。
三大MQ的对比
重头戏来了,在实际开发中,要用到MQ时,对MQ的选型是很重要的,选型的基础是一定要了解MQ的特点和适用的场景。
Kafka:
• 优点:
• 吞吐量:Kafka的设计目标是实现高吞吐量的消息传递,拥有很大的吞吐量,适用于处理大量的实时数据流。
• 扩展性:Kafka采用分布式架构,允许构建具有高可用性和可伸缩性的消息系统。
• 可靠性:Kafka将消息持久化到磁盘上,可以长期保留数据,并支持高效的消息回放。
• 缺点:
• 复杂性:Kafka的配置和管理相对较复杂,需要一定的学习和运维成本。
• 实时性:由于Kafka是批量处理数据的,并且由于需要在分区之间进行数据的复制和同步,所以相对于其它MQ,kafka会存在一定时延。
• 功能丰富度:支持的消费模式比较单一
RabbitMQ:
• 优点:
• 功能丰富度:RabbitMQ支持灵活的路由机制和多种消息模式,如点对点、发布-订阅和主题订阅等。
• 可靠性:RabbitMQ通过消息确认机制和持久化可以保证消息的可靠传递。
• 兼容性:RabbitMQ使用标准的AMQP协议,支持跨语言和平台的互操作性。
• 缺点:
• 吞吐量:没有做拉升吞吐量的优化所以相比于其他消息队列系统,RabbitMQ的吞吐量较低。
• 扩展性:RabbitMQ的集群管理较为复杂,需要很多额外的配置和管理。
RocketMQ:
• 优点:
• 高吞吐量和低延迟:RocketMQ是为处理大规模数据流设计的,具有高吞吐量和低延迟的特点。RocketMQ的时延。
• 可靠性:存在持久化机制、确认机制,具有高可靠性。
• 扩展性:RocketMQ支持水平扩展,可以通过添加更多的节点来提高系统的性能和容量。
• 缺点:
• 社区支持:相对于Kafka和RabbitMQ,RocketMQ的社区支持相对较弱。
• 功能丰富度:RocketMQ在功能上相对较为简化,可能不适用于复杂的消息处理场景。![QQ截图20240923162749.png](http://static.itsharecircle.com/240924/d38ca1697cba0cdf467187ec34475092.png)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传