[转帖]消息队列与快递柜之间妙不可言的关系

消息,队列,快递,之间,妙不可言,关系 · 浏览次数 : 0

小编点评

**消息队列的优点:** * **异步解耦:**消费者不用等待快递员,用户体验增强。 * **流量削峰:**我们假定一种极端的情况,你通过各个渠道买了 1000 本书,突然某一小时集中的给你打电话。你肯定不具备一个小时收 1000 个邮件的能力,所以你让快递员将邮件放入快递柜。所以你就可以按照自己的处理能力,按照自己的时间安排去取邮件。 * **缓冲批处理:**生产者批量投递,爽!消费者一次性取多个邮件,爽! **快递柜的缺点:** * **引入复杂度:**快递柜(消息队列)这东西是多出来的,在原来的收取过程中是不存在的。 * **维护:**快递柜需要服务器区安装它,还要对它进行维护。 * **数据一致性:**如果没有快递柜,你收到了邮件就是真的收到了。但是使用快递柜之后,你收到了\"邮件放入快递柜的消息\",但是与你真的取到邮件这中间会有一定的延时。

正文

https://xie.infoq.cn/article/8085241414e8959323ecd7811

 

一、消息队列是一个快递柜

我们来将快递柜与消息队列做一个对比

 

  • 消息队列比作快递柜:有很多厂家生产快递柜,如:丰巢(apache kafka),速递易(alibaba RocketMQ),近邻宝(ActiveMQ)等等,反正常用的就这几个。快递柜负责临时保存邮件,消息队列负责临时保存消息数据。

  • 快递员比作消息生产者:快递员负责向快递柜投递邮件,生产者负责向消息队列投递消息。异曲同工之妙啊!

  • 消费者比作消息消费者: 可能是这个例子太贴切了,以至于这句怎么看都是废话。废话也还是要说,生活中的消费者取邮件,程序中的消费者取消息数据。

 

二、快递柜(消息队列)带来的好处

我们先回顾一下在没有快递柜的日子里是怎么度过的:某天早上突然接到快递员电话:"兄弟,有你的快递啊"。心里想真糟糕:“你早不来晚不来,我马上就要上班了,你这个时候来。好吧,我等你一会”。结果有可能快递员很不靠谱,一会说堵车,一会说马上到,等来等去你上班迟到了。这种情况让你很崩溃!

 

突然有一天,小区里突然出现了一个叫做快递柜的东西,这东西好啊。"兄弟,有你快递啊",心想谁是你兄弟:"啊,你放快递柜里面吧,我晚上下班回来取"。快递员愉快的把快递放入快递柜,开始打下一个电话,一早上 10 个邮件。如果每个都送上门快递员最少要半小时。现在好了,9 个放快递柜,1 个用户要求送上门,10 分钟就搞定了。快递员觉得这个东东真的很好!

 

快递员高兴了,消费者用户其实也很满意,有的购物狂一天有可能收 10 来个邮件。没有快递柜的时候,快递员来一个电话就去取一次(等一次)快递。有了快递柜,下班的时候就一起全都取了。上面的例子,体现了消息队列(快递柜)的几个优越性,请读者仔细品评:

 

  • 异步解耦:有了快递柜,消费者不用等待快递员,用户体验增强。消费者与生产者(快递员)之间解耦,不会因为对方的操作行为,影响自己独立处事的程序。用户不用疲于等待与接收事件阻塞耗时。

  • 流量削峰:我们假定一种极端的情况,你通过各个渠道买了 1000 本书,突然某一小时集中的给你打电话。你肯定不具备一个小时收 1000 个邮件的能力,所以你让快递员将邮件放入快递柜。所以你就可以按照自己的处理能力,按照自己的时间安排去取邮件。同样我们的消费者程序在面临多用户、高并发的请求情况下,将数据放入消息队列保存可以将流量数据削峰,按照程序能够处理的能力和资源进行数据消费。

  • 缓冲批处理:生产者批量投递,爽!消费者一次性取多个邮件,爽!

三、引入快递柜带来的缺点

