ZooKeeper重点知识总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/carson0408/article/details/84260425

1.ZooKeeper的概念及特点

概念:ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

特点:

1.顺序一致性:从同一个客户端发起的事务请求,按照发起顺序被应用到ZooKeeper中去。理由:因为客户端ClientCnxn类中有两个队列分别为outgoingQueue和pendingQueue,它俩分别用来存储客户端的请求和服务端的响应。sendThread会从outgoingQueue队列中依次发送请求,并将packet保存到pendingQueue,以便等待服务端响应返回后进行相应的处理,同时请求响应返回后,客户端会从pendingQueue队列取出一个Packet进行处理,并验证服务端响应包含的XID来保证请求处理的顺序性。整个流程都是顺序一致性的。

2.原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的。ZooKeeper基于ZAB协议的,ZooKeeper Atomic Broadcast(原子广播协议)。

3.单一视图:无论客户端连接哪个ZooKeeper服务器,其看到的服务端数据模型是一致的。

4.可靠性

5.实时性

2.ZAB协议

ZAB协议的核心:所有事务请求必须由一个全局唯一的服务器即Leader服务器来协调处理,并且会为每个事务设置一个全局递增的ID,叫作ZXID,来保证请求处理的顺序。除Leader服务器之外的叫作Follower服务器。Leader服务器负责将一个客户端事务请求转换成一个事务Proposal,并将该Proposal分发给集群中所有的Follower服务器,之后Leader服务器需要等待所有Follower服务器的反馈,一旦半数的Follower进行了正确的反馈后,那么Leader就会再次向所有的Follower服务器分发Commit消息,要求其将前一个Proposal进行提交。

ZAB:通过了过半成功写来优化了二阶段提交协议,优化了同步阻塞问题。

3.ZooKeeper中事务的概念

ZooKeeper中会应用并改变内存数据库的操作叫作事务,比如插入节点、删除节点、子节点列表变化等。反之,就是非事务。

在ZooKeeper中,需要注意的是,事务都由Leader处理,而Follower服务器只能自行处理非事务。非Leader接收到事务会把事务转发给Leader服务器。

4.ZooKeeper中几个重要的概念

1.节点

节点中需要注意的是临时节点和顺序节点,临时节点主要应用于服务器的注册,服务器连接断开临时节点便会自行清理,可以通过这个特点,判断ZooKeeper服务器之间的是否连接,比如Leader和Follower之间有没有连接。顺序节点则可以利用作为共享锁,利用顺序节点会自动配一个顺序id的特性。从而根据顺序控制来保证共享锁的机制。

2.Watcher机制

ZooKeeper中的Watcher都是一次性的,即触发之后便失效,需要每次注册。ZKClient则是通过内部封装改善了这个特点,内部通过使用执行事务之后便重新注册,使得wathcer一直都存在。

Watcher会引发数据变更的通知,因此ZooKeeper引入了Watcher机制来实现分布式的通知功能。比如分布式经典的应用就是数据发布/订阅功能。发布者将某个主题对象发布在ZooKeeper上,其余多个订阅者则在该节点上注册Watcher监听,等到节点发生变化,就会通知订阅者。

猜你喜欢

转载自blog.csdn.net/carson0408/article/details/84260425
今日推荐