消息队列功能介绍

字面上说的消息队列是数据结构中“先进先出”的一种数据结构,但是如果要求消除单点故障保证消息传输可靠性应对大流量的冲击,对消息队列的要求就很高了。现在互联网的“微架构”模式兴起,原有的大型集中式的IT服务因为各种弊端,通常被拆分成细粒度的多个“微服务”,这些微服务可以在一个局域网内,也可以跨机房部署。一方面对服务之间松耦合的要求越来越高,另一方面,服务之间的联系越来越紧密,分布式消息队列可以提供三大重要功能 应用解耦流量削峰消息分发,已经成为大型互联网服务架构里的标配的中间件

  • 1. 应用解耦

复杂的应用里会存在多个子系统,比如电商应用中有订单系统,库存系统,物流系统,支付系统。这个时候如果各个子系统之间的耦合度太高,整体系统的可用性就会大幅度降低。多个低错误率的子系统耦合在一起,得到一个高错误率的整体系统。以电商应用为例,用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出了故障或者因为升级等原因暂时不使用,都会造成下单操作异常,影响用户使用体验

如图1.1所示,当转变成基于消息队列的方式后,系统的可用性就高多了,比如物流系统因为发生故障,就需要几分钟的时间来修复,在这几分钟里,物流系统要处理的内容被缓存在消息队列里,用户的下单操作可以正常完成。当物流系统恢复后,补充处理存储在消息队列里的订单信息即可,终端用户感知不到物流系统发生过几分钟的故障

  • 1.2 流量消峰

每年的双十一,淘宝的很多活动都在0点的时候后开启,大部分应用系统流量会在瞬间猛增,这个时候如果没有缓冲机制,不可能承受住短时大流量的冲击。通过消息队列,把大量的请求暂存起来,分散到相对长的一段时间内处理,能大大提高系统的稳定性和用户体验。

举个例子,如果订单系统每秒最多处理一万次下单,这个处理能力应对正常时段是绰绰有余的,但是遇到双十一0点时,如果没有消息队列这种缓冲机制,为保证系统的稳定,只能在订单超过一万次后就不允许用户下单了;如果有消息队列做缓冲,我们可以取消这个机制,把一秒内下的订单分散成一段时间来处理,这时候有些用户可能在下单后几十秒才能收到下单成功的状态,但是这也比不能下单的体验要好

使用消息队列进行流量削峰,很多时候不是因为能力不够,而是出于经济性的考察;比如有的业务系统,流量高峰也不会超过一万QPS,而平时只有一千左右的QPS。这种情况下我们就可以用普通性能的服务器,然后加个消息队列作为高峰期的缓冲,无需花大笔资金部署能处理上万QPS的服务器

  • 1.3 消息分发

在大数据时代,数据对很多公司来说就像是金矿,公司需要依赖对数据的分析,进行用户画像,精准推送,流程优化等各种操作,并且对处理的实时性要求越来越高。数据是不断产生的,各个分析团队,算法团队都要依赖于这些数据来进行工作,这个时候有个可持久化的消息队列就非常重要。数据的产生方式只需要把各自的数据写入一个消息队列即可,数据使用方各自根据需求订阅自己感兴趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联

除了上面列出的应用解耦,流量削峰,消息分发等功能,消息队列还有保证最终一致性,方便动态扩容等功能

最新文章

  1. Proxy Pattern(Java动态代理和cglib的实现)
  2. jQuery 常用方法经典总结
  3. Yii2 中日志的记录
  4. express的基本配置项
  5. Altium Designer6打印PCB 设置
  6. PHP简单利用token防止表单重复提交(转)
  7. iOS模拟器沙盒使用推荐
  8. BZOJ 4818 SDOI2017 序列计数
  9. 马昕璐201771010118 《面对对象程序设计(java)》第九周学习总结
  10. [Swift]LeetCode587. 安装栅栏 | Erect the Fence
  11. 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
  12. golang slice分割和append copy还是引用
  13. 使用Chrome远程调试GenyMotion上的WebView程序
  14. C# 用反射动态绑定事件
  15. Unity------Unity 脚本基类 MonoBehaviour 与 GameObject 的关系
  16. ios7注意事项随笔
  17. mac osx下虚拟主机配置
  18. 【CF472G】Design Tutorial: Increase the Constraints
  19. DQL、DML、DDL、DCL概念与区别
  20. TCP的拥塞控制 (二)

热门文章

  1. SharePoint Online之通过JSOM发送邮件
  2. js下 Day09、事件(二)
  3. 什么是babel
  4. day112:MoFang:种植园使用websocket代替http&服务端基于flask-socketio提供服务&服务端响应信息&种植园页面显示初始化
  5. 你真的了解Python自动化吗?这篇文章可以让你了解90%
  6. 职场PUA,管理者的五宗罪
  7. redis源码学习之lua执行原理
  8. Spring Cloud 2020.0.0正式发布,再见了Netflix
  9. python初学者-判断一个数是否为素数
  10. 深入理解MySQL系列之锁