说了这么多的优点,那么快递柜有没有缺点呢?当然有

 

  1. 引入复杂度。毫无疑问,快递柜(消息队列)这东西是多出来的,在原来的收取过程中是不存在的。所以需要地方放它,还需要防火、防盗防潮,需要去维护它。消息队列中间件也是一样的,你需要服务器区安装它,还要对它进行维护。

  2. 会导致暂时的数据不一致。 如果没有快递柜,你收到了邮件件就是真的收到了。但是使用快递柜之后,你收到了"邮件放入快递柜的消息",但是与你真的取到邮件这中间会有一定的延时。当然你最终还是会取到邮件,选择"消息队列"快递柜,就是要忍受暂时不一致,接受"最终一致性"。

  3. 当然极端情况下,快递柜坏了,你要不可避免地接受"邮件可能会丢失"的事实,对于安保系数高的小区这几乎不会发生。

与[转帖]消息队列与快递柜之间妙不可言的关系相似的内容:

[转帖]消息队列与快递柜之间妙不可言的关系

https://xie.infoq.cn/article/8085241414e8959323ecd7811 一、消息队列是一个快递柜 我们来将快递柜与消息队列做一个对比 消息队列比作快递柜:有很多厂家生产快递柜,如:丰巢(apache kafka),速递易(alibaba RocketMQ),近邻

[转帖]Kafka常见使用场景与Kafka高性能之道

https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。 消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

[转帖]RabbitMQ学习笔记01:初识与安装

https://www.cnblogs.com/alongdidi/p/rabbitmq_overview.html 原作者写的真好. 前言 本人是一名运维工程师,在此公司接触到 RabbitMQ ,平时针对此软件的工作内容就是集群的安装以及配置监控等,对其的理解也仅仅是知道其是一种消息队列的服务,

[转帖]从理论到实践,异步I/O模式下NVMe SSD高性能之道

在早期NVMe的讨论话题中,常常将之AHCI协议进行对比,在支持的最大队列深度、并发进程数以及消耗时钟周期数等方面,NVMe吊打了AHCI。最直观也最权威的就是下面这张对比图片。 NVMe与AHCI协议对比(来源:sata-io.org) SATA的发展最早可以追溯到上世纪80年代的IDE/ATA,

[转帖]消息队列中间件-常用的 MQ

RabbitMQ RabbitMQ 是开源的分布式消息队列系统,用 erlang 语言开发。RabbitMQ 是 AMQP 的标准实现。 AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。 AMQP

[转帖]消息队列中间件-概述

1. 简介 MQ(Message Queue)消息队列是一种应用程序对应用程序的通信方法,应用程序通过读(出队)写(入队)队列的消息(针对应用程序的数据)进行通信。 MQ是消费者-生产者模型的典型代表,生产者往消息队列中不断写入消息,而消费者则可以读取或者订阅队列中的消息,并进行消息处理。 消息队列

[转帖]Day63_Kafka(一)

第一讲 Kafka基础操作 课程大纲 课程内容 学习效果 掌握目标 Kafka简介 消息队列 掌握 Kafka简介 Kafka分布式环境 Kafka操作 Kafka shell 掌握 Kafka api Flume整合kafka 一、Kafka简介 (一)消息队列 1、为甚要有消息队列 2、消息队列

[转帖]RabbitMQ基础概念详细介绍

https://www.jianshu.com/p/e55e971aebd8 AMQP简介 AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦和通讯。 AMQP的主要

[转帖]RabbitMQ服务优化,修改最大连接数

https://www.cnblogs.com/hoyeong/p/16242202.html RabbitMQ的优化RabbitMQ的连接数是压垮消息队列的一个重要的指标。所以在平时使用OpenStack平台的过程中,如果大量的用户同时创建虚拟机,会导致云平台创建报错,其实就是消息队列服务的崩溃。

[转帖]RabbitMQ 的重要概念(术语)

Message 消息指的是 RabbitMQ 的队列中保存的数据。 Producer 消息的生产者,即 message publisher(sender),是指负责创建和发送消息的程序。 Vhost RabbitMQ 的虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离