原因
本质还是CP和AP的选择。ZooKeeper选择了CP,这意味着选主期间存在服务不可用的情况。但是,对于服务注册中心,可以容忍短暂的不一致,但是不能接受服务不可用的情况,因此选择AP更加合理。
客户端
- ZK服务端集群的地址列表是写死在客户端的,不支持动态变更;
- 不支持同机房优先策略;
- 没有针对服务端集群完全不可用时的容灾手段;
服务端
- 写能力不足,不支持水平扩展(随着服务规模的增大,服务上下线、发布和健康监测等对需要良好的写性能);
- 健康监测手段单一,只有TCP的活性监测,服务健康与否的逻辑更应该开放给服务提供方定义;
解决方案
阿里内部自己实现了ConfigServer,外部开源的服务发现框架主要是Eureka。
参考: