zookeeper自问自答

1 zk如何保证下面这些的?

        ZooKeeper 非常快速且非常简单。但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。这些是:

顺序一致性 - 来自客户端的更新将按发送顺序应用--这个由zid(每个操作都会有个累加id)和队列保证

原子性 - 更新要么成功要么失败。没有部分结果。(主进行的更改操作,都需哟选举过半,如果不过半需要回滚)

单一系统映像 - 无论客户端连接到哪个服务器,它都会看到相同的服务视图。即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。(通过sync 同步实现,因为过半写的特点,所以从节点数据有可能不一致,读取的时候可以先执行sync 同步主的最新数据)

可靠性 - 应用更新后,它将从那时起持续存在,直到客户端覆盖更新。(主挂了可以选举,集群可以承受小于一半的机器挂掉还能正常跑)

及时性 - 系统的客户视图保证在特定时间范围内是最新的。

2 zk分布式锁如何实现的

3 zk选举过程

        ZAB实现了选举和数据同步

4 zk如何实现每个session会话顺序执行的

        队列,执行zid事务id累加的。

5 zk选举主节点会出现不可用吗?怎么是高可用?

        选举-高可用

        1 zk通过选举实现高可用,主挂了从通过选举选出主

        2 zk选举会有不可用状态,会停止服务

        3 zk选举很快,200毫秒内,没有出现坍塌(只不可用)

6当现有从节点挂掉,或者有新的从节点加入进来,集群是怎么运作的?

        心跳

7 因为数据是最终一致,那如果master做了操作只同步了3个节点还有一个节点没同步到数据,这个时候别的客户端读到了老数据,不就不一致了吗?

查询

当会话(zk客户端)查询当前接入的从节点(follower)的时候 从节点会去主节点(leader)去同步最新的数据然后给zk客户端。

问题:那从节点每次都要问一下主节点要最近数据,那丛节点存数据干嘛?

从节点存数据是解决数据持久的问题,而每次询问是解决数据最新避免脏数据问题。

更新

当前会话(zk客户端)做更新操作提给从节点(follower),从节点会把这个操作提给主节点(leader),只有主节点才有权利变更数据,主节点会发送广播,通知所有节点变更,主节点收到过半通过后,然后发送成功的通知(两阶段提交),然后从节点就有了最新的数据。

问题:如果两阶段提交,最后同意一些从节点没收到怎么办?

因为第一阶段数据已经存了,数据已经持久了,再下次查这个数据的时候,从节点会询问主节点从而获得最新的数据。

leader挂了

会进行选举,选举期间,拒绝所有请求。

问题:那不就不可用了吗?

根据实际官网测试,选举会小于200毫秒,实际再5万左右并发的情况下,并没有造成不可用。

8 zk与dubbo如何运作的

猜你喜欢

转载自blog.csdn.net/u010191034/article/details/121380297
今日推荐