raft算法

CAP理论

对于一个分布式系统,不可能同时满足以下三点:

  • 一致性(Consistence):在同一时刻所有节点的数据都是一样的。

    • 最终一致性。所有结点的数据并不是立刻一样的,而是在将来的某一个时刻会满足一致性。
    • 强一致性。
  • 可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。

  • 分区容错性(Partition Tolerance):分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障.比如,某个服务器宕机了,集群仍能够对外提供服务

一个分布式系统不可能同时满足三个特性,最多只可以满足两个,而分区容错性又是我们必须要满足的,因此,一致性和可用性我们只能满足两个。这里的一致性是强一致性,即在同一时刻,所有节点的数据都是一致的。假如我们选择了可用性,放弃了强一致性,可以使用最终一致性来解决。

在满足了分区容错性P后,想要满足一致性C,一个服务的多个节点之间就必须进行数据复制达到数据一致之后再返回给调用者响应,然而在多个节点数据复制的过程中,可能节点之间会出现网络等问题使得数据复制阻塞或失败导致响应超时,服务调用失败,这就失去了系统的可用性A。

​ 如果不强制满足强一致性,那在服务被调用的时候不用管数据复制的问题,直接返回响应,这就满足了可用性,但是由于此服务的多个节点数据可能没有完成复制,节点数据可能不一致,这就失去了系统的一致性。

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。CA之间的取舍要根据实际业务来决定,比如银行转账业务,我们必须要保证他的一致性。比如电商业务,一致性就没那么重要了,可以尽可能保证他的高可用性。

强一致性

主从同步

主从同步复制。
1.Master接受写请求。
2.Master复制日志到slave
3.Master等待,直到所有slve返回成功的消息。
缺点:一个slave失败,会导致Mater阻塞,从而导致整个集群阻塞,可用性低

多数派

有N/2个slave返回写入成功即成功。