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)

zookeeper的读写流程的更多相关文章

  1. HBase 数据读写流程

    HBase 数据读写流程 2016-10-18 杜亦舒 读数据 HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中 假设现在想在用户表中获取 ro ...

  2. Hbase的读写流程

    HBase读写流程 1.HBase读数据流程 HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在 ...

  3. 【HBase】知识小结+HMaster选举、故障恢复、读写流程

    1:什么是HBase HBase是一个高可靠性,高性能,面向列,可伸缩的分布式数据库,提供海量数据存储功能,一个结构化的分布式存储系统,不同于一般的关系型数据库,它适合半结构化和非结构化数据存储. 2 ...

  4. HBase二级索引、读写流程

    HBase二级索引.读写流程 一.HBse二级索引方案 1.1 基于Coprocessor方案 1.2 Phoenix二级索引特点 1.3 Phoenix 二级索引方案 二.HBase读写流程 2.1 ...

  5. zookeeper心跳机制流程梳理

    zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...

  6. HDFS文件读写流程

    一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访问.大量 ...

  7. 【转】linux IO子系统和文件系统读写流程

    原文地址:linux IO子系统和文件系统读写流程 我们含有分析的,是基于2.6.32及其后的内核. 我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里.我 ...

  8. Hadoop---HDFS读写流程

    Hadoop---HDFS HDFS 性能详解 HDFS 天生是为大规模数据存储与计算服务的,而对大规模数据的处理目前还有没比较稳妥的解决方案. HDFS 将将要存储的大文件进行分割,分割到既定的存储 ...

  9. ZooKeeper 的读写操作 & 选举机制

    0. 说明 记录 ZooKeeper 的读写操作和选举机制 1. ZooKeeper 的读写操作 读操作:所有 ZooKeeper 节点都可以提供读请求(包括 follower 和 leader ) ...

随机推荐

  1. json模块

    dic = {"name":"boke","age":"18"} #字典 data = json.dumps(dic) ...

  2. iOS原生自动布局NSLayoutConstraint

    AutoLayout概念是苹果自iOS6开始引入的概念. 目前为止,实现自动布局技术选型方面也可以使用xib和storyboard.在开发过程中通常登录.注册等变动可能性较小的视图,我会采用xib开发 ...

  3. Python多进程并发(multiprocessing)

    1.新建单一进程 如果我们新建少量进程,可以如下: 2.使用进程池 是的,你没有看错,不是线程池.它可以让你跑满多核CPU,而且使用方法非常简单. 注意要用apply_async,如果落下async, ...

  4. c++ complie link error 2019/2001

    1:没有将需要的文件添加到项目中,只是考到项目所在的目录了 2:没有添加 类导出 宏

  5. []TLD code run

    opencv3.3.1 https://github.com/alantrrs/OpenTLD https://github.com/arthurv/OpenTLD problem opencv3.0 ...

  6. Feign get接口传输对象引发一场追寻

    一个报错引发的追寻之路: Feign get接口传输对象,调用方接口代码: @FeignClient(name = "manage") public interface Acces ...

  7. java中的hashmap理解

    转自大神,以便以后翻阅http://www.cnblogs.com/whgk/p/6091316.html

  8. C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  9. centos环境下使用CPAN安装perl模块

    首先安装CPAN yum install perl-CPAN 进入cpan环境 perl -MCPAN -e shell 安装模块(以Tk为例) cpan>install Tk 退出 cpan& ...

  10. 基于mpvue搭建微信小程序

    mpvue是美团开源的一套语法,语法与vue.js一致,快速开发小程序的前端框架.框架基于vue.js核心,修改了vue.js的runtime和compiler实现,使用此框架,开发者可以完全使用vu ...