ZooKeeper怎么玩之二:ZK不是万能的

使用一个新技术,要了解它的优点和不足,这样才能预见问题的发生,并把风险降到最低。

ZooKeeper不是万能的。

  1. ZooKeeper不能完成你想要的强一致性

    ZK不是强一致性的,不保证任意时刻更新的数据,对于后续操作都是可见的,或者你可以调用sync()方法从客户端保证一致性。为了保证性能,ZK在同步完成超过半数机器后,就可以接受后续的事务请求,那么客户端client就有可能在某些节点上访问的不是最新的数据。

  2. ZooKeeper不是实时性的

    ZooKeeper的实时性是伪实时性的,ZK保证在十几秒中同步到各个节点,来保证最终一致性,因为实时性是有条件的。

  3. ZooKeeper不适用于存储数据

    官方文档中对ZNode节点大小是有限制的,最大不能超过1M。ZK为了提高系统的读取速度,所有运行时的数据都是存储在内存中的。如果ZNode过大,读写都将造成不确定的延迟。如果想存储数据,还是乖乖地使用关系型数据库或者NOSQL数据库。