ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Zookeeper学习(一):Zookeeper优缺点

2021-08-29 12:02:42  阅读:171  来源: 互联网

标签:zookeeper 隔离 系统 Zookeeper 优缺点 学习 机房 master 一致性


  • zookeeper不是为高可用设计的

  • 由于要跨机房容灾,很多系统实际上是需要跨机房部署的。出于性价比的考虑,通常会让多个机房同时工作,而不会搭建N倍冗余。也就是说单个机房肯定撑不住全流量。由于zookeeper集群只能有一个master,因此一旦机房之间出现故障,zookeeper master就只能照顾一个机房,其他机房由于没有master,都只能停止工作。于是所有的流量集中到有master的那个机房,于是系统crash。
  • 即使同一个机房里面,由于网段不同,在调整机房交换机的时候偶尔也会发生网段隔离的情况。实际上机房每个月基本都会发生短暂的网络隔离之类的子网段调整。在那个时刻zookeeper处于不可用状态。如果整个业务系统基于zookeeper,则系统的可用性将非常脆弱。
  • 由于zookeeper对于网络隔离的极度敏感,导致zookeeper对于网络的风吹草动都会做出激烈反应。这使得zookeeper的不可用时间比较多,我们不能让zookeeper的不可用,变为系统的不可用。

zookeeper选举过程很慢

  • 这是一个很难从理论分析上看到的弱点,但是你一点遇上就会很痛苦
  • 之前说过,网络实际上常常会出现隔离等不完整状态的,而zookeeper对那种情况非常敏感。一旦出现网络隔离,zookeeper就会发起选举流程。
  • zookeeper的选举流程非常耗时间,通常耗时30至120秒,期间zookeeper由于没有master,都是不可用的。
  • 对于网络里面偶尔出现的,比如半秒一秒的网络隔离,zookeeper会由于选举过程,而把不可用时间放大几十倍。

zookeeper性能是有限的

  • 典型的zookeeper的tps大概是一万多,无法覆盖系统每天动辄几十亿的调用。因此每次请求都去zookeeper获取业务系统master是不可能的。
  • 因此zookeeper的client必须自己缓存业务系统的master地址。
  • 因此zookeeper提供的强一致性实际上是不可用的。如果我们需要强一致性,还需要其他机制来进行保证。比如:用脚本自动将系统old master给Kill掉。

zookeeper权限薄弱

  • zookeepr权限系统非常薄弱
  • 在大型分布式系统中,使用zookeeper必须再额外开发一套权限系统。
  • 额外的权限系统不但增加了系统的复杂度和维护成本,而且降低了系统的性能。

即使有了zookeeper也很难避免业务系统的数据不一致

  • 前面已经讨论过了,由于zookeeper的性能限制,我们无法让每次系统内部调用都走zookeeper,因此总有某些时刻,业务系统会存在两个master(业务系统client那边缓存的业务系统master信息是定时从zookeeper更新的,因此会有更新不同步的问题)。
  • 如果要在业务系统client的master信息不一致的情况下,仍要保持系统的数据一致性,唯一的方法是“先kill掉老master,再在zookeeper上更新master信息”。但是在是否要kill current master这个问题上,程序是无法完全自动决定的(因为网络隔离的时候zookeeper已经不可用了,自动脚本没有全局信息,不管怎么做都可能是错的,什么都不做也可能是错的。当网络故障的时候,只有运维人员才有全局信息,程序是无法接电话得知其他机房的情况的)。因此系统无法自动的保障数据一致性,必须要人工介入。而人工介入的典型时间是半个小时以上,我们不能让系统这么长时间不可用。因此我们必须在某个方向上进行妥协,最常见的妥协方式是放弃‘强一致性’,而接受‘最终一致性’。
  • 如果我们需要人工介入才能保证‘可靠的强一致性’,那么zookeeper的价值就大打折扣。

如何做能更大提升zookeeper可用性

  • 我们或者选择人工介入的强一致性,或者选择程序自动化进行的弱一致性。需要进行取舍。
  • 最终一致性甚至未必是程序来做的,有时候人工修正数据反而在灵活、可靠、低成本上有优势。这需要权衡。
  • 不要迷信zookeeper,有时候不妨考虑一下主备数据库。数据库自带权限控制,用起来比zookeeper方便多了。
  • zookeeper比较有价值的东西也许是内容变化的时候,可以阻塞回调的方式通知所有在线的client实时更新信息,但这个功能用处不大。因为php这样的模块你很难说它是在线还是离线,每次都是新发起的。一旦这个功能无法支持php,就无法覆盖整个系统,那么就无法保证强一致性了。

 

标签:zookeeper,隔离,系统,Zookeeper,优缺点,学习,机房,master,一致性
来源: https://www.cnblogs.com/yssd/p/15202219.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有