数据复制与刷盘策略

复制策略

Broker的Master与Slave的数据同步方式分为同步复制与异步复制

  • 同步复制:消息写入master,master等待slave同步数据成功再向生产者返回成功ack
  • 异步复制:消息写入master直接返回ack

异步复制策略会降低系统的写入延迟,提高了系统的吞吐量

刷盘策略

指的是broker中消息的落盘方式,即消息从broker内存持久化到磁盘的方式,即上文的消息写入master的具体方式。分为同步刷盘与异步刷盘:

  • 同步刷盘:消息持久化到broker的磁盘中才算消息写入成功
  • 异步刷盘:写入到broker内存中就算消息写入成功

异步刷盘策略会降低系统的写入延迟,提高了系统的吞吐量

消息写入内存一般是写入PageCache对于异步刷盘,不会在写入PageCache后立刻落盘,而是PageCache达到一定量时自动进行落盘。

Broker集群模式

多Master

broker集群仅由多个master构成,不存在slave

优点:

  • 配置简单
  • 单个master宕机或重启维护对应用无影响。
    • 在磁盘配置为RAD10时,即使机器宕机不可恢复,消息在同步刷盘的策略下也不会丢(异步刷盘会丢失少量消息)

缺点:

  • 单台宕机,这个机器上未被消费的消息在机器恢复之前不可以消费

多Master多Slave模式(异步复制)

broker集群由多个master构成,每个master又配置了多个slave(在配置了RAID磁盘阵列的情况下,一 个master一般配置一个slave即可)。

使用的是异步复制策略,master宕机后能够自动将slave切换为master。不过存在延迟问题导致消息丢失。

RAID磁盘阵列用的也是异步复制的策略,但延迟是微秒级的,所以其丢失的数据量较少。

多Master多Slave模式(同步双写)

该模式是多Master多Slave模式的同步复制实现。所谓同步双写,指的是消息写入master成功后, master会等待slave同步数据成功后才向producer返回成功ACK,即master与slave都要写入成功后才会返回成功ACK。

优点:

        消息的安全性更高,不存在消息丢失的情况。但单个消息的RT略高,从而导致性能要略低(大约低10%)。

缺点:

        当 Master 节点挂掉后,Slave 节点不会自动转为 Master,需要依赖 NameServer 的故障检测手动或自动的主从切换机制 来完成角色转换。

最佳实践

为Master配置RAID磁盘阵列+单slave。

master+RAID磁盘阵列与多master多slave对比

  • RAID效率更高,搭建成本更高
  • 多Master+RAID阵列,其仅仅可以保证数据不丢失,但其可能会影响到消息的订阅。但其执行效率要远高于多Master多Slave集群
  • 多Master多Slave集群,其不仅可以保证数据不丢失。其运行效率要低于多Master+RAID阵列

RAID磁盘阵列

关键技术

镜像技术

  • 对于 RAID 而言,采用镜像技术最典型地的用法就是同时在磁盘阵列中产生两个完全相同的数据副本,并且分布在两个不同的磁盘上。
  • 当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。失效的副本直接复制有效副本即可完成故障修复。
  • 并发读,但不能并行写
  • 需要双倍存储空间

数据条带技术

  • 一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上。这就能使多个进程可以并发访问数据的多个不同部分,从而极大地提升I/O性能。

数据校验技术

  • RAID 要在写入数据的同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。当数据出错时,根据存入的校验数据重建出错的数据。
  • 相比于镜像技术,需要空间小,但计算量大,要求计算机运算速度,且必须使用硬件RAID控制器。检验技术复杂。

分类

  • 软RAID: 所有功能均有操作系统和 CPU 来完成。
  • 硬RAID: 配备了专门的 RAID 控制处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源。
  • 混合RAID: 具备 RAID 控制处理芯片,但没有专门的I/O 处理芯片,需要 CPU 和驱动程序来完成 。

等级

JBOD

JBOD将多个磁盘串联起来,形成一个巨大的逻辑磁盘

JBOD 的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。JBOD 存储性能完全等同于单块磁盘,而且也不提供数据安全保护

RAID0

RAID0是一种简单的、无数据校验的数据条带化技术

实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。

RAID0 将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问

RAID1

RAID1 就是一种镜像技术,它将数据完全一致地分别写到工作磁盘和镜像磁盘。

一旦工作磁盘发生故障,系统将自动切换到镜像磁盘

RAID10

RAID10是一个RAID1与RAID0的组合体,所以它继承了RAID0的快速和RAID1的安全。

先做条带,再做镜像。把即将进来的数据先分散到不同的磁盘,再将磁盘中的数据做镜像。

RAID01

先做镜像再做条带。即将进来的数据先做镜像,再将镜像数据写入到与之前数据不同的磁盘,即再做条带。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