ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
来源:互联网 发布:科普数据米兔医讯 编辑:程序博客网 时间:2024/06/06 09:10
1)一致性保证
Zookeeper 是一种高性能、可扩展的服务。 Zookeeper 的读写速度非常快,并且读的速度要比写的速度更快。另外,在进行读操作的时候, ZooKeeper 依然能够为旧的数据提供服务。这些都是由于 ZooKeepe 所提供的一致性保证,它具有如下特点:
顺序一致性
客户端的更新顺序与它们被发送的顺序相一致。
原子性
更新操作要么成功要么失败,没有第三种结果。
单系统镜像
无论客户端连接到哪一个服务器,客户端将看到相同的ZooKeeper 视图。
可靠性
一旦一个更新操作被应用,那么在客户端再次更新它之前,它的值将不会改变。。这个保证将会产生下面两种结果:
1 .如果客户端成功地获得了正确的返回代码,那么说明更新已经成果。如果不能够获得返回代码(由于通信错误、超时等等),那么客户端将不知道更新操作是否生效。
2 .当从故障恢复的时候,任何客户端能够看到的执行成功的更新操作将不会被回滚。
实时性
在特定的一段时间内,客户端看到的系统需要被保证是实时的(在十几秒的时间里)。在此时间段内,任何系统的改变将被客户端看到,或者被客户端侦测到。
给予这些一致性保证,ZooKeeper 更高级功能的设计与实现将会变得非常容易,例如:leader 选举、队列以及可撤销锁等机制的实现。
2)Leader选举
ZooKeeper 需要在所有的服务(可以理解为服务器)中选举出一个 Leader ,然后让这个 Leader 来负责管理集群。此时,集群中的其它服务器则成为此Leader 的 Follower 。并且,当 Leader故障的时候,需要 ZooKeeper 能够快速地在 Follower 中选举出下一个Leader 。这就是 ZooKeeper 的 Leader机制,下面我们将简单介绍在 ZooKeeper中, Leader 选举( Leader Election )是如何实现的。
此操作实现的核心思想是:首先创建一个EPHEMERAL 目录节点,例如“ /election ”。然后。每一个 ZooKeeper 服务器在此目录下创建一个 SEQUENCE| EPHEMERAL 类型的节点,例如“ /election/n_ ”。在 SEQUENCE标志下, ZooKeeper 将自动地为每一个 ZooKeeper 服务器分配一个比前一个分配的序号要大的序号。此时创建节点的 ZooKeeper 服务器中拥有最小序号编号的服务器将成为 Leader 。
在实际的操作中,还需要保障:当Leader 服务器发生故障的时候,系统能够快速地选出下一个ZooKeeper 服务器作为 Leader 。一个简单的解决方案是,让所有的 follower 监视 leader所对应的节点。当 Leader 发生故障时, Leader 所对应的临时节点将会自动地被删除,此操作将会触发所有监视Leader 的服务器的 watch 。这样这些服务器将会收到 Leader 故障的消息,并进而进行下一次的 Leader 选举操作。但是,这种操作将会导致“从众效应”的发生,尤其当集群中服务器众多并且带宽延迟比较大的时候,此种情况更为明显。
在 Zookeeper 中,为了避免从众效应的发生,它是这样来实现的:每一个 follower 对 follower集群中对应的比自己节点序号小一号的节点(也就是所有序号比自己小的节点中的序号最大的节点)设置一个watch 。只有当 follower 所设置的 watch被触发的时候,它才进行 Leader 选举操作,一般情况下它将成为集群中的下一个 Leader 。很明显,此 Leader 选举操作的速度是很快的。因为,每一次Leader 选举几乎只涉及单个 follower 的操作。
- ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
- ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
- ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
- ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
- ZooKeeper的一致性保证及Leader选举
- Zookeeper的Leader选举
- Zookeeper的Leader选举
- Zookeeper的Leader选举
- Zookeeper的leader选举
- Zookeeper的Leader选举
- Zookeeper系列(三十三)Zookeeper之leader选举算法补充
- Zookeeper-Zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper系列(十四)Zookeeper开源客户端之Curator的Master/Leader选举
- matlab sort()升序和降序
- Linked List Cycle
- ZooKeeper系列之九:ZooKeeper API简介及编程
- 文件读写问题
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
- 如何用ATL写一个C++的COM组件(C#轻松调用C/C++接口)
- Java clone()
- 杭电oj-1164-Eddy's research I
- Linux学习2之shell脚本计算代码段运行的时间(精确到毫秒)
- wpf改变默认的窗口边框大小,去掉边框,并且可以拖动大小
- Android应用程序插件化研究之AssetManager
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- 解决使用tomcat6-maven-plugin时的"can not invoke tomcat manager"问题