目录
区别的根源
     1)一致性
     2)Client Cache vs No Cache
总结
参考资料

区别的根源

一个设计良好的系统应该是围绕并为其设计目标服务的。

  • Chubby:provide coarse-grained locking as well as reliable storage for a loosely-coupled distributed system.

  • Zookeeper:provide a simple and high performance kernel for building more complex coordination primitives at the client.

关键词

chubby:lock service

zookeeper: coordination

Chubby旗帜鲜明的表示自己是为分布式锁服务的,而Zookeeper则倾向于构造一个“Kernel”,而利用这个“Kernel”客户端可以自己实现众多更复杂的分布式协调机制。自然的,Chubby倾向于提供更精准明确的操作来免除使用者的负担,Zookeeper则需要提供更通用,更原子的原材料,留更多的空白和自由给Client。也正是因此,为了更适配到更广的场景范围,Zookeeper对性能的提出了更高的要求。

1)一致性

chubby:线性一致性

chubby的一致性是分布式系统中所能实现的最高的一致性,即每次操作时都可以看到其之前的所有操作按顺序完成

ZooKeeper:写操作线性(Linearizable writes) + 客户端有序(FIFO client order)

写操作线性:所有修改集群状态的操作按顺序完成

客户端有序:对任意一个client来说,它所有的读写操作按顺序完成

从实现上来看。

 

读请求

写请求

chubby

由Master单独处理(or Client Cache)

仅Master处理写请求

zookeeper

Leader提供读服务,Follower和Observer也能提供读服务

仅Leader处理写请求

区别

对于读请求的处理逻辑是不同的!

chubby的所有读写请求都交给Master串行执行,并且利用一致性协议复制到集群中所有节点

ZooKeeper仅将写操作交给Leader串行执行,这保证了写操作线性。

对于读操作,则由与客户端连接的server自行处理。

如何保证客户端有序?

Zookeeper给每一个写入后的状态一个唯一自增的zxid,并通过写操作的答复告知客户端,客户端之后的读操作都会携带这个zxid,

直连的server通过比较zxid判断自己是否滞后,如果是,则让读操作等待。

从以上对比可以看出,Zookeeper损失的是不同客户端的读写操作的一致性。如下图所示:

集群初始状态为x,Client A发起写操作将状态修改为y,写操作由于写操作线性保证转发给Leader通过一致性协议复制到整个集群,过半数节点成功后返回;

此时,Client B从还未同步到的server上读到的值仍未x。

这种一致性的损失,换来的是集群读请求的高性能。

不像Chubby的单点服务的结构,zookeeper采用多个server同时处理客户端的请求,异步读同步写,通过primary节点来同步数据的update,这一点大大改善了读服务的性能,当然弱化了客户端与服务器之间的一致性。

对于不能容忍这种不一致的场景,Zookeeper提供了两种机制满足:

  • Watcher通知跟Read操作一样是由客户端所连接Server本地处理的,所以Client B收到对应的事件通知后再Read就一定能看到最新的状态y;

  • 由于客户端有序的保证,Client B可以在Read操作前加一条Write操作,来保证看到最新状态,为了避免这个不必要的Write操作Zookeeper提供Sync命令,相当于一条空的写操作。

总结:

Chubby保证了数据的强一致性。

Zookeeper通过牺牲一定的一致性来换取更高的读性能。

2)Client Cache vs No Cache

Chubby:客户端维护了cache,并且客户端cache是强一致的。

(关于维护客户端cache带来的写性能的影响,在chubby的应用场景中,为读多写少,写操作其实很少)

ZooKeeper:根本没有实现cache功能,用户如果需要必须自己实现,利用watcher机制,用户能方便地按照自己需求实现一致或不一致的cache语义。

总结

chubby提供分布式锁服务,对一致性有更高的要求,为强一致。

zookeeper提供分布式协调服务,为了适配更广的场景,对性能有更高的要求,牺牲了一定的一致性。

参考资料

【1】http://xudifsd.org/blog/2016/06/chubby-zookeeper-different-consistency-level/

