zookeeper客户端如何选服务器

使用zk时需要为客户端配置zk服务器的地址,类似192.168.0.1:2181,192.168.0.1:2182,192.168.0.1:2183(/apps/x)(后面可以加上应用的隔离命名空间,只有该应用可以访问该空间下的所有znode)
zk底层是用HostProvider实现的,可以自己是先HostProvider,但是要满足三要素:

  1. next()方法必须要有合法的返回值,不能有null。
  2. next()方法必须返回已解析的InetSocketAddress对象。
  3. size()方法不能返回0

zk对HostProvider的默认实现StaticHostProvider的实现方式:

  1. 将地址打散,随机形成一个地址环,取地址时循环取,该操作只有在初始化时完成。
  2. 设置currentIndex和lastIndex,初始值-1相等。取地址是,currentIndex向前进1,如果发现两个值相等,则等待spinDelay毫秒时间。
    整个过程类似round robin 的调度策略。

其他策略

  1. 动态变更的地址列表管理。
    自定义一个HostProvider,定时从DNS或者配置管理中心上解析出zk的地址列表,如果该列表变更,则更新到serverAddresses集合中,下次调用next()时自然生效。
  2. 实现同机房优先策略。
    将地址按照机房维度划分,每次取先取同机房的循环列表。

你可能感兴趣的:(zookeeper)