避免“惊群效应”(Thundering Herd)

当服务器发生故障时,可能会出现一种称为惊群效应的反模式,即所有客户端都立即尝试重新连接,从而造成拒绝服务攻击。为了防止这种情况,大多数 NATS 客户端库会对尝试连接的服务器进行随机化排序。如果只使用单台服务器,此设置不起作用;但在集群情况下,随机化或打乱顺序将确保没有任何一台服务器独自承受客户端的重连尝试。

但是,如果您希望在连接和重连时禁用随机化过程,使得服务器始终按照固定顺序进行连接尝试,您可以在大多数客户端库中通过一个连接选项来实现。

servers := []string{"nats://127.0.0.1:1222",
    "nats://127.0.0.1:1223",
    "nats://127.0.0.1:1224",
}

nc, err := nats.Connect(strings.Join(servers, ","), nats.DontRandomize())
if err != nil {
    log.Fatal(err)
}
defer nc.Close()

// Do something with the connection

最后更新于