作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ(本章节)
我们在Rabbitmq部署的时候,介绍过RabbitMQ的数据依赖主机名进行持久化,但是实际上在RabbitMQ里面还有内存节点和硬盘节点的概念,下面我们就来介绍这2个概念。
核心概念:元数据 (Metadata) 是关键
什么是元数据? 指描述 RabbitMQ 结构的数据,而非消息体本身。包括:队列名称,属性(是否持久化、是否自动删除等)交换机名称、类型、绑定关系虚拟主机信息用户权限策略定义,可以简单理解如果就是我们手工在RabbitMQ里面创建配置的信息(不包括消息信息)都是元数据。
硬盘节点 (Disk Node)
工作原理: 将集群的元数据持久化存储到本地磁盘。
核心特性:持久性,节点重启或集群恢复时,元数据不会丢失。这是集群可靠性的基石。可靠性优先,元数据的写入需要磁盘 I/O 操作,速度相对较慢。
默认类型: RabbitMQ 节点默认启动为磁盘节点。
优点:元数据安全: 确保集群结构信息在故障后能完整恢复。
集群启动基石: 集群首次启动或需要从故障中恢复时,必须有至少一个可用的磁盘节点提供元数据(集群模式的情况下)。
缺点:性能开销: 元数据操作(如创建队列、交换机、绑定)涉及磁盘 I/O,速度慢于内存节点。如果你不是超大规模使用问题不到。
适用场景:集群中的“锚点”: 必须存在至少一个(强烈推荐多个)磁盘节点。
核心基础设施定义: 存储需要长期存在、高可用的队列、交换机定义和绑定关系。对元数据持久性要求极高的场景。
内存节点 (RAM Node)
工作原理: 将集群的元数据完全存储在内存中,多节点组成集群才会涉及。
核心特性:高性能,元数据的读写操作完全在内存中进行,速度极快。易失性,节点重启或故障后,其内存中的元数据会丢失。
依赖磁盘节点: 内存节点本身无法持久化元数据。它依赖集群中的磁盘节点来持久化元数据,并在启动时从磁盘节点同步元数据。
优点:极速响应,元数据操作(队列/交换机/绑定创建/删除)性能卓越。减轻磁盘压力: 减少集群整体的磁盘 I/O 操作(针对元数据)。
缺点:元数据易失,节点重启导致本地元数据丢失。重启后需从磁盘节点重新同步。非独立存在: 集群中必须存在至少一个可用的磁盘节点,否则内存节点无法启动或正常工作。
适用场景:动态性高、生命周期短,大量需要频繁创建和销毁的临时队列、交换机(如某些 RPC 模式、临时工作队列)。对元数据操作性能要求极高的场景,需要极短时间内完成大量队列/交换机定义变更。
作为磁盘节点的性能扩展: 在保证至少一个磁盘节点提供持久性的前提下,加入内存节点提升集群整体元数据操作吞吐量。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。