从Raft角度看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的好处。
相关文章