消息中间件的核心组成部分

  • 消息队列协议
  • 消息的持久化机制
  • 消息的分发策略
  • 消息的高可用,高可靠
  • 消息的容错机制

一、消息队列协议

共同遵循的约定和规范,目的是让客户端进行通讯,并且该协议下必须高可用,高可靠,持久化

协议三要素

  • 语法 规定请求头和响应头
  • 语义 客户端主动发送请求,使用什么方式(POST/GET)
  • 时序 一个请求必定有一个响应

image.png

常见协议(消息组件)

  • OpenWire
  • AMQP
  • MQTT
  • Kafka
  • OpenMessage

AMQP

Advanced Message Queuing Protocol
Spring一家,Erlang开发
特性:

  1. 分布式事务支持
  2. 消息的持久化支持
  3. 高性能,高可靠的消息处理优势

RabbitMQ和ActiveMQ都支持该协议,RabbitMQ更加优秀

MQTT

物联网系统架构的重要组成部分
Message Queuing Telemetry Transport
特性:

  1. 轻量级
  2. 结构简单
  3. 传输快,不支持事务
  4. 没有持久化设计

应用场景

  1. 适用于计算能力有限
  2. 低带宽
  3. 网络不稳定

RabbitMQ和ActiveMQ都支持该协议,需要手动打开

OpenMessage

由国内各大公司 阿里,雅虎,滴滴进行开发维护的协议
特性:

  1. 结构简单
  2. 解析速度快
  3. 支持事务和持久化

RocketMQ支持

Kafka

基于TCP/IP的二进制协议,消息内部通过长度进行分割,由一些基本数据类型组成

特性:

  1. 结构简单
  2. 解析速度快
  3. 无事务支持
  4. 有持久化设计

二、消息队列持久化

持久化:将数据存储到磁盘,使数据永久保存

常见持久化方式

ActiveMQ RabbitMQ Kafka RocketMQ
文件存储 支持 支持 支持 支持
数据库 支持 / / /

数据库持久化不优雅,极少使用

三、消息队列分发策略

MQ角色

  1. 生产者
  2. 存储消息
  3. 消费者

消息队列MQ是一种推(PUSH)的机制

分发策略机制和对比

ActiveMQ RabbitMQ Kafka RocketMQ
发布订阅 支持 支持 支持 支持
轮询分发 支持 支持 支持 /
公平分发 / 支持 支持 /
重发 支持 支持 / 支持
消息拉取 / 支持 支持 支持

例子:
生产者生产了100条消息

  • 发布订阅: 所有消费者都会收到100条
  • 轮询分发: 公平性,无论服务器性能如何,不会进行服务器资源倾斜,数据被消费者消费,其他消费者不会再次进行消费
  • 公平分发:数据倾斜(能者多劳,手动实现),根据服务器性能进行分发,数据被消费者消费,其他消费者不会再次进行消费
  • 重发:出现异常故障,消息没有得到应答,重发到其他集群服务器,直到得到响应
  • 消息拉取:进行消息拉取

四、消息高可用和高可靠

什么是高可用

产品在规定的条件和规定的时间内处于可执行规定功能状态的能力
当业务量增加时,请求也会增加,一台消息中间件服务器会达到物理极限,通常需要部署集群,来达到高可用的目的

什么是高可靠

系统可以无故障的持续运行,比如一个系统突然本库,报错,异常等不会影响线上业务的正常运行,出错的几率极低,
可以从两方面考虑消息中间件的可靠性:

  1. 消息的传输:通过协议进行传输。保证系统间数据解析的正确性
  2. 消息的存储可靠:通过持久化来保证消息的可靠性

    集群模式-1-Master - Slave(主从共享部署)

image.png

master负责写入数据,slave负责读取数据
master节点宕机,slave节点继续服务,从而形成高可用
不会形成消息副本

集群模式-2-Master - Slave(主从同步部署)

image.png
master写入消息,主节点会同步数据到slave节点形成副本,可以达到负载均衡的效果,消息的拷贝和同步会暂用很大的带宽和网络资源
最好部署在同一个局域网内

集群模式-3-多主集群同步部署

image.png
任意节点获取,任意节点写入

集群模式-4-多主集群转发部署

image.png

使用较多,将消息描述信息和存放位置放入元数据,
解释:如果你插入的数据是broker-1中,元数据信息会存储数据的相关描述和记录存放的位置(队列)。
它会对描述信息也就是元数据信息就行同步,如果消费者在broker-2中进行消费,发现自己几点没有对应的消息,可以
从对应的元数据信息中去查询,然后返回对应的消息信息,场景:比如买火车票或者黄牛买演唱会门票,比如第一个黄
牛有顾客说要买的演唱会门票,但是没有但是他会去联系其他的黄牛询问,如果有就返回。

集群模式-5- Master-slave 与 Broker-cluster组合的方案

image.png
大型系统中使用

根据系统需求和业务场景选择模式

  1. 要么消息共享
  2. 要么消息同步
  3. 要么元数据共享

五、消息类型

  • 普通消息:消息队列中无特性的消息
  • 事务消息:先发送消息,等待当前微服务业务执行完毕之后再次传递确认消息,才会将消息传递给下一个微服务,实现类似于X/OpenXA的分布式事务功能,已达到食物最终一致性状态
  • 定时和延时消息:允许消息生产者对指定消息进行定时投递,最长支持40天
  • 顺序消息:允许消费者按照消息发送的顺序对消息进行消费