前世今生
大规模订单请求处理会遇到的问题和解决方案
- 系统bug,影响整个链路:解耦,然后事先存到消息队列里面,不直接放到系统里面去 处理
- 请求量太大,服务能力有限:削峰
- 链路耗时太长:异步
- 过于复杂日志的没法处理
消息队列:
- 保持消息的一个容器
- 本质上还是个队列
- 高可用、高并发
发展历程
- TIB -> IBM WebSphere -> MSMQ
- JMS AMQP 规范
- Kafka 开源
业界对比
-
RabbitMQ
- 支持多种协议,如AMQP、MQTT、STOMP等
- 有丰富的插件和社区支持
- 可靠性高,支持持久化、事务等机制
- 适合复杂的消息路由和转发场景
-
Kafka
- 高吞吐量,支持百万级别的消息处理
- 支持多种语言的客户端
- 可以进行消息的批量处理
- 适合大数据场景,如日志收集、流式处理等
-
ActiveMQ
- 支持多种协议,如AMQP、STOMP、OpenWire等
- 有较好的可视化管理界面
- 支持持久化、事务等机制
- 适合传统企业应用和JMS场景
-
Redis
- 内存数据库,读写性能高
- 支持多种数据结构的操作,如List、Set、Hash等
- 支持发布/订阅模式,可以实现消息队列功能
- 适合对延迟和吞吐量要求较高的场景,如实时计算、实时推荐等
-
Pulsar
- 支持多租户的部署方式
- 支持多种协议,如Kafka、MQTT等
- 支持多种消息模式,如点对点、发布/订阅等
- 适合大规模、高可用、多租户的场景,如云原生应用、边缘计算等
简单认识消息队列
-
消息队列架构
- 生产者:产生消息并发送到消息队列
- 消息队列:存储消息并将其传递给消费者
- 消费者:从消息队列中接收消息并处理
-
消息队列基本概念
- 消息:生产者发送给消息队列的数据单元
- 队列:消息队列中存储消息的数据结构
- 消费者组:一组消费者,共同消费同一个消息队列中的消息
- 消费者偏移量:消费者在消息队列中消费消息的位置记录
- 消息确认机制:消费者消费完消息后,向消息队列发送确认信息,以标记该消息已被成功消费
Kafka
使用场景
使用流程
- 创建集群、topic、消费者生产者逻辑
基本概念
-
Offset:下的内部偏移
-
Replica: