消息中间件的设计
消息中间件的设计
一、什么是消息中间件
消息中间件的运用
上图是一个基于消息中间件的分布式系统架构。
用户想要实现某种功能,比如注册、创建订单、支付等。并没有通过前台系统直接去调用其他的子系统。而是将这个请求包装成消息和数据,暂时存放在消息中间件中。而其他子系统接受到这些消息后会去处理对应的请求。
好处:
解决系统之间的耦合。我们并没有实现系统与系统之间的直接调用。而是通过中间件的转换。
因此,什么是消息中间件:
- 利用可靠的消息传递机制进行平台无关的*数据交流**。
- 基于数据和消息来进行分布式系统的集成。
- 通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
应用场景:
跨系统数据传递、高并发流量削峰、数据异步处理……
常见的消息中间件:
ActiveMQ
、RabbitMQ
、kafka
、RocketMQ
……
二、消息中间件核心设计
本质:
一种具备接受请求、保存数据、发送数据等功能的网络应用。
和其他的应用程序不同,消息中间件不会去处理复杂的业务逻辑,因此,它的效率会更高。
消息中间件的核心:
- 协议
- 持久化机制
- 消息分发机制
- 高可用、好可靠设计
1、协议
协议是:计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能交流。
1 |
|
常用的消息中间件协议:
OpenWire
、AMQP
、MQTT
、Kafka
、OpenMassage
为什么不使用HTTP协议呢?
HTTP语法中规定了太多的请求头、响应头等。这对于消息中间件来说是不需要的。影响数据传输效率。
2、持久化
就是将数据存入磁盘中,如果在内存中,服务重启就会消失。
常见的持久化机制有两种:存储在文件中、存储在数据库中
不同的消息中间件支持不同的持久化机制。
4、消息分发
场景一:消息中间件需要将消息正确的发送到子系统中。
场景二:消息中间件在业务逻辑失败后可以重新发送。
常见消息中间件的发送策略:
5、高可用
高可用是指:产品在规定的条件和规定的时刻内处于可执行规定功能状态的能力。
因此:
当业务量大时,一台消息中间件服务器可能无法满足需求,所以需要消息中间件集群部署。
问题:和MySQL
、Redis
等集群一样,这些都是存放数据的。这时候需要考虑数据共享的问题了。
解决方法一:基于主从共享数据的部署方式
客户端将数据存放在主服务器中,然后数据就会存放在文件系统中,而其他的从服务器想要得到数据,就从文件系统中读取。
解决方法二:基于主从同步的部署方式
生产者发送数据到中间件,消息会同步到其他的中间件上。
解决方法三:多主集群转发部署方式
消息中间件的集群之间知道消费者想要的数据在哪里,通过中间件之间转发,发送给消费者。
6、高可靠
高可靠是指:系统可以无故障地持续运行。比如一个系统从来不崩溃、报错或者概率很低。
消息中间件中的高可靠:
- 消息传输可靠:协议来保证系统间数据解析的正确性
- 消息存储可靠:持久化保证存储可靠性