Zookeeper Go Client 原理总结

2021-02-24 19:55:12 +08:00
 codeboy18

更多精彩内容,请关注微信公众号:后端技术小屋

〇、环境

zk client: github.com/samuel/go-zookeeper

一、zk client 状态

zookeeper 是一款流行的分布式协调组件,被广泛用于 leader 选举、分布式锁、服务发现、名称服务、配置中心等场景。

1. 状态含义

zk client 与 zk server 在建立连接、保持连接、断开连接的过程中,会经历各种状态。如下所示

const (
    // 暂未使用
    StateUnknown           State = -1
    // 与 zk server 之间的连接断开(也包含初始状态),此时 zk client 会不断重连
    StateDisconnected      State = 0
    // 与 zk server 建立连接之前的暂时状态,表示即将 connect zk server
    StateConnecting        State = 1
    // 暂未使用
    StateAuthFailed        State = 4
    // 暂未使用
    StateConnectedReadOnly State = 5
    // 暂未使用
    StateSaslAuthenticated State = 6
    // 在和 zk server 重新建立 TCP 连接之后,握手阶段发现 session 超时
    StateExpired           State = -112
    // 在和 zk server 成功建立 TCP 连接之后的状态
    StateConnected  = State(100)
    // 和 zk server 成功建立 TCP 连接,并且成功握手(即成功创建 session)
    StateHasSession = State(101)
)

2. 状态转换

二、超时时间

超时时间很大程度上影响了上述状态的转换,有三个超时时间值得关注:

func (c *Conn) setTimeouts(sessionTimeoutMs int32) {
    c.sessionTimeoutMs = sessionTimeoutMs
    sessionTimeout := time.Duration(sessionTimeoutMs) * time.Millisecond
    c.recvTimeout = sessionTimeout * 2 / 3
    c.pingInterval = c.recvTimeout / 2
}

三、异常处理

// Connect establishes a new connection to a pool of zookeeper
// servers. The provided session timeout sets the amount of time for which
// a session is considered valid after losing connection to a server. Within
// the session timeout it's possible to reestablish a connection to a different
// server and keep the same session. This is means any ephemeral nodes and
// watches are maintained

如果 client 和 server 端连接发生异常,可分为三种情况:

推荐阅读

更多精彩内容,请扫码关注微信公众号:后端技术小屋。如果觉得文章对你有帮助的话,请多多分享、转发、在看。

1030 次点击
所在节点    ZooKeeper
1 条回复
AngryPanda
2021-02-24 19:57:09 +08:00
不错,终于看到了二维码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX