zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    C语言数据结构(二)
    面向对象
    Java集合类汇总
    C语言运算符优先级和结合性
    c语言数据结构(一)
    浏览器间bug
    HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义
    SSL是啥?
    {转}大公司里怎样开发和部署前端代码?
    浏览器 HTTP 缓存原理分析
  • 原文地址:https://www.cnblogs.com/mkl34367803/p/10704431.html
Copyright © 2011-2022 走看看