15.4.5 ZooKeeper的一致性保证
ZooKeeper是一种高性能、可扩展的服务。ZooKeeper的读写速度非常快,并且读的速度要比写更快。另外,在进行读操作的时候,ZooKeeper依然能够为旧的数据提供服务。这些都是由ZooKeeper所提供的一致性保证的,它具有如下特点:
(1)顺序一致性
客户端的更新顺序与它们被发送的顺序相一致。
(2)原子性
更新操作要么成功要么失败,没有第三种结果。
(3)单系统镜像
无论客户端连接到哪一个服务器,他将看到相同的ZooKeeper视图。
(4)可靠性
一旦一个更新操作被应用,那么在客户端再次更新它之前,其值将不会改变。这会保证产生下面两种结果:
如果客户端成功地获得了正确的返回代码,那么说明更新已经成功。如果不能够获得返回代码(由于通信错误、超时等原因),那么客户端将不知道更新操作是否生效。
当故障恢复的时候,任何客户端能够看到的执行成功的更新操作将不会回滚。
(5)实时性
在特定的一段时间内,客户端看到的系统需要被保证是实时的(在十几秒的时间里)。在此时间段内,任何系统的改变将被客户端看到,或者被客户端侦测到。
这些一致性得到保证后,ZooKeeper更高级功能的设计与实现将会变得非常容易,例如:leader选举、队列,以及可撤销锁等机制的实现。