从Raft角度看Half Master/Master(两层解耦)

2022-04-15 00:00:00 集群 模式 分布式 底层 单点

## 什么是Half Master/Master

Half Master/Master是我创建的词,其是为解决下面的问题:

为了获得Master/Master的好处,同时,能保证一致性

### 什么是Master/Master的好处

请参考这个文章: [BunnyRedis要解决Redis的高可用HA问题]

简而言之,

我们可以不通过Shard的方式,就横向扩展scale-out写Write,并且是强一致

因为,Master是可写可读的,但实际生产环境中,一个机器大部分都是读,所以,对于一个Shard(或无Shard)只用一个Master机器实际是浪费了写Write的能力。

但麻烦在于,写Write对于集群一致性有重大挑战。

### 如何保证Master/Master的强一致

纯粹的Master/Master实际是不能保证强一致的,请参考下文

[BunnyRedis要解决Redis的一致性Consistency问题]

里面有详细的分析,为什么Master/Master不能做到强一致。

我们必须用一个强一致的非Master/Master先去达到强一致并作为底层,然后才可以再在其上,去构建必须依赖这个底层的上层的Master/Master,然后才能保证这个Master/Master组件的强一致。

这就是Half Master/Master,即两层结构,下面一层是强一致的非Master/Master,然后基于它,再实现强一致的Master/Master上层。

再抄录文中一段描述文字如下

即你的整个集群cluster系统里,必须至少有一个组件(一般是底层组件)不采用master/master模式,
从而保证一致性。

但是其他依赖这个底层集群组件的上层集群组件,可以用master/master模式,
从而可以达到整个系统的强一致,同时获得master/master的好处。

相关文章