设为首页 收藏本站
查看: 1001|回复: 0

[经验分享] Zookeeper-Client端初始化过程.

[复制链接]

尚未签到

发表于 2017-4-19 10:59:24 | 显示全部楼层 |阅读模式
  Zookeeper全参数构造函数:

  • public Zookeeper(String connectString,int sessionTimeout,Watcher watcher,long sessionId,byte[] sessionPWD,boolean canBeReadOnly)
 
DSC0000.jpg
F1 Zookeeper实例整体过程


DSC0001.jpg
 F2 内部原理

 

 


  • 如果server端开启了”readonlymode.enabled”,即允许当前server可以readonly方式运行,
  • 当server端尚未加入集群(处于LOOING状态),或者集群处于”危险状态”(大多数机器已经失效),那么此时server将会readonly模式,即只能接受read,不能接受write.因为此时write将无法保证在整个集群中是”一致性成功”的.
  • 处于LOOKING状态的server,会将实例化一个ReadOnlyZookeeper实例来为当前server上的所有请求服务.
  • 如果client允许连接readonly server(当然也可以连接R/W server),那么在实例化ZK时,传递canReadonly = true即可.在client与server建立链接时(其他请求时也会),将会把此参数交付给server,server会回馈自己的模式是不是readonly.如果client和一个”只读”模式的server建立了链接,那么client在SendThread的处理体中,开启一个pingRW的分支,通过ping的方式查找server列表中是否有server已经处于R/W模式,如果找到,那么将以异常的方式(RWServerFoundException)结束当前socket,并和R/W server建立链接.这些过程,将对Client不可见.
  • Client通过将请求/响应队列化来确保所有交互的有序性,xid是client维护的唯一性id.server端也会做类似的全序性控制.如果发现交互中次序不符合约定,将会导致异常.
  • connectString即为客户端可以连接的Server列表,此列表必须和server配置的列表一致。即使不一致,也能工作,比如client交付了server配置列表的一部分;不过如果client交付的列表不在server配置中或许不能工作。
  
源码参考:
1)    Zookeeper:面向client服务类,通过此类可以创建ZK client实例,以及向server提交请求,此类还间接的负责Watcher的注册和跟踪.
2)    ClientCnxn:client与server交互处理类,负责根据请求类型/数据信号,封装请求内容;负责根据server响应的内容/error信号,封装响应内容或者触发本地事件;根据链接状态或者server响应内容,转换client状态.
3)    ReadOnlyZookeeperServer:只读模式下,Server将会实例化一个临时的此实例,为client服务.
4)    ServerCnxn/NIOServerCnxn:server端处理请求的handle类,通过工厂模式为每个client绑定一个.注意,它只是handle类,仍然会在单线程模式下被使用,被相应的ZookeeperServer实例所调度.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366301-1-1.html 上篇帖子: Storm+zookeeper+metaq 消息处理过程详解 下篇帖子: ZooKeeper JAVA API 之环境准备和创建会话
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表