消息中间件的设计

消息中间件的设计

一、什么是消息中间件

消息中间件的运用

消息中间件实例

上图是一个基于消息中间件的分布式系统架构。

用户想要实现某种功能,比如注册、创建订单、支付等。并没有通过前台系统直接去调用其他的子系统。而是将这个请求包装成消息和数据,暂时存放在消息中间件中。而其他子系统接受到这些消息后会去处理对应的请求。

好处:

解决系统之间的耦合。我们并没有实现系统与系统之间的直接调用。而是通过中间件的转换。

因此,什么是消息中间件:

  1. 利用可靠的消息传递机制进行平台无关*数据交流**。
  2. 基于数据和消息来进行分布式系统的集成。
  3. 通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信

应用场景:

跨系统数据传递、高并发流量削峰、数据异步处理……

常见的消息中间件:

ActiveMQRabbitMQkafkaRocketMQ……

二、消息中间件核心设计

本质:

一种具备接受请求、保存数据、发送数据等功能的网络应用。

和其他的应用程序不同,消息中间件不会去处理复杂的业务逻辑,因此,它的效率会更高。

消息中间件的核心:

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

1、协议

协议是:计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能交流。

1
2
3
4
协议的三要素:
1. 语法:数据与控制信息的结构或格式
2. 语义:需要发出何种控制信息,完成何种动作以及做出何种响应
3. 时序:事件实现顺序的详细说明

常用的消息中间件协议:

OpenWireAMQPMQTTKafkaOpenMassage

为什么不使用HTTP协议呢?

HTTP语法中规定了太多的请求头、响应头等。这对于消息中间件来说是不需要的。影响数据传输效率。

2、持久化

就是将数据存入磁盘中,如果在内存中,服务重启就会消失。

持久化

常见的持久化机制有两种:存储在文件中、存储在数据库中

不同的消息中间件支持不同的持久化机制。

常见的持久化机制

4、消息分发

场景一:消息中间件需要将消息正确的发送到子系统中。

消息分发场景1

场景二:消息中间件在业务逻辑失败后可以重新发送

消息分发场景2

常见消息中间件的发送策略:

发送策略

5、高可用

高可用是指:产品在规定的条件和规定的时刻内处于可执行规定功能状态的能力。

因此:

当业务量大时,一台消息中间件服务器可能无法满足需求,所以需要消息中间件集群部署

问题:和MySQLRedis等集群一样,这些都是存放数据的。这时候需要考虑数据共享的问题了。

解决方法一:基于主从共享数据的部署方式

客户端将数据存放在主服务器中,然后数据就会存放在文件系统中,而其他的从服务器想要得到数据,就从文件系统中读取。

主从部署

解决方法二:基于主从同步的部署方式

生产者发送数据到中间件,消息会同步到其他的中间件上。

同步部署

解决方法三:多主集群转发部署方式

消息中间件的集群之间知道消费者想要的数据在哪里,通过中间件之间转发,发送给消费者。

多主集群

6、高可靠

高可靠是指:系统可以无故障地持续运行。比如一个系统从来不崩溃、报错或者概率很低。

消息中间件中的高可靠:

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

消息中间件的设计
https://johnjoyjzw.github.io/2021/07/09/消息中间件的设计/
Author
John Joy
Posted on
July 9, 2021
Licensed under