04第二章:03_集群搭建理论
作者:互联网
一、集群
二、数据复制与刷盘策略
复制策略
复制策略是 Broker 的 Master 与 Slave 间的数据同步方式。分为同步复制与异步复制:
- 同步复制:消息写入 master 后,master 会等待 slave 同步数据成功后才向 producer 返回成功 ACK
- 异步复制:消息写入 master 后,master 立即向 producer 返回成功 ACK,无需等待 slave 同步数据成功
异步复制策略会降低系统的写入延迟,RT 变小,提高了系统的吞吐量
刷盘策略
刷盘策略指的是 broker 中消息的落盘方式,即消息发送到 broker 内存后消息持久化到磁盘的方式。分为同步刷盘与异步刷盘:
- 同步刷盘:当消息持久化到 broker 的磁盘后才算是消息写入成功。
- 异步刷盘:当消息写入到 broker 的内存后即表示消息写入成功,无需等待消息持久化到磁盘。
1)异步刷盘策略会降低系统的写入延迟,RT 变小,提高了系统的吞吐量
2)消息写入到 Broker 的内存,一般是写入到了 PageCache
3)对于异步刷盘策略,消息会写入到 PageCache 后立即返回成功 ACK。但并不会立即做落盘操作,而是当 PageCache 到达一定量时会自动进行落盘。
三、Broker 集群模式
根据 Broker 集群中各个节点间关系的不同,Broker 集群可以分为以下几类:
单 Master
只有一个 broker(其本质上就不能称为集群)。这种方式也只能是在测试时使用,生产环境下不能使用,因为存在单点问题。
多 Master
broker 集群仅由多个 master 构成,不存在 Slave。同一 Topic 的各个 Queue 会平均分布在各个 master 节点上。
- 优点:配置简单,单个 Master 宕机或重启维护对应用无影响,在磁盘配置为 RAID10 时,即使机器宕机不可恢复情况下,由于 RAID10 磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
- 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费),消息实时性会受到影响。
以上优点的前提是,这些 Master 都配置了 RAID 磁盘阵列。如果没有配置,一旦出现某 Master 宕机,则会发生大量消息丢失的情况。
多 Master 多 Slave 模式-异步复制
broker 集群由多个 master 构成,每个 master 又配置了多个 slave(在配置了 RAID 磁盘阵列的情况下,一个 master 一般配置一个 slave 即可)。master 与 slave 的关系是主备关系,即 master 负责处理消息的读写请求,而 slave 仅负责消息的备份与 master 宕机后的角色切换。
异步复制即前面所讲的复制策略中的异步复制策略,即消息写入 master 成功后,master 立即向 producer 返回成功 ACK,无需等待 slave 同步数据成功。
该模式的最大特点之一是,当 master 宕机后 slave 能够自动切换为 master。不过由于 slave 从 master 的同步具有短暂的延迟(毫秒级),所以当 master 宕机后,这种异步复制方式可能会存在少量消息的丢失问题。
Slave 从 Master 同步的延迟越短,其可能丢失的消息就越少
对于 Master 的 RAID 磁盘阵列,若使用的也是异步复制策略,同样也存在延迟问题,同样也可能会丢失消息。但 RAID 阵列的秘诀是微秒级的(因为是由硬盘支持的),所以其丢失的数据量会更少。
多 Master 多 Slave 模式-同步双写
该模式是多 Master 多 Slave 模式的同步复制实现。所谓同步双写,指的是消息写入 master 成功后,master 会等待 slave 同步数据成功后才向 producer 返回成功 ACK,即 master 与 slave 都要写入成功后才会返回成功 ACK,也即双写。
该模式与异步复制模式相比,优点是消息的安全性更高,不存在消息丢失的情况。但单个消息的 RT 略高,从而导致性能要略低(大约低 10%)。
该模式存在一个大的问题:对于目前的版本,Master 宕机后,Slave不会自动切换到 Master。
最佳实践
一般会为 Master 配置 RAID10 磁盘阵列,然后再为其配置一个 Slave。即利用了 RAID10 磁盘阵列的高效、安全性,又解决了可能会影响订阅的问题。
1)RAID 磁盘阵列的效率要高于 Master-Slave 集群。因为 RAID 是硬件支持的。也正因为如此, 所以 RAID 阵列的搭建成本较高。
2)多 Master+RAID 阵列,与多 Master 多 Slave 集群的区别是什么?
多 Master+RAID 阵列,其仅仅可以保证数据不丢失,即不影响消息写入,但其可能会影响到消息的订阅。但其执行效率要远高于多 Master 多 Slave 集群
多 Master 多 Slave 集群,其不仅可以保证数据不丢失,也不会影响消息写入。其运行效率要低于多 Master+RAID 阵列
标签:异步,Slave,04,03,写入,Master,消息,master,第二章 来源: https://www.cnblogs.com/niujifei/p/16514961.html