消息队列在分布式系统中的应用场景详解
创作时间:
作者:
@小白创作中心
消息队列在分布式系统中的应用场景详解
引用
51CTO
1.
https://blog.51cto.com/u_16213577/10965299
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。常见的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。
消息队列应用场景
2.1 异步处理
在用户注册场景中,需要发注册邮件和注册短信。传统做法有串行和并行两种方式:
- 串行方式:将注册信息写入数据库成功后,依次发送注册邮件和注册短信,全部完成后返回给客户端。
- 并行方式:将注册信息写入数据库成功后,同时发送注册邮件和注册短信,三个任务完成后返回给客户端。
引入消息队列后,可以将非核心业务逻辑异步处理。改造后的架构如下:
这样用户的响应时间仅需50毫秒(注册信息写入数据库的时间),系统的吞吐量提高到每秒20 QPS,比串行提高了3倍,比并行提高了两倍。
2.2 应用解耦
在用户下单场景中,订单系统需要通知库存系统。传统做法是订单系统直接调用库存系统接口,存在以下缺点:
- 库存系统不可用会导致订单失败
- 订单系统与库存系统高度耦合
引入消息队列后的方案:
- 订单系统完成持久化处理后,将消息写入消息队列,立即返回订单下单成功
- 库存系统订阅下单消息,采用拉/推方式获取信息并处理库存
这样即使库存系统不可用,也不影响正常下单,实现了应用解耦。
2.3 流量削峰
在秒杀或抢购活动中,为避免流量暴增导致应用崩溃,可以在应用前端加入消息队列:
- 用户请求先写入消息队列
- 超过最大数量时直接抛弃请求或跳转错误页面
- 秒杀业务根据队列信息进行后续处理
2.4 日志处理
Kafka常用于日志处理场景,架构如下:
- 日志采集客户端负责数据采集并定时写入Kafka队列
- Kafka负责接收、存储和转发日志数据
- 日志处理应用订阅并消费Kafka队列中的日志数据
例如新浪的Kafka日志处理案例:
- Kafka:接收用户日志的消息队列
- Logstash:解析日志并输出JSON给Elasticsearch
- Elasticsearch:实时日志分析服务,兼具搜索和统计功能
- Kibana:基于Elasticsearch的数据可视化组件
2.5 消息通讯
消息队列内置高效通信机制,可用于纯消息通讯场景:
- 点对点通讯:客户端A和B使用同一队列进行消息通讯
- 聊天室通讯:多个客户端订阅同一主题,实现类似聊天室效果
以上是消息队列的两种基本模式:点对点和发布订阅模式。
热门推荐
冬季脚部护理这样做:保暖泡脚保湿三步走
微信双账号功能正式上线!一个手机号可注册两个微信号
焦三仙:中医食疗界的“消化神器”
王星揭露缅北KK园区骗局内幕
8年研究证实:脚趾按摩调节神经,改善血压,中医养生有科学依据
养老护理员必备:血压计操作指南
缅东KK园区骗局揭秘:人间炼狱的真实面目
国产7nm芯片量产:中芯国际打破技术垄断
明月山国家级风景名胜区:门票价格与特色景点全攻略
《中国高血压防治指南(2024版)》发布:不再推荐使用水银血压计
重温加菲猫经典场景:意大利面大战星期一
导游需要具备的能力和素质
地板铺垫宝:6-20mm厚度如何选?专家推荐10-12mm
绵阳飞海口航班信息全攻略:直飞仅837元起!
2024年冬春航季航班计划今起执行 部分票价同比下降7%
善待流浪猫,需要善意与能力匹配
米技&美的电磁炉,谁更省电?
春节健康饮酒指南:每天最多喝多少,这些细节要注意
煎炸五花肉:外酥里嫩的烹饪秘诀
贺州温泉:四面青山环抱的养生度假胜地
地中海饮食:科学证实的延寿饮食法
乾隆养生法VS张其成教授:谁的长寿秘诀更靠谱?
金山秀水,世界瑶都:广西金秀瑶族自治县旅游攻略
多发性硬化症母亲单手推轮椅,只为在场边支持WNBA女儿
婚姻心理学教你50岁后如何甜蜜恩爱
宋朝参知政事:权力制衡与政治博弈
王安石变法:参知政事的崛起与陨落
一文读懂发财树光照需求:四季养护有讲究
茶室养发财树有讲究:环境适应、养护要点全解析
DIY手机换屏全攻略:从工具准备到成功测试