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