java之Zookeeper/Chubby -vs- MySql NDB
我最近一直在阅读 Paxos 论文、FLP 定理等,并为一个项目评估 Apache Zookeeper。我也一直在浏览 Chubby(Google 的分布式锁定服务)和在线提供的各种相关文献。 Zookeeper 的基本用例是为分布式系统实现复制和一般协调。
不过我只是想知道,Zookeeper 或类似 Chubby 的分布式锁定系统带来的具体优势是什么。基本上我只是想知道为什么我不能只使用 MySQL NDB Cluster。我一直听说 MySQL 有很多复制问题。我希望在这方面有更多经验的人可以对此有所启发。
提前致谢..
我的要求的简单列表:
- 我有一个同构的分布式系统。
- 我需要一些方法来保持所有节点的状态一致。
- 我的系统公开了一项服务,与客户端的交互会导致我系统的集体状态发生一些变化。
- 高可用性是一个目标,因此节点宕机不能影响服务。
- 我希望系统至少能够处理 1000 个请求/秒。
- 我希望系统的集体状态在大小上有限制(基本上插入/删除将是短暂的......但在稳定状态下,我希望有大量的更新和读取)
请您参考如下方法:
这取决于您管理的数据类型以及您要达到的规模和容错能力。
我可以从 ZooKeeper 的角度来回答。在开始之前我应该提到 ZooKeeper 不是 Chubby 的克隆。具体来说,它不直接做锁。它还在设计时考虑了不同的排序和性能要求。
在 ZooKeeper 中,系统状态的整个副本都驻留在内存中。更改使用原子广播协议(protocol)进行复制,并在处理之前由大多数 ZooKeeper 服务器同步到磁盘(使用更改日志)。因此 ZooKeeper 具有确定性的性能,只要大多数服务器正常运行,它就可以容忍故障。即使发生停电等大停电,只要大多数服务器恢复在线,系统状态就会得到保留。 ZooKeeper 存储的信息通常被认为是系统的基本事实,因此这种一致性和持久性保证非常重要。
ZooKeeper 为您提供的其他功能与监控动态协调状态有关。临时节点允许您轻松进行故障检测和组成员资格。排序保证允许您进行领导者选举和客户端锁定。最后,监视允许您监视系统状态并快速响应系统状态的变化。
因此,如果您需要管理和响应动态配置、检测故障、选举领导者等,ZooKeeper 正是您所需要的。如果您需要存储大量数据或需要为这些数据建立关系模型,MySQL 是更好的选择。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。