1.在Zookeeper中,每一个数据节点都称为一个ZNode,所有的ZNode按层次化结构进行组织,形成一棵树。? 2.Zookeeper中的事务:指能够改变服务器状态的操作,比如节点的创建、删除等。每一个事务请求都会有? 一个全局唯一的事务ID。 3.节点特性:? 节点类型(节点的生命周期):持久节点、临时节点、顺序节点。 状态信息:包含事务ID、创建时间、版本号等信息。 版本:记录节点的修改次数,用来保证分布式数据的原子性操作(悲观锁:一个事务对数据进行处理时,在整个过程 都将数据锁定,其它事务无法对这个数据进行更新,直到这个事务完成;乐观锁:假定多个事务在处理过程中不会彼此影响,所以 在大部分时间不需要加锁) 4.Watcher:客户端向服务端注册一个Watcher,当服务端指定事件触发时,就会向指定的客户端发送一个事件通知。? Watcher接口、WatchedEvent、回调方法等等。 5.ACL:“schema:id:permission”? schema权限模式: IP:通过IP地址粒度进行权限控制。 Digest:类似于“username:password”形式。 World:对所有用户开放。 Super:对超级用户开放。 授权对象ID:指权限赋予的用户或一个指定实体。 权限Permission:CREATE(创建权限)、DELETE(删除权限)、READ(读取权限)、WRITE(更新权限)、ADMIN(管理权限)。 6.序列化:使用Jute实现序列化和反序列化。? 7.通信协议:Zookeeper基于TCP/IP协议,实现了自己的通信协议来完成客户端与服务器、服务器与服务器之间的网络通信。? 对于请求主要包括请求头和请求体,对于响应,主要包含响应头和响应体。 8.解析服务器地址:将多个服务器地址打散后,装入一个循环队列中,然后再遍历选取。? 9.ClientCnxn网络IO:负责维护客户端与服务端之间的网络连接并进行一系列的网络通信。? 10.会话:在Zookeeper客户端和服务端成功完成连接创建后,就建立了一个会话,在运行期间会在不同的回话状态? 之间进行切换。会话状态有CONNECTING、CONNECTED、CLOSE等等。 会经历会话创建,会话检查,会话删除等。 11.Leader选举:? 服务器启动时期的选举:(1)每个Server发出一个投票(以(myid,ZXID)表示,myid表示要投的服务器,初始时都会投给自己); (2)接收来自各服务器的投票(判断投票的有效性);(3)处理投票(将别人的投票和自己的投票PK,先比较ZXID,若相同再比较myid, 比较大的作为Leader);(4)统计投票(每次投票后,统计是否有过半的机器接收到相同的投票信息);(5)改变服务器状态 (选出Leader后,就更改状态,FOLLOWING、LEADING) 服务器运行期间的选举:在运行时候,当Leader所在的机器挂掉时,就会进行新一轮的Leader选举,先把其余服务器状体变为LOOKING 其余选举过程和启动时选举一致。 服务器状态:LOOKING(寻找Leader状态)、FOLLOWING(跟随者状态)、LEADING(领导者状态)、OBSERVING(观察者状态)。 12.服务器中的角色:? Leader:事务请求的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各服务器的调度者。 Follower:处理客户端非事务请求,转发事务请求给Leader服务器;参数事务请求Proposal投票;参与Leader选举投票。 Observer:和Follower基本是一致的,只是不参与任何形式的投票。 13.集群间消息通信:? 分为数据同步型、服务器初始化型、请求处理型和会话管理型。 14.Proposal流程:每一个事务请求都需要集群中过半机器投票认可才能被应用到Zookeeper的内存数据库中去。? 包括(1)发起事务投票;(2)生成提议Proposal;(3)广播提议;(4)收集投票;(5)将请求放入toBeApplied队列;(6)广播COMMIT消息 15.数据与存储:分为内存数据存储和磁盘数据存储。? 内存数据:DataTree(是一颗树结构,代表一份完整的数据),DataNode(数据存储的最小单元), ZKDatabase是Zookeeper的内存数据库,负责管理Zookeeper的所有会话、DataTree存储和事务日志。 数据快照:用来记录Zookeeper服务器上某一个时刻的全量内存数据内容,并将其写入到指定的磁盘文件中。 数据同步:将没有在Leader服务器上提交过的事务请求同步给Leader服务器。
|