一、异步通信
1、应用场景
- 用户注册后发送短信/邮件:用户提交注册信息后,系统需发送验证短信或欢迎邮件,但用户无需等待此步骤完成即可完成注册。
-
电商订单支付后通知:支付成功后,异步通知库存系统扣减库存、物流系统生成运单、营销系统发放积分。
2、解决方案
-
生产者快速响应:生产者将消息发送到 MQ 后立即返回成功,消费者异步消费消息(如发送短信)。
-
提升吞吐量:通过异步化,主流程耗时从同步调用的 1 秒(发送短信)降低到 10 毫秒(仅发送消息)。
-
典型产品:RabbitMQ(轻量级)、RocketMQ(高可靠)。
二、削峰填谷
1、应用场景
-
秒杀活动:瞬时数万用户抢购商品,直接访问数据库会导致服务崩溃。
-
直播互动高峰:主播抽奖时,大量用户同时发送弹幕或礼物请求。
2、MQ 的解决方案
-
流量缓冲:将突发请求写入 MQ,后端服务按自身处理能力匀速消费(如每秒处理 1000 个请求)。
-
避免服务过载:MQ 堆积消息(如积压 10 万条),服务逐步消费,防止数据库被打满。
-
典型产品:Kafka(高吞吐)、RocketMQ(低延迟)。
三、系统解耦
1、应用场景
-
订单系统与物流系统:订单生成后需通知物流系统生成运单,但物流系统升级不应影响订单系统。
-
微服务间通信:用户服务修改用户信息后,通知积分服务、推荐服务同步数据。
2、MQ 的解决方案
-
发布-订阅模式:订单系统发布消息到 MQ,物流系统订阅消息,双方无需感知彼此的存在。
-
动态扩展:新增一个数据分析系统时,只需订阅订单消息,无需修改订单系统代码。
-
典型产品:Kafka(多订阅者)、RabbitMQ(灵活路由)。
四、最终一致性
1、应用场景
-
跨行转账:A 银行扣款后,通知 B 银行加款,需保证跨系统数据最终一致。
-
电商下单扣库存:支付成功后,需保证订单状态与库存扣减一致。
MQ 的解决方案
-
事务消息:
-
RocketMQ 事务消息:先发送“半消息”到 MQ,执行本地事务(如扣款),事务成功则提交消息,失败则回滚。
-
本地事务表:将消息和业务数据写入同一数据库事务,通过定时任务补偿投递消息。
-
-
重试机制:若消费者处理失败,MQ 自动重试,直到成功或进入死信队列人工处理。
五、日志收集
1、应用场景
-
用户行为分析:收集 App 或 Web 端用户点击、浏览日志,供大数据平台分析。
-
系统监控:聚合多个微服务的运行日志(如错误日志、性能指标),统一存储到 Elasticsearch。
2、MQ 的解决方案
-
高吞吐传输:Kafka 通过分区和批量写入,支持每秒百万级日志传输。
-
数据持久化:日志消息持久化到磁盘,避免数据丢失。
-
流式处理:结合 Flink、Spark 等流处理框架,实时分析日志(如实时统计 PV/UV)。
-
典型产品:Kafka(日志场景首选)、Pulsar(分层存储)。