`
邢邢色色
  • 浏览: 230592 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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。

分享到:
评论

相关推荐

    zookeeper3.5.5.zip

    7. **数据序列化与反序列化**:Zookeeper不处理数据的序列化,因此在存储和读取数据时,开发者需要自己处理这个问题。 在实际应用中,Zookeeper常用于分布式锁、配置管理、集群管理等场景,其C库为非Java应用提供了...

    zookeeper-3.4.8源码包

    每个API背后都对应着Zookeeper内部的一系列处理流程,例如,创建ZNode需要进行权限检查、事务序列化、提交到ZAB协议等步骤。 六、Zookeeper集群配置与管理 Zookeeper集群通过配置文件(zoo.cfg)设定,包括服务器...

    Zookeeper实现简单的分布式RPC框架

    为了实现这个过程,我们需要设计一套序列化和反序列化机制,以便将对象转换为网络传输的数据格式,如JSON或protobuf。 在源码层面,我们可以采用Java的反射机制来动态生成代理类,使得客户端可以直接调用远程服务的...

    Ant编译后的zookeeper源码

    - `zookeeper-jute`: Jute是ZooKeeper使用的序列化框架,用于在客户端和服务器之间传输数据。 通过阅读这些源码,开发者可以学习到ZooKeeper如何实现分布式协调,以及如何使用Ant工具进行项目构建。这对于理解...

    dubbo+zookeeper案例,dubbo和Zookeeper详解,Java源码.zip

    3. **RPC调用**:基于Netty实现的高性能长连接通信框架,支持多种序列化协议。 4. **负载均衡**:内置多种负载均衡策略,如Random、RoundRobin等,确保服务请求的均匀分布。 5. **故障切换与容错**:提供Failsafe、...

    zookeeper-3.4.6

    在eclipse项目文件中,我们可以看到Zookeeper的源代码组织结构,包括核心的`zookeeper-server`模块,客户端库`zookeeper-client`,以及其他如`zookeeper-jute`(用于序列化和反序列化)、`zookeeper-contrib`(包含...

    Zookeeper文档

    - 创建配置文件`zoo.cfg`,指定`tickTime`(基础事件时间单位)、`dataDir`(存储快照和事务日志的目录)和`clientPort`(客户端连接端口)。 **Zookeeper的应用场景** Zookeeper在分布式系统中扮演多种角色,...

    dotnet-封装了常用的功能以更方便net开发者更好的使用zookeeper

    2. **API设计**:研究库提供的类和方法,如`ZooKeeperClient`、`Session`、`Node`等,了解它们如何映射到Zookeeper的原生API,以及额外的便利方法。 3. **异常处理**:观察库如何封装Zookeeper的错误和异常,为.NET...

    spring boot 整合dubbo zookeeper

    Dubbo 提供了服务提供者和服务消费者的概念,以及基于接口的远程调用方式,支持多种通信协议和序列化方式。 整合 Spring Boot 与 Dubbo 的第一步是引入依赖。在项目中添加 Dubbo 和 Spring Boot 的相关依赖,这通常...

    rpc-client

    JSON、protobuf 和 Thrift 是常用的序列化格式。 9. **监控和日志**:为了保证系统的稳定性和可维护性,rpc-client 需要有日志记录和性能监控的能力,这可以帮助开发者快速定位问题和优化性能。 综上所述,"rpc-...

    clover 1、开发server和client端 定时向zk集群发送心跳数据

    通过分析这个文件,我们可以深入理解心跳机制的具体实现,例如心跳间隔时间设置、异常处理、数据序列化和反序列化等细节。 总结,"clover 1"项目涉及了分布式系统中的关键组件——Zookeeper、Node.js服务器和...

    4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布式锁)

    5. 只提供byte[]数据交互,未针对对象级别提供序列化。 6. 创建节点时若节点已存在会抛异常,需先检查节点。 7. 无法级联删除节点。 由于这些不足,直接使用原生API进行开发的难度较大,因此通常需要对其进行封装...

    hbase-client_lib.rar

    这些库通常包括HBase自身的API,Zookeeper客户端用于协调集群,Hadoop的相关库用于与HDFS交互,以及其他的依赖,如protobuf用于序列化和反序列化,Guava提供实用工具类,SLF4J和Log4j用于日志记录等。 在实际使用中...

    dubbo server+client 完整代码

    【Dubbo Server+Client 完整代码】是一个深入学习和实践Dubbo框架的实例项目,它涵盖了服务端(Server)和服务消费者端(Client)的完整实现。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java远程服务框架,它强调了...

    ZK Client Engine 5.0.2 API

    - **创建模式**:决定ZNode的持久化类型,如临时节点、序列化节点等。 ### 3. 使用示例 - **连接Zookeeper**:创建`ZooKeeper`实例,指定服务器地址、超时时间及监听器。 - **创建ZNode**:调用`create`方法,设置...

    java6.0源码-zookeeper-mq:基于ZooKeeper的可靠高可用消息队列(原型)

    - **Message**:消息模型,定义消息的结构和序列化/反序列化方法。 - **ZkUtil**:Zookeeper操作工具类,封装了连接、会话管理、节点操作等常用API。 源码中,`ZookeeperConsumer`和`ZookeeperProducer`是核心类,...

    zookeeper-session:使用 zookeeper 管理会话而不是 memcached

    2. **会话信息存储**:将会话的相关信息(如会话ID、用户信息、会话过期时间等)序列化后存储在会话节点的数据部分。 3. **监控会话节点**:客户端注册会话节点的 watch,以便在节点消失时收到通知。这可以用来检测...

    分布式协调工具-ZooKeeper实现动态负载均衡

    ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、Zookeeper...

    RPC 框架学习 好的参考学习

    - 序列化模块通常是可插拔的,QiuRPC可能内置支持JSON、Hessian、Protobuf等多种序列化方式,开发者可以根据性能和需求选择合适的序列化库。 5. **负载均衡与容错**: - QiuRPC可能会提供简单的负载均衡策略,如...

    dubbo学习笔记,都是一个字一个字的写的

    2. 客户端存根(Stub)接收到调用请求,对方法和参数进行序列化。 3. 客户端通过Socket将序列化后的消息发送给服务端。 4. 服务端存根接收到消息并反序列化。 5. 服务端存根根据反序列化的结果调用本地服务。 6. ...

Global site tag (gtag.js) - Google Analytics