消息队列在分布式系统中的应用场景详解
创作时间:
作者:
@小白创作中心
消息队列在分布式系统中的应用场景详解
引用
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使用同一队列进行消息通讯
- 聊天室通讯:多个客户端订阅同一主题,实现类似聊天室效果
以上是消息队列的两种基本模式:点对点和发布订阅模式。
热门推荐
新高考改革背景下,互联网技术推动高中数学教学革新
2024高考数学改革:题型分值大调整,专家详解应对之策
甘肃陇西款冬花:药用价值与栽培技巧
2025年重庆汽车报废补贴新政出台,新能源车补贴达2万元
自卸汽车司机技术规程范本
自卸车卸货如何避免翻车
郑佩佩、徐少强、李海生:2024年香港影坛送别三位传奇
暴力美学、警匪巅峰、东方奇幻:三部电影见证港片辉煌
古天乐再任香港演艺人协会会长,新班子助力港圈发展
从无线艺员班走出的三位影帝
古代官员失职的判罪准则与启示
不做职场软柿子:用这三个方法让领导对你刮目相看
叶嘉莹谈弱德之美:司马迁苏轼的坚韧之路
网上申卡安全指南:七招防范个人信息泄露
留学生信用卡指南:从申请到信用记录管理的完整攻略
国内首座秦岭主题博物馆将开馆,4.38万平方米展现秦岭文化
金丝大峡谷:秦岭深处的嶂谷奇观,四季美景各不同
Excel记账法,理财达人必备技能
艾宾浩斯遗忘曲线与词根词缀法:科学提升单词记忆效率
运用心理学原理,科学提升英语单词记忆效率
周慧敏加盟大湾区季,再唱经典引发怀旧热潮
Web3.0:如何用去中心化技术守护你的隐私?
清华简八卦图:伏羲创制的智慧结晶
伏羲八卦图:道家哲学的宇宙密码
权威指南:一个月大婴儿奶粉喂养量
同理心+有效沟通:化解人际冲突的双重利器
甲状腺术后饮食指南:流质食物拯救你的嗓子
就是这样简单的小饼干,却让我时不时想做一次
碳酸镁在烘焙中的作用是什么?
速福达VS奥司他韦:谁是流感防控王者?