消息队列在分布式系统中的应用场景详解
创作时间:
作者:
@小白创作中心
消息队列在分布式系统中的应用场景详解
引用
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使用同一队列进行消息通讯
- 聊天室通讯:多个客户端订阅同一主题,实现类似聊天室效果
以上是消息队列的两种基本模式:点对点和发布订阅模式。
热门推荐
长城仅7.8米高,它能为中国阻挡什么?
如何进行资产负债表的审计?这些审计方法如何确保财务透明度?
买车分期和全款的区别是什么?购车方式对财务规划有何影响?
骗局不断的创业圈,到底哪儿出了问题?
一碗泡面=500卡路里?揭秘高热量背后的健康陷阱与破解妙招!
半年后的疤痕使用祛疤膏是否还有效果?医生解析祛疤膏的真实功效与使用建议
探索悲伤的五个阶段及安然度过的秘诀
网格交易策略在ETF方向的有效投资和应用(网格交易学习教程)
孔子是高个子无疑,但他真有两米高吗?
成都近视手术医院对比:华西、爱尔、普瑞三大眼科医院深度解析
又一储能盛宴,国家电投领衔,山东首富、宁德时代、德赛电池等69家业主分羹
别让“药品”变毒品!防范青少年涉麻精药品等成瘾性物质滥用
如何观察资金流动情况并做出合理判断?这些资金流动情况对市场有何影响?
拔牙后是否可以提前拆线?了解拆线时间的重要性与注意事项
银行的存款保险制度保障范围是什么?
春季疏肝,巧用茉莉花,郁气散开了,气机也通畅了!
10个高质量英语阅读资源推荐:APP、在线材料、练习题网站
今天你站桩了吗?
从知晓到行动,“知行并进”是人生的大智慧
东北虎:现存体重最大的肉食性猫科动物
新加坡汇率为什么这么高?详尽解析背后的因素
关于生长激素副作用的五问五答
日本真的是“无条件”投降吗?美国:这个我说了算
免费医疗的真相!
探秘闽南:那些鲜活独特的民俗风情
厦门房价连续4个月上涨,楼市回暖背后的六大原因
关于乙肝的4大误区,及时纠正!
《穆旦传》:“诗史互证”追溯“玫瑰与铁血”的人生传奇
夜间咳嗽咳不停,试试这些方法
胫骨高位截骨术康复程序