zookeeper的缺点
转载 http://www.chaozh.com/whats-bad-in-zookeeper-design/
1. API事务能力不足,不支持客户端发起事务性的多步骤操作
2. 服务器无仲裁能力,ZK服务器端不能做基本的判断逻辑,必须都在客户端进行
提供的api偏底层,client端代码难度也比较高
3. 回调机制受限,Znode上面watch仅支持触发一次回调,不支持定时过期失效
watch机制的回调,只会通知一次,不保证成功,无重试
4. 可扩展性不足,ZK集群不支持在线动态添加机器或替换机器
因为只有一个Leader,水平扩展并不能明显提升性能,因为只有1个Leader, zk机器节点越多,反而会导致通信和同步时间更长,性能可能会变差,zk集群的实际qps tps能力 是 几万 这个级别
5. Zab协议,协议在选举和发送环节都有优化空间
zab的设计就是对网络及其敏感,假如管理双机房(双机房间网络抖动是常态),会因为抖动导致单机房不可用(因为只有一个Leader),即便在一个机房内(机房内经常会做路由调整),抖动也会导致leader重新选举,实际leader选举通常几十秒到几分钟,这会严重放大本来只有秒级的网络抖动