消息队列功能介绍

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

  • 1. 应用解耦

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

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

  • 1.2 流量消峰

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

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

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

  • 1.3 消息分发

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

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

RocketMQ—消息队列入门的更多相关文章

  1. RocketMq消息队列使用

    最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性, 目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,bin ...

  2. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  3. RabbitMQ 消息队列入门

    文档 入门 主要的内容:one two three four five six seven 前言 中间件 消息队列 异步处理,注册完发短信 应用解耦,订单接口调用扣库存接口,失败了怎么办? 流量削峰, ...

  4. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)

    一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...

  5. C++ message queue 消息队列入门

    说明:当我们有多个线程以不同的速度运行并且我们想要以特定的顺序从一个线程向另一个线程发送信息时,消息队列可能会有用. 这个想法是,发送线程将消息推送到队列中,而接收线程将消息按自己的步调弹出. 只要发 ...

  6. RabbitMQ消息队列入门(一)——RabbitMQ消息队列的安装(Windows环境下)

    一.RabbitMQ介绍1.RabbitMQ简介RabbitMQ是一个消息代理:它接受和转发消息.你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收 ...

  7. Apache RocketMQ 消息队列部署与可视化界面安装

    一.介绍 Apache RocketMQ是一个分布式.队列模型的消息中间件,具有低延迟.高性能和高可靠.万亿级容量和灵活的可扩展性.核心组件由四部分组成:Name Servers,Brokers,Pr ...

  8. RocketMQ消息队列部署与可视化界面安装

    MQ安装部署 最新版本下载:http://rocketmq.apache.org/release_notes 修改配置 vi conf/broker.conf 添加brokerIP1 brokerIP ...

  9. 消息队列入门(四)ActiveMQ的应用实例

    >>部署和启动ActiveMQ 去官网下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.12.0-bin.tar.gz, 解压到本 ...

  10. 消息队列入门(三)JMS标准及实现

    >>消息中间件 消息中间件即Message-oriented middleware(MOM),消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集 ...

随机推荐

  1. npm 加速方案

    使用npm install 包,是见比较头疼的事情,比较慢,很难等,经过探索,还是发现有办法加速的,方法有两个,让我一一道来: 1. 在npm 后添加参数 --registry=... 指定镜像源地址 ...

  2. Linux系统下Apache2.4.17的安装过程

    Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...

  3. 关于使用regsvr32命令注册ActiveX控件失败的解决办法

    昨天小编也遇到这样问题,步骤一切都对,没有错误,但是每次在命令行下输入的时候,都会弹出一个对话框: 最后我发现是存放ActiveX控件的路径中带有中文文件名字所导致,所以导致的错误,我们将所在路径下的 ...

  4. NLog官方文档

    NLog快速使用 NLog配置 NLog通过代码定义配置 Target Layouts Layout Renderers

  5. Leetcode-34-Search Insert Position-(Medium)

    二分法查找需要插入的位置,需要注意两点 1.如果元素不存在,停止的时候start Index刚好是需要插入的位置 2.如果元素存在,需要向前追溯找到非目标元素的起始边界 #!/usr/local/bi ...

  6. Python之编程基础(编程语言分类)

    一.编程语言简介 编程语言主要从以下几个角度进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 1.编译型跟解释型 编译型,其实他和汇编语言是一样的,也是有一个负责翻译的程 ...

  7. 行为驱动开发BDD和Cucunber简介

    测试驱动开发(TDD) 1.测试驱动开发,即Test-Driven Development(TDD),测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前 ...

  8. 大数据计算平台Spark内核全面解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...

  9. 5G投资逻辑

    5G投资逻辑 关注光模块生产厂商. 通信射频滤波器,功率放大器生产厂商. 光无源器件的需求增多

  10. haproxy实现会话保持

    HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.反向代理为什么需要设置cookie 任何一个七层的http负载均衡器,都 ...