Zookeeper作为注册中心合适吗
这个是某公司的面试题,之前没有考虑到这个问题,只知道zk如何做注册中心,很少考虑合不合适问题,因为大家都这么用
在查阅了相关资料,发现zk并不合适做注册中心,今天我就说说为什么
上面两点就是他不适合做注册中心的主要问题,我们一个个分析
CAP模型中zk他支持的是CP
首先我们要明白注册中心的关注点是什么呢,是可用性还是一致性呢,当然是可用性了而不是一致性
假设他有不一致性问题会引起什么问题呢,如下图
serviceA两次拉取到了不同的serviceB列表
serviceB={ip2...ip10}
serviceB={ip1...ip9}
他会因此上面问题呢,粗略来看就是流量的不均衡,如IP1和IP10流量是单份的,其他IP都是双份流量,但是对于我们的服务其实不大,所以说注册中心模型使用AP可能更好
我们再看看注册中心如果是不可用状态会引起什么问题
正如上图,我们部署了三机房5节点的注册中心,当发生网络分区的时候,我们的消费者只能消费本机房的serverB,而不能消费其他机房的serviceB,但是当我们的机房3中的zk不可用的时候,发现消费者不能消费其他机房的serverB,这个是可以理解的,但是他也不能消费同机房的serverB,这就有点过分了
最终我们可以看到,注册中心模型偏向的是AP.
性能问题
基于上面总结,我们可以发现zk其实并不适合做注册中心,但是他的特长是分布式协调服务,如kafka,hbase,hadoop使用zk,就发挥了zk的特长