WAIT命令可以在Redis中提供强一致性吗?

时间:2015-11-10 11:51:44

标签: redis consistency redis-sentinel redis-cluster

问候溢出者,

在Redis哨兵/群集设置中,我们是否可以使用WAIT命令和从属总数来确保Redis服务器之间的一致性?为什么不呢?

亲切的问候

1 个答案:

答案 0 :(得分:13)

WAIT为Redis实现同步复制。同步复制是必需的,但不足以以实现强一致性。强一致性实际上是两件事的总和:

  1. 同步复制到分布式系统上的大多数节点。
  2. 一种协调领导层变更的方法(基本上是故障转移),以确保只保留一个节点,保留前一个领导者中已确认操作的完整历史记录。
  3. WAIT不提供“2”。 Redis中的复制过程由Sentinel或Redis Cluster执行,并且无法提供属性2(因为Redis中的同步复制不是规则的异常,因此没有太多关注该方面)。但是,Redis复制的作用是尝试提升出现的从属设备以保留最大量的数据。虽然这不会改变Redis故障转移的理论保证,但仍然会丢失已确认的写入,这意味着如果使用WAIT,则有更多的从属服务器在其内存中具有给定的操作,反过来它也是很多更有可能的是,在发生故障转移时,将保留该操作。但是,虽然这将使失败模式丢弃难以触发的已确认操作,但始终存在具有此属性的故障模式。

    TLDR: WAIT不会使Redis可线性化,它的作用是确保指定数量的从服务器将接收写入,从而使故障转移更加强大,但是没有任何艰难的保证。