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如何运作的