【2】https://www.cnblogs.com/linhaohong/archive/2012/11/26/2789394.html

【3】https://bzdww.com/article/146310/ Zookeeper vs Chubby

【4】http://www.evanlin.com/til-2016-07-25/

【5】https://www.cnblogs.com/lulu/p/4199056.html

Zookeeper VS Chubby的更多相关文章

  1. Zookeeper和Chubby【分布式协调系统】

    前言(对于协调系统来说其客户端往往是分布式集群) 大规模分布式系统需要解决各种类型的协调需求: 当集群中有新的进程或服务器加入时,如何探测到它的加入?如何能够自动获取配置参数? 当配置信息被某个进程或 ...

  2. paxos(chubby) vs zab(Zookeeper)

    参考: Zookeeper的一致性协议:Zab Chubby&Zookeeper原理及在分布式环境中的应用 Paxos vs. Viewstamped Replication vs. Zab ...

  3. chubby 是什么,和 zookeeper 比你怎么看?

    chubby 是 google 的,完全实现 paxos 算法,不开源.zookeeper 是 chubby的开源实现,使用 zab 协议,paxos 算法的变种.

  4. zookeeper系列之一—zookeeper入门

    Zookeeper是什么? Zookeeper故名思议动物管理员,它是拿来管大象(Hadoop).蜜蜂(Hive).小猪(Pig)的管理员,Apache Hbase和Apache Solr以及Link ...

  5. zookeeper入门知识

    ZooKeeper 是什么? ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) .小猪(Pig)  的管理员, Apache Hbase和 Apache ...

  6. ZooKeeper是什么(转)

    ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提 ...

  7. 29道Zookeeper面试题超详细(附答案)

    原文链接 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件 ...

  8. zookeeper题目

    1. ZooKeeper是什么?2. ZooKeeper提供了什么?3. Zookeeper文件系统4. ZAB协议?5. 四种类型的数据节点 Znode6. Zookeeper Watcher 机制 ...

  9. 2019年面试官最喜欢问的28道ZooKeeper面试题

    前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper 的 ...

随机推荐

  1. java 百度地图判断两点距离1

    package baiduApi; /** * 类名称:PointToDistance * 类描述:两个百度经纬度坐标点,计算两点距离 * 创建人:钟志铖 * 创建时间:2014-9-7 上午10:1 ...

  2. Jeecg页面标签规则

    1.表单字段重复校验方法 <input name="departname" class="inputxt" value="${depart.de ...

  3. Web jsp开发学习——dbcp jsp连接MySQL出现中文乱码解决

    开发过程中,通过dbcp.properties连接MySQL数据库,向数据库中插入中文字符时,出现乱码情况. 通过查阅资料,发现出现乱码的原因:MySQL数据库使用的是UTF-8编码,而dbcp.pr ...

  4. JPA 或者Hibernate 实体类说明

    这里简单介绍Hibernate的Annotation注解 一.声明实体 @Entity对实体注释.任何Hibernate映射对象都要有这个注释@Table声明此对象映射到数据库的数据表,通过它可以为实 ...

  5. 机器学习:gensim之Word2Vec 详解

    一 前言 Word2Vec是同上一篇提及的PageRank一样,都是Google的工程师和机器学习专家所提出的的:在学习这些算法.模型的时候,最好优先去看Google提出者的原汁Paper和Proje ...

  6. 行为验证码的asp.net MVC实现方式 qq521877626

    界面http://localhost:你的服务器/Code/index 实现步骤: 注册账号https://www.geetest.com   新增验证 下载demo (url:http://docs ...

  7. C# 函数返回多个值的方法

    有时候我们需要一个函数返回多个值,网上更多是用out实现,我个人很喜欢用tuple方法. tuple是一个元组,最多支持7个元素,再多需要嵌套等方法实现. 使用元组定义函数的方法如下: public ...

  8. mybatis-generator自动生成代码时,只生成insert方法

    今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...

  9. JQuery II

    jQuery事件的绑定 <body> <button>点击1</button> <button>点击2</button> </body ...

  10. Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths)

    Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向 ...