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