RocketMQ—消息队列入门
消息队列功能介绍
字面上说的消息队列是数据结构中“先进先出”的一种数据结构,但是如果要求消除单点故障,保证消息传输可靠性,应对大流量的冲击,对消息队列的要求就很高了。现在互联网的“微架构”模式兴起,原有的大型集中式的IT服务因为各种弊端,通常被拆分成细粒度的多个“微服务”,这些微服务可以在一个局域网内,也可以跨机房部署。一方面对服务之间松耦合的要求越来越高,另一方面,服务之间的联系越来越紧密,分布式消息队列可以提供三大重要功能 应用解耦 、 流量削峰 、 消息分发,已经成为大型互联网服务架构里的标配的中间件
1. 应用解耦
复杂的应用里会存在多个子系统,比如电商应用中有订单系统,库存系统,物流系统,支付系统。这个时候如果各个子系统之间的耦合度太高,整体系统的可用性就会大幅度降低。多个低错误率的子系统耦合在一起,得到一个高错误率的整体系统。以电商应用为例,用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出了故障或者因为升级等原因暂时不使用,都会造成下单操作异常,影响用户使用体验
如图1.1所示,当转变成基于消息队列的方式后,系统的可用性就高多了,比如物流系统因为发生故障,就需要几分钟的时间来修复,在这几分钟里,物流系统要处理的内容被缓存在消息队列里,用户的下单操作可以正常完成。当物流系统恢复后,补充处理存储在消息队列里的订单信息即可,终端用户感知不到物流系统发生过几分钟的故障
1.2 流量消峰
每年的双十一,淘宝的很多活动都在0点的时候后开启,大部分应用系统流量会在瞬间猛增,这个时候如果没有缓冲机制,不可能承受住短时大流量的冲击。通过消息队列,把大量的请求暂存起来,分散到相对长的一段时间内处理,能大大提高系统的稳定性和用户体验。
举个例子,如果订单系统每秒最多处理一万次下单,这个处理能力应对正常时段是绰绰有余的,但是遇到双十一0点时,如果没有消息队列这种缓冲机制,为保证系统的稳定,只能在订单超过一万次后就不允许用户下单了;如果有消息队列做缓冲,我们可以取消这个机制,把一秒内下的订单分散成一段时间来处理,这时候有些用户可能在下单后几十秒才能收到下单成功的状态,但是这也比不能下单的体验要好
使用消息队列进行流量削峰,很多时候不是因为能力不够,而是出于经济性的考察;比如有的业务系统,流量高峰也不会超过一万QPS,而平时只有一千左右的QPS。这种情况下我们就可以用普通性能的服务器,然后加个消息队列作为高峰期的缓冲,无需花大笔资金部署能处理上万QPS的服务器
1.3 消息分发
在大数据时代,数据对很多公司来说就像是金矿,公司需要依赖对数据的分析,进行用户画像,精准推送,流程优化等各种操作,并且对处理的实时性要求越来越高。数据是不断产生的,各个分析团队,算法团队都要依赖于这些数据来进行工作,这个时候有个可持久化的消息队列就非常重要。数据的产生方式只需要把各自的数据写入一个消息队列即可,数据使用方各自根据需求订阅自己感兴趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联
除了上面列出的应用解耦,流量削峰,消息分发等功能,消息队列还有保证最终一致性,方便动态扩容等功能
最新文章
- Proxy Pattern(Java动态代理和cglib的实现)
- jQuery 常用方法经典总结
- Yii2 中日志的记录
- express的基本配置项
- Altium Designer6打印PCB 设置
- PHP简单利用token防止表单重复提交(转)
- iOS模拟器沙盒使用推荐
- BZOJ 4818 SDOI2017 序列计数
- 马昕璐201771010118 《面对对象程序设计(java)》第九周学习总结
- [Swift]LeetCode587. 安装栅栏 | Erect the Fence
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
- golang slice分割和append copy还是引用
- 使用Chrome远程调试GenyMotion上的WebView程序
- C# 用反射动态绑定事件
- Unity------Unity 脚本基类 MonoBehaviour 与 GameObject 的关系
- ios7注意事项随笔
- mac osx下虚拟主机配置
- 【CF472G】Design Tutorial: Increase the Constraints
- DQL、DML、DDL、DCL概念与区别
- TCP的拥塞控制 (二)
热门文章
- SharePoint Online之通过JSOM发送邮件
- js下 Day09、事件(二)
- 什么是babel
- day112:MoFang:种植园使用websocket代替http&;服务端基于flask-socketio提供服务&;服务端响应信息&;种植园页面显示初始化
- 你真的了解Python自动化吗?这篇文章可以让你了解90%
- 职场PUA,管理者的五宗罪
- redis源码学习之lua执行原理
- Spring Cloud 2020.0.0正式发布,再见了Netflix
- python初学者-判断一个数是否为素数
- 深入理解MySQL系列之锁