转载请注明:@ni掌柜 nileader@gmail.com
本文主要是讨论下两个类似产品: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://nileader.blog.51cto.com/1381108/1046316
分享到:
相关推荐
### Zookeeper究竟能做什么 #### Zookeeper的任务与作用 在大数据与云计算的世界里,应用程序由许多独立程序组成,这些程序运行在不断变化的计算机集合上。协调这些独立程序的行为比编写一个单一程序来运行在单个...
ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等...本资源包括zookeeper 3.8 与 3.7 kafka2.12-3.1.0 版本 有需求的可以下载
在Java中,Zookeeper提供了丰富的API供开发者使用,如`org.apache.zookeeper.ZooKeeper`类是核心接口,用于与Zookeeper服务器通信。通过`connect()`方法建立连接,然后可以调用`create()`, `exists()`, `getData()`,...
4. **会话管理**:Zookeeper维护客户端的会话状态,如果客户端与服务器的连接断开,会话可以被恢复,保证服务的连续性。 5. **命名服务**:Zookeeper可以作为分布式环境中的全局命名服务,通过路径来标识和查找服务...
Zookeeper的三个不同版本——3.4.9、3.8.0和3.7.1,每个都有其独特的特点和改进。Zookeeper 3.4.9是较老但稳定的一个版本,广泛应用于生产环境。它修复了一些已知的bug,并对性能进行了优化。3.8.0是一个更新的版本...
它的核心功能包括配置管理、名字服务、分布式锁和集群管理,这些功能使得 Zookeeper 成为了分布式系统中不可或缺的协调组件。理解和熟练掌握 Zookeeper 的安装、配置和使用,对于构建和维护大规模分布式系统具有重要...
- **与Zookeeper的整合**:通过Zookeeper的协调服务,确保集群的高可用性,实现(n-1)/2的容错率,即在三个节点中允许有一个节点失败。 #### 四、测试步骤及配置 1. **下载Zookeeper与ActiveMQ** - 下载Zookeeper...
Zookeeper是Apache软件基金会开发的一个分布式协调服务,它在分布式系统中扮演着至关重要的角色。...在部署和使用Zookeeper时,理解其核心概念和应用场景是至关重要的,这将有助于构建更高效、可靠的分布式系统。
#Zookeeper的日志可以用LogFormatter查看 ##命令方式如下 java -classpath .:slf4j-api-1.7.2.jar:zookeeper-3.4.6.jar org.apache.zookeeper.server.LogFormatter /var/lib/zookeeper/version-2/log.1 ##window...
**Zookeeper可视化工具详解** Apache ZooKeeper 是一个分布式...总之,Zookeeper可视化工具是管理和维护Zookeeper集群不可或缺的助手,通过它们,我们可以更高效、更安全地操作Zookeeper,实现分布式系统的稳定运行。
此外,你需要至少有奇数台机器(本文中使用了3台,名为`server1`、`server2`和`server3`)来搭建Zookeeper集群。 2. **设置机器名称和用户**: 使用root用户设置每台机器的主机名,并创建用户`alanchan`和对应的...
apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper...
4. docs:文档资料,包括用户指南、API 文档等,对于初学者理解 Zookeeper 功能和用法非常有帮助。 5. src:源代码目录,如果你需要深入理解 Zookeeper 内部工作原理或者进行定制开发,可以查阅这里的代码。 6. lib...
在选举模式下,ZooKeeper 节点之间不能相互通信,需要选举出一个 leader 节点来恢复集群。 ZooKeeper 应用场景 ZooKeeper 广泛应用于分布式系统中,例如分布式配置管理、分布式锁、分布式队列等。ZooKeeper 的高...
这些节点存储了允许访问的 IP 地址,当客户端尝试连接 ZooKeeper 时,ZooKeeper 将检查客户端的 IP 地址是否在允许访问的列表中,如果不在,将拒绝连接。 四、优点 增加 IP 访问限制可以有效地防止未经授权的访问...
3. **会话(Session)**: 用户与Zookeeper服务器之间的连接称为会话,会话期间,Zookeeper服务器会保持与客户端的连接状态,如果会话超时或网络中断,会话结束。 **Zookeeper管理工具的功能** 1. **集群监控**: ...
《ZooKeeper 3.4.9:在Windows与Linux上的部署与应用》 ZooKeeper,一个由Apache基金会开发的分布式协调服务,是许多大型分布式系统中的关键组件。3.4.9版本是ZooKeeper的一个稳定版本,提供了一系列增强功能和性能...
通过对Zookeeper集群从3.3.4版本升级至3.4.8版本的过程进行详细的规划与实施,不仅可以提高系统的性能与稳定性,还能够更好地支持业务发展。在整个升级过程中,需要注意备份、测试验证、逐步割接等关键环节,以确保...
CentOS 8 安装 ZooKeeper 3.8.0 详细步骤 ZooKeeper 是一个分布式应用程序协调服务,提供了配置管理、名称服务、分布式同步和提供组服务等功能。下面是 CentOS 8 安装 ZooKeeper 3.8.0 的详细步骤。 1. 下载安装包...
2. **会话(Session)**:客户端与ZooKeeper服务器建立的连接称为会话,会话期间,客户端可以发送请求并接收响应,会话具有超时机制。 3. **Watcher**:ZooKeeper提供了一种事件监听机制,称为Watcher,允许客户端...