分布式消息中间件设计篇

mac2024-11-25  36

为什么要用到分布式消息中间件

架构的演变历程

单体架构

所有的代码、模块都在一个项目中 耦合度高

分布式系统架构

基于消息中间件的分布式系统架构

消息中间件概述

什么是消息中间件 利用高效可靠的消息传递机制进行平台无关的数据交流; 并基于数据通信来进行分布式系统的集成; 通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程建的通信;

消息中间件的应用场景 跨系统数据传递、高并发流量削峰、数据异步处理…等等

常用的消息中间件 ActiveMQ、RabbitMQ、Kafka、RocketMQ

消息中间件核心设计

本质 一种具备接收请求、保存数据、发送数据等功能的网络应用。 和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般都高于普通程序

5大核心组成 协议 持久化机制 消息分发机制 高可用设计 高可靠设计

协议

协议是什么

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

协议三要素

语法:即数据与控制信息的结构或格式;语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;时序(同步):即事件实现顺序的详细说明。

常见协议

Http协议三要素举例: 语法:http规定了请求报文和响应报文的具体格式 语义:客户端主动发起的操作称为请求; 时序:一个请求对应一个响应。

消息中间件常用的协议

OpenWire、AMQP、MQTT、Kafka、OpenMessage

为什么消息中间件不直接使用Http协议?

http需要的内容太多,太复杂http大部分情况都是短连接,请求响应之后就会中断,而消息中间件会长期的连接

OpenWire协议 AMQP协议 MQTT协议 Kafka协议 OpenMessage协议

持久化

持久化是什么

简单来说就是将数据存入磁盘,而不是存在内存中随服务重启而消失,使数据能够永久保存叫做持久化。 例如:

常用持久化方式

ActiveMQRabbitMQKafkaRocketMQ文件系统支持支持支持支持数据库支持///

*文件系统:写入数据到特定格式的文件中

消息分发

为什么要有消息分发策略

一个mq可能对应多个消费者,那么需要可以正确的分发消息,保证一个消息只会被消费一次消息可能消费失败或者消费成功,消费失败需要重发策略

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

消费者获取消息的两种方式

ActiveMQRabbitMQKafkaRocketMQ发布订阅支持支持支持支持轮询分发支持支持支持/公平分发/支持支持/重发支持支持/支持消息拉取/支持支持支持

*发布订阅:可以指定某个队列或者某个topic主题去接收消息,mq标配功能 *重发:kafka是不支持重发的,因为kafka是consumer拉取消息 *公平分发:公平分发也就是能者多劳模式,当有消费者处理完成后,MQ就会继续给它分发消息,直到MQ中所有消息都被消费。

高可用

什么是高可用

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

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

高可用模式

Master-Slave主从共享数据的部署方式

Master-Slave主从同步部署方式

这种模式,写入只能在主服务器

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

存在多个主机,相互进行数据同步 这种模式,写入可以在多个主服务器写入

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

消息不会在多个主服务器之间同步,比如生产者将消息发送给broker-1,那么消息就会只存储在broker-1上 消息会产生对应的元数据(地址信息,哪条数据存放在哪个服务器上),元数据会在主服务器之间同步,同步元数据的开销比同步消息要小一些。 弊端:如果有一个节点挂掉,那么数据就无法读取出来

Master-Slave与Broker-Cluster结合

高可靠

高可靠是什么

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

保证消息中间件的高可靠性,可以从以下几方面考虑 消息传输可靠: 通过协议来保证系统间数据解析的正确性。 消息存储可靠: 通过持久化来保证消息的存储可靠性。

最新回复(0)