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)

  • 相关阅读:
    delphi7 stringgrid 点列头排序
    如何作为一个优秀的ERP实施顾问
    小米生态链去年收入150亿,今年目标200亿
    msys2 安装笔记(可以按照这个关键字搜索)
    MinGW 编译 libsndfile-1.0.25(只要有 MSYS,./configure make make install 就行了)
    Apache Ignite——新一代数据库缓存系统
    VS2015 C#6.0
    Webuploader 大文件分片上传
    requirejs
    require.js
  • 原文地址:https://www.cnblogs.com/zhulongchao/p/7190190.html
Copyright © 2011-2022 走看看