消息队列功能介绍

字面上说的消息队列是数据结构中“先进先出”的一种数据结构,但是如果要求消除单点故障保证消息传输可靠性应对大流量的冲击,对消息队列的要求就很高了。现在互联网的“微架构”模式兴起,原有的大型集中式的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, 解压到本 ...

随机推荐

  1. java_day03

    一.this关键字的作用 昨天学了Java private 关键字 ,private关键字主要是为了 保护变量 ,感觉用着好像并不是特别方便 如果需要访问本类当中的成员变量,需要使用的格式: this ...

  2. HCIP --- BGP 总结

    AS:自治系统  --逻辑管理域(例如移动.电信.联通),AS号范围:0-65535,其中,1-64511:公有AS,64512-65535:私有AS IGP:内部网关协议,在一个AS之内传递的路由协 ...

  3. Redis入门指导

    前言 本文提供全网最完整的Redis入门指导教程,下面我们从下载Redis安装包开始,一步一步的学习使用. 下载Redis 官网提供的Redis安装包是服务于Linux的,而我们需要在Window下使 ...

  4. C# HTML帮助类 包括补全标签 截取HTML字符串包含标签

    public static class HtmlHelper { /// <summary> /// 按文本内容长度截取HTML字符串(支持截取带HTML代码样式的字符串) /// < ...

  5. H3C路由器配置——静态路由

    一.网络畅通条件及排错思路 1.网络畅通的条件 网络畅通的条件:数据包能去能回,也是我们排除网络故障的理论依据. 2.网络不畅通示列 ①.目标主机不可达 原因分析:可能是数据包没有到达目的地,在中途就 ...

  6. svn忽略idea生成的本地配置文件

    为根目录添加svn属性svn:global-ignores 值为 *.iml .idea 多个值之间用换行分隔

  7. eclips快捷键

    所谓"工欲善其事必先利其器",程序写多了,对于快捷键总有些特别的偏爱.在众多编辑器中,Eclipse算是用的比较多,也是最熟的. 最常用(也是最爱的:)) Ctrl+' :  自动 ...

  8. [leetcode]62.UniquePaths

    /** * Created by lvhao on 2017/7/6. * A robot is located at the top-left corner of a m x n grid (mar ...

  9. 技术选型关于redis客户端选择

    redis作为分布式缓存框架的首选  相信已经毋庸置疑.能高效.合理的使用好它  必定能提升系统的可用性,高性能.高吞吐量的保障.但选择一个客户端,充分发挥它的能力,就是一个选型问题.现在市场上能选择 ...

  10. UNION An Unreferenced Metric for Evaluating Open-ended Story Generation精读

    UNION An Unreferenced Metric for Evaluating Open-ended Story Generation精读 UNION: 一种评估开放故事生成无参考文本依赖me ...