什么是分布式消息中间件
首先我们来看一下架构的演化过程
单体架构
分布式系统架构
基于消息中间件的系统架构
总的来说:
消息中间件就是利用高效可靠的消息传递机制进行平台无关的数据交流;
并基于数据通信来进行分布式系统的集成;
通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信;
消息中间件的应用场景
跨系统数据传递
、高并发流量削峰
、数据异步处理
…等等
常用的消息中间件
ActiveMQ
、RabbitMQ
、Kafka
、RocketMQ
消息中间件核心设计
-
本质
一种具备接收请求、保存数据、发送数据等功能的网络应用。
和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般都高于普通程序。
-
5大核心组成
协议
持久化机制
消息分发机制
高可用设计
高可靠设计
协议
协议是什么
协议是计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能相互交流。
是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。
协议三要素
:
语法
: 即数据与控制信息的结构或格式;语义
: 即需要发出何种控制信息,完成何种动作以及做出何种响应;时序(同步)
:即事件实现顺序的详细说明。
常见协议
Http协议三要素举例
:
语法: http规定了请求报文和响应报文的具体格式。
语义: 客户端主动发起的操作称为请求。
时序: 一个请求对应一个响应。
消息中间件常用的协议
:OpenWire、AMQP、MQTT、Kafka、OpebMessage
为什么消息中间件不直接使用Http协议?
请求时需要传输一堆的数据,请求报文和响应报文的具体格式比较复杂,可能还有cookie,一堆复杂功能,
而消息中间件就是比较单一的,并要求高性能,减少传输的数据大小。
http大部分情况下是短连接,每次响应后就会中断,不利于消息中间件的场景,消息中间件可能是一个客户端长期的去获取消息,不适合短连接。
AMQP协议
AMQP
(Advanced Message Queuing Protocol)是高级消息队列协议
04年JPMorgan Chase(摩根大通集团)联合其他公司共同设计
- 特性
事务支持
、持久化支持
,出生金融行业,在可靠性消息处理
上具备天然的优势。
- 使用该协议的中间件
RabbitMQ
、ActiveMQ
MQTT协议
MQTT
(Message Queuing Telemetry Transport) 消息队列遥测传输是IBM开发的一个即时通讯协议,物联网系统架构中的重要组成部分。
- 特性
轻量
、结构简单
、传输快
、没有事务支持
、没有持久化相关设计
- 应用场景
适应于计算能力有限、低带宽、网络不稳定的场景。
- 使用该协议的中间件
RabbitMQ
、ActiveMQ
Open Message协议
OpenMessaging
是近一两年由阿里发起,与雅虎、滴滴出行、Streamlio等公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准。
是国内首个在全球范围内发起的分布式消息领域国际标准
- 特性
结构简单
、解析快
、有事务设计
、有持久化设计
- 使用该协议的中间件
Apache RocketMQ
Kafka协议
Kafka
协议是基于TCP的二进制协议。消息内部是通过长度来分隔,由一些基本数据类型组成。
- 特性
结构简单
、解析快
、无事务设计
、有持久化设计
- 使用该协议的中间件
Kafka
持久化
持久化是什么
简单来说就是将数据存入磁盘,而不是存在内存中随服务重启而消失,使数据能够永久保存叫做持久化。
常用的持久化方式
消息分发
为什么要有消息分发策略
常用的消息中间件消息分发策略
高可用
高可用机制
高可用性
是指产品在规定的条件和规定的时刻或时间区间内处于可执行规定功能状态的能力。
当业务量大时,一台消息中间件服务器可能无法满足需求,所以需要消息中间件能够集群部署,来达到高可用的目的。
Master-Slave主从共享数据的部署方式
Master-Slave主从同步部署方式
Broker-Cluster多主集群同步部署方式
Broker-Cluster多主集群转发部署方式
Mastrer-Slave与Broker-Cluster结合
高可靠
高可靠是什么
高可靠性是指系统可以无故障地持续运行。比如一个系统从来不崩溃、报错,或者崩溃、报错的机率较低,那就是高可靠。
在高并发业务场景下,如果不能保证系统的高可靠,那造成的损失将会非常严重。
保证消息中间件的高可靠性,可以从以下几方面考虑
消息传输可靠
:通过协议来保证系统间数据解析的正确性。
消息存储可靠
:通过持久化来保证消息的存储可靠性。