我们应该不应该用ZooKeeper?

最近一年多,跟ZooKeeper打了挺多交道,阅读了一部分ZooKeeper的源代码,也学习到了不少知识,包含Java面向对象设计、分布式一致性协议等等。ZooKeeper基于github和JIRA的开发流也让我觉得挺惊艳的。从开源角度讲,ZooKeeper的质量可能尚可,而且我们也不应该指望开源的项目能有多高质量。如果目的是学习的话,ZooKeeper无疑是一个好的代码库,但是企业级应用的话,ZooKeeper还是有很多问题。

  • Bug数量太多。具体可以参考ZooKeeper在JIRA上的bug列表。而且有相当一部分bug非常致命,包括我提的这个 bug,可能导致在机器挂掉后,选主无法成功!甚至3.4.X版本之前还有几个很严重的一致性问题(要知道ZooKeeper的设计目的就是保证一致性的)。
  • 无法动态配置集群大小。这个问题已经持续很久了,虽然新的3.5版本据说添加了这个特性。但是3.5目前还处于beta版本,正式release不知道要到什么时候了,估计得到2019年了。
  • 业务级应用,通常对高可靠的要求非常高,在极端条件下,数据都不能出错。例如硬盘空间满、网络闪断、多网卡、机器重启。这些环境下,ZooKeeper的测试覆盖可能不足。例如硬盘空间满后,ZooKeeper服务挂掉,并且重启后不能恢复(非必现)。多网卡是最近我提了一个patch后,才算能正常支持。
  • 整体而言,社区的ZooKeeper开发者,还是很勤奋的,基本上一直保持更新的节奏,但是还是让人非常不放心。

该自己造轮子,还得自己造。

你可能感兴趣的:(我们应该不应该用ZooKeeper?)