Zookeeper 多数据中心部署
现在满多互联网公司说实现多活,多活面临的一个基本问题是,服务协调和通信而且是在跨地域跨数据中心的情况下,解决网络延迟和数据一致的问题,下面我们看下zookeeper 跨多Data Center 部署方案 单个zookeeper 集群
单个集群即zookeeper的acceptor节点部署在多个区域,保证数据一致性。
则种部署方式能完全保证可用性,不回出现单点,但是在commit 投票时,都需要跨地域操作,不可避免的要面对网络延迟和带宽的开销,即更新操作就比较慢了,想想假如在北京和上海两个数据中心,更新操作commit 投票时一个请求就要30ms的延迟。 Acceptors 和 learner 分开部署
这种部署方式是acceptor 部署在一个集群负责投票和选举。learner 分别部署在其他的数据中心,负责同步数据,这样能减少更新操作时的网络延迟,因为都在一个数据中心通信,网络和带宽没有问题,但是写吞吐量受到了单个Acceptors集群的限制,在远程数据中心的更新回有很大的延迟,以及还有单点问题。多个zookeeper 集群
这种模式是一个地区一个zookeeper集群,learner分别部署在异地, 比如上海和北京都部署一个,上海的zookeeper 集群的learner 部署在北京,北京的learner部署在上海,这种部署的方式的好处是多个数据中心可以并行处理请求,吞吐量高,而且一个数据中心出现故障,其他的不回受影响,单是这种方案有一个一致性的问题,在并发更新而且从异地数据中心读另外一个更新的数据时, 多zookeeper 集群 而且保证一致性的方案
Modular composition
基于上面三种方案的优缺点,Modular Composition of Coordination Services 这篇论文提供了一个解决方案,他们对zookeeper 的server 端的一个组件commit processor做了修改,并提供了一个waper的client ,并且提供了batch for zookeeper,zookeeper社区在3.6版本回合并进来,主要实现如下两个关键改进: 服务端
服务端通过隔离每个客户端的请求,来增加吞吐量,目前zookeeper的commit processor 实现是为所有的客户端请求维持一个队列,这样不同的客户端更新也有等前面的请求完成2PC后才能进入后面的处理。 客户端
客户端通过对zk client的包装,可以链接多个zookeeper 集群,具体请参考相关的论文。 总结
zookeeper 多数据中心部署方案的比较
![079e4fa90fc99bf1a3afb80d0952f1a9.png](https://i-blog.csdnimg.cn/blog_migrate/15271d595df761b84e5ed7f3463f2c49.png)
链接:https://www.jianshu.com/p/43c17bb12b62
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。