之前《浅谈分布式CAP定理》简单介绍了数据在分布式系统中存在的必然定理。简单回顾一下,一个数据在一个节点需要同步到另外一个节点的过程中,在未完成同步的时候,会出现数据不一致的情况,所以此时必然存在分区容错性(Partition tolerance)。分布式系统只能从一致性(Consistency)或可用性(Availability)之间去选择。
CAP讲的是分布式一致性,而这次我们来聊聊分布式共识性。很多开发者一直以为一致性与共识性是同一个东西,但两者讲的是完全不同的东西。
- 一致性:A点同步B点数据,然后两者之间的数据可以达成一致。
- 共识性:一个或多个节点提议了一个值应当是什么后,采用一种大家都认可的方法,使得系统中所有进程对这个值达成一致意见。
共识性比较常见的场景就是选主,例如redis主挂掉了,集群通用共识性算法选出一个主。比特币之类的电子货币也需要更复杂的共识性算法。
下面我们一步步聊下分布式共识性的一些常见算法与问题。