MQ之首篇分布式消息中间件的设计

分布式系统:

直白说就是你的一套软件部署在不同的机器上(子系统),子系统之间通过通信协调行动

分布式系统的两个特点:

1>组件分布在网络计算机上

2>组件之间通过消息来协调行动

中间件:

中间件被描述为为应用程序提供操作系统所提供的服务之外的服务,简化应用程序的通信、输入输出的开发,使他们专注于自己的业务逻辑。

另一种说法:

利用高效可靠的消息传递机制进行平台无关的数据交流;

并基于数据通信来进行分布式系统的集成;

通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信;

 

直白的说:中间件是处于“中间层”的组件,是上层的应用程序和底层的服务之间的桥梁(比如DB中间件的上层是应用程序,底层是DB服务),也是应用与应用之间的桥梁(比如分布式服务组件),应用之间通过消息交互

分布式消息中间件:

支持在分布式系统中发送和接受消息的硬件或软件基础设施,此处讲都是软件,软件,软件

使用场景:https://blog.****.net/zhuhaoyu6666/article/details/103143366

业务解耦/跨系统数据传递:交易系统不需要知道短信通知服务的存在,只需要发布消息

削峰填谷/高并发流量削峰:比如上游系统的吞吐能力高于下游系统,在流量洪峰时可能会冲垮下游系统,消息中间件可以在峰值时堆积消息,而在峰值过去后下游系统慢慢消费消息解决流量洪峰的问题

事件驱动:系统与系统之间可以通过消息传递的形式驱动业务,以流式的模型处理

数据异步处理

5大核心组成:

协议、持久化机制、消息分发机制、高可用设计、高可靠设计

协议

协议是计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能相互交流。是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。

协议3要素:语法、语义、时序(同步、先后顺序)

语法:数据与控制信息的结构或格式

语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;

时序:事件实现顺序的详细说明

 

常用协议:

http协议3要素举例:

语法:http规定请求报文和响应报文的具体格式

语义:客户端主动发起的操作成为请求、服务器对客户端请求的回应叫响应

时序:一个请求对应一个响应,请求在前,响应在后

消息中间件常用的协议:OpenWire、AMQP、MQTT、Kafka、OpenMessage

 

为什么消息中间件不之间使用http协议?

 

AMQP协议:advanced Message Queuing Protocol  高级消息队列协议   RabbitMQ、ActiveMQ

特性:事务支持、持久化支持、出生金融行业,在可靠性消息处理上具备天然的优势

 

MQTT协议:Message Queuing Telementry Transport 消息队列遥测传输,是IBM开发的一个即时通讯协议、物联网系统架构中的重要组成部分

特性:轻量、结构简单、传输快、没有事务支持、没有持久化相关设计

应用场景:使用于计算能力有限、低带宽、网络不稳定的场景     RabbitMQ、ActiveMQ

 

Open Message协议:RocketMQ

是近一两年由阿里发起、与雅虎、滴滴出行、Streamlio等公司共同参与并创立的分布式消息中间件、流处理领域的应用开发表标准

特性:结构简单、解析快、有事务设计、有持久化设计

 

Kafka协议: Kafka

基于TCP的二进制协议。消息内部是通过长度来分隔,由一些基本数据类型组成。

特性:结构简单、解析快、无事务设计、有持久化设计

 

持久化

 

 

就是把数据存入磁盘,不随重启而消失,使数据永久保存叫做持久化

MQ之首篇分布式消息中间件的设计

常用持久化方式:

MQ之首篇分布式消息中间件的设计

 数据到-->mq-->存储

消息分发

MQ之首篇分布式消息中间件的设计

MQ之首篇分布式消息中间件的设计

 

 

 

常用的消息中间件分发策略:

MQ之首篇分布式消息中间件的设计

 

 

高可用

指产品在规定的条件和规定的时刻或时间区间内处于可执行规定功能状态的能力

当业务量大时i,一台消息中间件服务器可能无法满足需求,所以需要消息中间件能够集群部署、来达到高可用的目的。

Mater-Slaver主从共享数据的部署方式:

MQ之首篇分布式消息中间件的设计

 

Master-Slaver主从同步部署方式:

MQ之首篇分布式消息中间件的设计

 

Broker-Cluster多主集群同步部署方式

 

MQ之首篇分布式消息中间件的设计

Broker-Cluster多主集群转发部署方式

MQ之首篇分布式消息中间件的设计

 

主从 + 集群:

MQ之首篇分布式消息中间件的设计

 

 

 

 

高可靠

 

指系统可以无故障地持续运行,比如一个系统从来不崩溃、报错或崩溃、报错的几率较低,那就是高可靠。在高并发业务场景下,如果不能保证系统的高可靠,那造成的损失将会非常严重。

保证消息中间件的高可靠性,可以从以下几个方面考虑

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