消息队列功能介绍

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

    学习java以来,都是以语法,类库入手,最基本的也是最基础的java编译过程往往被我遗忘,先解释一下学习java第一课时,都听到过的一句话,"java是半解释语言".什么是半解释语 ...

  2. layui的基本使用

    打开官网https://www.layui.com/下载这个框架 官网首页 下载到 layui 的最新版,它经过了自动化构建,更适合用于生产环境.目录结构如下 ├─css //css目录 │ │─mo ...

  3. Python高级语法-多继承MRO相关-多继承顺序(4.5.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 使用类的魔法方法__mro__ 可以查看他的父类调用顺序 还有调用父类的构造方法的时候,使用super调用,里面有C3算法支持,不会重复调用相同的祖先 ...

  4. 正方形和球体,利用蒙特卡洛计算pi值

    clc; clear all; close all; R = 3; time = 10000; origin = [0,0,0]; %%======绘制球体====== t=linspace(0,pi ...

  5. Ubuntu替换清华源或者阿里源

    倒腾pygame包的问题(Ubuntu 19.10),安装好pip后,又要安装一个pygame的包,倒腾了两天两夜,硬是因为网络问题(可能被强大的墙阻挡了),安装不成功,后面在网上找了篇帖子,用清华源 ...

  6. 【命令】kill命令

    kill命令详解: <---用于向进程发送信号,以实现对进程的管理---> 语法格式:kill  [-s signal|-SIGNAL]  pid... kill -l [signal] ...

  7. 实用干货!Java开发企业级权限管理系统视频教程

    全程手把手带你运用Java技术栈,打造一套基于最流行的RBAC拓展模型的,分布式的,有界面的,高灵活性,高拓展性的企业级权限管理系统.学完本课程你将可以轻松应对绝大多数企业开发中与权限管理及后台系统相 ...

  8. HashMap知识点总结,这一篇算是总结的不错的了,建议看看!

    HashMap存储结构 内部包含了⼀个 Entry 类型的数组 Entry[] table.transient Entry[] table;(transient:表示不能被序列化)Entry类型存储着 ...

  9. bladex从blade-dev.yaml 读取配置信息

    blade-dev.yaml配置======nacos文件配置 #sap配置 sap: api: read: url: http://read.xxxxxxxx.com.cn port: 80 use ...

  10. 在开发板上显示英文字符和汉字--tiny6410

    程序字符需要改成gb2312.否则无法正常显示中文字符. main.c代码: #include <sys/types.h> #include <sys/stat.h> #inc ...