ZooKeeper学习之关于Client和序列化

关于client

 

在client library中有2个主要的类:ZooKeeper和ClientCnxn。ZooKeeper类实现了大部分API,写client应用程序时必须实例化这个对象来建立一个session。一旦建立起一个session,ZooKeeper使用一个ID来关连这个session。这个ID实际上是由server side生成的(参考SessionTrackerImpl)。

 

ClientCnx类管理连接到server的连接。它维护一个可以连接的ZooKeeper的server列表,并当连接断掉的时候透明的切换到其他的server。当重连到一个其他的server时会使用同一个session(如果没有过期的话),client也会重置所有的watch(参考ClientCnxn.SendThread.primeConnection())。重置默认是开启的,可以通过设置disableAutoWatchReset来禁用。


关于序列化

 

序列化的作用就是使得消息和事务可以通过网络传送并存储到磁盘上,ZooKeeper使用发迹于Hadoop的Jute来做序列化。现在有两块基于此的代码。org.apache.jute包下的代码就是Jute编译的代码(ZooKeeper的开发团队早就讨论过要替换Jude,但至今没知道合适的方案,它工作得很好,还没有必要替换它)。


zookeeper.jute是最主要的定义文件。它包含了所有的消息定义和文件记录。下面是一个Jute定义的例子:

 

module org.apache.zookeeper.txn {
...
class CreateTxn {
        ustring path;
        buffer data;
        vector<org.apache.zookeeper.data.ACL> acl;
        boolean ephemeral;
        int parentCVersion;
    }
...
}


这个例子定义了一个包含create事务的定义。这个模块映射到了一个ZooKeeper的package。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值