消息中间件指北

什么是消息中间件

名词概念

  • 消息(Message):计算机之间传送的信息统称
  • 队列(Queue):一种先进先出的数据结构
  • 消息队列(Message Queue):存放消息的容器
  • 中间件:一种软件或服务程序;具体业务和底层逻辑之间的桥梁
  • 消息队列中间件(简称消息中间件):分布式系统中处理消息的桥梁,类似于邮局

为什么要使用消息中间件?

用三个应用场景说明,解耦、异步、削峰

解耦

消息中间件指北_第1张图片

传统模式中,系统A的代码直接调用系统BCD的代码,系统间耦合性太强,如果此时有一个系统E需要接入系统A,还需要进行代码修改。

中间件模式中,系统A的消息写入消息队列,系统BCD按需从消息中间件中订阅,系统A不需要任何代码修改。

异步

消息中间件指北_第2张图片

传统模式同步方式运行系统逻辑,比较耗时,如上图用时150ms。
消息中间件指北_第3张图片

中间件模式将消息写入消息队列,没有必要及时响应的业务逻辑可以异步运行,缩短耗时。

削峰

消息中间件指北_第4张图片

传统模式下,非常多的用户请求同时到达系统A,相当于用户请求的高峰,写入到数据库的时候就可能出现连接异常。
消息中间件指北_第5张图片

中间件模式下,有了消息中间件作为过渡,系统A可以根据数据库的承载能力慢慢拉取请求消息,增强系统的稳定性。

消息中间件的组成

  • Broker

消息服务器,以服务的形式运行在server端,给各个业务系统提供核心消息数据的中转服务(消息中间件的一个实例)

  • Producer

消息生产者,业务的发起方,负责生产消息传输给broker

  • Consumer

消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理

  • Topic

主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由broker分发到不同的订阅者,实现消息的广播

  • Queue

队列,PTP(点对点)模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收

  • Message

消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输

两种基本的消息模型

  • Point-to-Point(PTP)/点对点

    img
  1. queue作为消息的中转站;
  2. 一般采用轮询的模式发送给消费者,一条消息一旦被其中一个消费者消费,则queue不再保存该消息,即一条消息只能被一个消费者消费一次。
  3. 若暂时没有消费者,则消息会一直保存在queue,直至出现可用的消费者消费掉该条消息。
  • Topic/主题(也叫Pub/Sub发布订阅模式也叫广播)

img
  1. topic作为消息的中转站
  2. topic实现了发布和订阅,当发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到一个消息的拷贝。
  3. topic中的消息可以被一个以上的消费者消费;也可以不被消费

消息中间件的使用场景

异步通信

可以将消息放在queue中,根据需求再去处理。

解耦

对项目各系统进行解耦,降低工程系统间的强依赖程度。当应用发生变化时,可以独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束,降低了修改的工作量。

冗余

消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。

数据持久化一般都是将消息存储到本地磁盘中,也有少数消息中间件支持将数据持久化到数据库中,这都会对消息系统的性能造成一定的影响。

扩展性

采用消息队列解耦处理过程后,增大消息入队和处理的频率只需要另外增加处理过程即可,便于分布式扩容。

过载保护(削峰)

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量无法提取预知;若为了能处理这类瞬间峰值访问,从而投入资源非常浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

可恢复性

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

顺序保证

在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序(queue队列先进先出)的,并且能保证数据会按照特定的顺序来处理。

缓冲

在任何重要的系统中,都会有需要不同的处理时间的元素。消息队列通过一个缓冲层来帮助任务最高效率的执行,该缓冲有助于控制和优化数据流经过系统的速度,以调节系统响应时间。

数据流处理

分布式系统产生的海量数据流,如:业务日志、监控数据、用户行为等,针对这些数据流进行实时或批量采集汇总,然后进行大数据分析是当前互联网的必备技术,通过消息队列可以很好地完成此类数据收集的任务。

你可能感兴趣的:(消息队列,中间件,云计算,消息中间件,消息队列)