• zookeeper的读写流程


    zookeeper的读写流程

    基本架构

    节点数要求是奇数。

    常用的接口是 get/set/create/getChildren.

    读写流程

    写流程

    客户端连接到集群中某一个节点

    客户端发送写请求

    服务端连接节点,把该写请求转发给leader

    leader处理写请求,一半以上的从节点也写成功,返回给客户端成功。

    读流程

    客户端连接到集群中某一节点

    读请求,直接返回。

    故障恢复 && leader选举

    当leader down掉时。

    集群暂停服务,进行leader选举,采用fast paxos协议

    首先所有server,提交自己作为leader,log的ID(epoch+1),id作用交互数据

    通过比较接收的日志事务Id和自身的事务ID。

    等待一个周期,确定出最新的leader。

    加载snapshot,执行log。

    最终一致性

    读数据时,有可能会脏读。比较推荐watch的方式,实现数据的及时生效。

    各节点数据完全一致

    各节点存储了全量的数据。

    存储策略

    持久化存储是基于内存快照(snapshot)和事务日志(txlog)来存储。

    snapshot和txlog的存储目录定义在zoo.cfg中,txlog存储磁盘和snapshot存储磁盘分开,避免io争夺。

    txlog的刷盘阈值是1000。txlog是生成snapshot之后生成。

    snapshot的保存数量和清理时间间隔配置在zoo.cfg中。

    时间复杂度

    zookeeper 使用concurrenthashmap进行存储。锁的粒度是segment,减少锁竞争,segment里对应一个hashtable 的若干桶.

    所以时间复杂度都是 O(1)

  • 相关阅读:
    java——base64 加密和解密
    BASE64Encoded() 方法报错说方法未定义
    java 实现HTTP连接(HTTPClient)
    如何关闭一些烦人的弹窗(总结)
    IDEA
    6、git和github
    5、预测和鉴定miRNA的靶基因
    4、在线blast比对结果解析(保守结构域)
    ASE分析
    3、Linux下配置Java环境
  • 原文地址:https://www.cnblogs.com/zhulongchao/p/7190190.html
Copyright © 2020-2023  润新知