ZooKeeper和Diamond有什么不同
2019独角兽企业重金招聘Python工程师标准>>>
ZooKeeper和Diamond有什么不同 博客分类: java 架构
本文主要是讨论下两个类似产品:ZooKeeper和Diamond在配置管理这个应用场景上的异同点。
Diamond,顾名思义,寄寓了开发人员对产品稳定性的厚望,希望它像钻石一样,提供稳定的配置访问。Diamond是淘宝网Java中间件团队的核心 产品之一,服务于集团线上很多核心应用。目前已经开源,开源地址在:http://code.taobao.org/p/diamond/wiki /index/。
数据持久性
Diamond主要针对的是持久数据,这些数据有个共同的特点是:集群中一批机器都会使用,但是数据的更新频率不大,且希望diamond能够永久存储。
ZooKeeper即可以存储持久数据,也可以存储非持久数据。持久数据和diamond中的持久数据都类似,所谓的非持久数据是指这些数据的生命周期和数据创建者的会话生命周期绑定,一旦会话结束,那么这些非持久数据也会被清除。
推拉模型
本质上,两个产品都是“拉”模式的,即都是通过客户端自己去服务器获取最新数据。具体实现上,两个产品分别如下:
在Diamond中,客户端每隔15s轮询服务器,比对数据是否更新,从而获取最新数据。
在ZooKeeper中,则是通过客户端对相应的数据path注册Watcher,当数据有更新的时候,服务器会有事件通知,注意,这个通知仅仅是告诉客户端对应的数据有更新了,具体数据内容需要客户端根据自己的情况来决定是否需要获取最新数据。
因此在实时性方面,ZooKeeper比Diamond高一些。
服务器数据存储
在数据存储上,ZooKeeper和Diamond差别比较大。
首先来看下Diamond的数据存储。Diamond的数据存储以mysql数据库为中心,所有在mysql中的数据都是最新的,客户端的所有写请求,都会首先写入数据库,同时会dump数据到Server的本地文件中,所有读请求都是直接走这个静态文件。
在ZooKeeper中,所有运行时数据都是存储在内存中,客户端的所有读写操作都是针对这份内存数据来进行的。同时,内存中的数据,ZK会以快照的形式dump到指定文件中去,配合事务日志,帮助服务器在下次重启的时候,能够加载正确的数据到内存中去。
数据模型
Diamond的数据都是以行组织的,这也更便于它使用mysql来管理数据。Diamond的基本数据结构包含dataid,group和content,根据group,可以将一组相关的数据组合起来。
ZooKeeper中,使用树形结构来组织数据,每个节点类型于一个文件系统的路径,一个节点下面也可以创建多个子节点来规则一些相关的数据。
容灾
在容灾方面,diamond做得相当的完备:
1. 所有客户端的读请求,都是直接读取服务器端的本地静态文件,因此,即使数据库挂了,都不会影响diamond的读服务。而读服务在所有使用diamond的应用场景中,占到了绝大部分。
2. Diamond客户端还保存了数据的快照,客户端每次从服务器成功获取数据后,都会把这份数据保存到本地文件系统中,称为快照文件。这个快照文件是为了防止在服务器无法获取数据的时候,能够在这个快照中获取数据。
3. 客户端还会有一个容灾目录,变个容灾目录是在服务器完全不可用的时候,运维人员可以手动在这个容灾目录中创建相关目录结构的数据,diamond就就会优先从这个目录中获取数据。
4. 说到这里,我们就可以给diamond的数据获取优先级作一个总结:
首先都会从容灾目录中获取数据——无法从容灾目录获取数据的话,就通过网络到服务器请求数据——如果无法从服务器获取数据,那么就从本地的snapshot中获取数据。
接下来看看ZooKeepe的容灾,做得很少,只有以下一点:
1. ZooKeeper实现了paxos算法,有效的解决了分布式单点问题。以一个3台机器构成的集群为例,任意一台ZK挂掉,都不会影响集群的数据一致性。
总结:在容灾方面,diamond有很大的优势,也符合了diamond的稳定性要求。
数据大小
Diamond对单个数据的大小,没有严格的限制,通常2M左右的数据大小都是没有问题的。而在ZooKeeper中,由于全量数据都是存储在内存中,并且需求进行集群机器间的数据两步,所以对单个数据的大小有严格的限制,默认单个数据节点的最大数据大小是1M。
数据追加与聚合
Diamond支持对数据的追加与聚合功能,即对同一个dataid的写入操作,可以设置为追加。而ZooKeeper目前不支持,只有覆盖写。
本文固定链接: http://www.chepoo.com/zookeeper-diamond-compare.html | IT技术精华网
http://www.chepoo.com/zookeeper-diamond-compare.html
http://www.kuqin.com/shuoit/20141013/342587.html
转载于:https://my.oschina.net/xiaominmin/blog/1599330
ZooKeeper和Diamond有什么不同相关推荐
- 【ZooKeeper Notes 30】ZooKeeper与Diamond有什么不一样
本文主要是讨论下两个类似产品:ZooKeeper和Diamond在配置管理这个应用场景上的异同点. Diamond,顾名思义,寄寓了开发人员对产品稳定性的厚望,希望它像钻石一样,提供稳定的配置访问.D ...
- JAVA EE Apache Zookeeper / Google Chubby
s http://zookeeper.apache.org/ Apache ZooKeeper is an effort to develop and maintain an open-source ...
- zookeeper查看注册服务器,zookeeper服务器注册
Dubbo之旅-注册中心-Zookeeper initLimit:这个配置项是用来配置Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zooke ...
- 分布式配置管理平台Disconf--转
原文地址:http://www.liaoqiqi.com/post/219 摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分布式配置管理解决方案(简称为disco ...
- WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)
WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 目录 WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 概述 HTTP解析 HTTP请求头 HTTP响应头 H ...
- 团建活动——真人CS
杭州的美不仅仅是因为有西湖的水和西溪的湿,更是因为她的天气能追随咱团队的心啦,呵呵.当19号的阳光柔醒了俺们朦胧的双眼后,我们早已把那忐忑的天气预报该扔哪儿就扔哪儿了.大家叽叽喳喳,热热闹闹的上了大巴 ...
- 亿级流量网站架构核心技术【笔记】(一)
一.交易型系统设计的一些原则1.在设计系统时,应该多思考墨菲定律: * 任何事情都没有表面看起来那么简单 * 所有的事都会比你预计的时间长 * 可能出错的事总会出错 * 如果你担心某种情况发生,那么它 ...
- 使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移 摘要:在访问依赖的服务过程中,我们通常会通过在程序或者配置文件中写死ip列表的形式来发现下游服务,但在下游服务集群出现 ...
- Zookeeper实现哨兵机制
master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-salve模式,也就是常说的主从模式, ...
最新文章
- 字节跳动每一轮都会考算法吗?已拿Offer的兄弟分享经验!
- CRI-O将如何把Kubernetes推上容器生态系统的中心位置
- c语言无符号中符号什么意思,C语言中无符号与有符号及相加问题
- 鲁尼禁赛萨哈一射一传领风骚 曼联客场3-0查尔顿
- android 自定义控件
- tensorrt轻松部署高性能dnn推理_基于TensorRT车辆实时推理优化
- python并发编程之多进程
- php access 所有表,Oracle|sql server|access 数据库里的所有表名,字段名
- iOS非常全的第三方库
- 台式计算机操作系统的安装,台式电脑重装系统步骤图解
- IBM Spectrum LSF RTM
- 人类无法抗拒的十大心理学效应
- 一加 Ace 竞速版什么时候发布 一加 Ace 竞速版配置怎么样
- ChatGPT大规模封号...
- Android Webview完美支持播放各种视频。(解决无法播放优酷视频的问题以及周末无法播放优酷视频的问题)
- 关于网站域名备案流程
- php处理微信消息,微信开发之处理微信客户端发来的消息
- 文件重命名不了怎么办,教你解决办法
- 黑客很忙:拿巨额奖金以及帮助警察蜀黍破案|宅客周刊
- 一代才女林徽因 人生若只如初见
热门文章
- 如何二值图转化为灰度图_木工真空吸附雕刻机如何用精雕5.21把精雕图模型转为灰度图...
- linux主节点启动nfs,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- cad怎么画坐标系箭头_CAD绘图中箭头太大(小)怎么调整?
- linux假延迟脚本,linux – 期望脚本期望错过发送字符串延迟问题
- 通过一个端口读取多个按钮
- 第十三届全国大学生智能汽车竞赛 裁判系统使用说明
- 2021年春季学期-信号与系统-第十三次作业参考答案-第二小题
- 一些信号与自己的卷积结果
- 实验电路的放大器伴侣:LMV358
- java rpm_Java JDK rpm安装与配置