消息队列在分布式系统中的应用场景详解
创作时间:
作者:
@小白创作中心
消息队列在分布式系统中的应用场景详解
引用
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使用同一队列进行消息通讯
- 聊天室通讯:多个客户端订阅同一主题,实现类似聊天室效果
以上是消息队列的两种基本模式:点对点和发布订阅模式。
热门推荐
冲刺干货!山东省考判断推理四类题型速解技巧
热搜爆了!知名女星涉嫌高考作弊、偷税漏税?最新回应
自制麻辣烫:升级版香料炒制法,让每一口都充满浓郁香气
冰敷和热敷分别适用于什么情况
集体土地证查询指南:法律途径与注意事项
关于土地证办理,你一定要知道的事
隐形义齿详解,兼具美观与舒适的牙齿修复选择
公司股东大会发言技巧:如何自信地表达自己的观点
一千六百年前沉入湖底的墓穴,竟是对墓主的保护
戈蓝汽车维修手册推荐:掌握汽车空调系统维护关键技巧
培养幼儿的提问能力的方法
冰箱门封条没磁性关不严怎么办?深度解析与解决指南
毒血症的定义
毒血症是什么病,能治愈吗
共性产业园如何建设?小榄经验来了!
按下城市更新“加速键” 梅溪湖国际新城重点项目全面复工复产
摩托车三包期限是多久
如何正确理解车险保单折扣?这些折扣信息有哪些注意事项?
车险的定价机制应该如何深入理解?这种理解有哪些实际应用?
脊柱肿瘤三大类别及治疗策略
春季吃菠萝的6大好处
明确了!这类“车”不能上路
为什么数学建模的流程需要反复迭代?
干净选波轮,功能选滚筒,波轮洗衣机、滚筒洗衣机无需再纠结
汽车淋雨试验房的功能及技术标准规范
王先生爆料案件法律解析与分析
如何在房屋装修中选择合适的门锁?这种门锁的安全性如何保障?
数据可视化在不同行业中的应用场景
USB 3.2技术规范详解
南红玛瑙到底是玛瑙还是玉?