从Paxos到Zookeeper:分布式一致性原理与实践

倪超
问题的提出 在计算机科学领域,分布式一致性问题是一个相当重要,且被广泛探索与论证的问题,通常存在于诸如分布式文件系统、缓存系统和数据库等大型分布式存储系统中。 什么是分布式一致性?分布式一致性分为哪些类型?分布式系统达到一致性后将会是一个什么样的状态?如果失去了一致性约束,分布式系统是否还可以依赖?如果一味地追求一致性,对系统的整体架构和性能又有多大影响?这一系列的问题,似乎都没有一个严格意义上准确的定义和答案。 终端用户 IT技术的发展,让我们受益无穷,从日常生活的超市收银,到高端精细的火箭发射,现代社会中几乎所有行业,都离不开计算机技术的支持。 尽管计算机工程师们创造出了很多高科技的计算机产品来解决我们日常碰到的问题,但用户只会倾向于选择一些易用、好用的产品,那些难以使用的计算机产品最终都会被淘汰——这种易用性,其实就是用户体验的一部分。 计算机产品的用户体验,可以分为便捷性、安全性和稳定性等方面。在本书中,我们主要讨论的是用户在使用计算机产品过程中遇到的那些和一致性有关的问题。在此之前,我们首先来看一下计算机产品的终端用户是谁,他们的需求又是什么。 火车站售票 假如说我们的终端用户是一位经常做火车的旅行家,通常他是去车站的售票处购买车票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行——一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车只剩下最后一张车票了,可能在同一时刻,不同售票窗口的另一位乘客也购买了同一张车票。假如说售票系统没有进行一致性保障,两人都购票成功了。而在检票口检票的时候,其中一位乘客会被告知他的车票无效——当然,现代的中国铁路售票系统已经很少出现这样的问题了,但在这个例子中,我们可以看出,终端用户对于我们的系统的需求非常简单: “请售票给我,如果没有余票了,请在售票的时候就告诉我票是无效票的。” 这就对购票系统提…