【问题标题】:Istio 0.8. Details about LoadBalancerSettings.ConsistentHashLBIstio 0.8。关于 LoadBalancerSettings.ConsistentHashLB 的详细信息
【发布时间】:2020-05-18 04:16:22
【问题描述】:

有人可以提供有关此负载平衡算法如何工作的更多详细信息或示例吗?

https://istio.io/docs/reference/config/istio.networking.v1alpha3/#LoadBalancerSettings.ConsistentHashLB

基于一致散列(ketama 散列)的负载均衡器以实现均匀负载 连接池更改时的分发/重新分发。这个 负载均衡策略仅适用于基于 HTTP 的连接。一个 用户指定的 HTTP 标头用作 xxHash 散列的键。

【问题讨论】:

    标签: istio


    【解决方案1】:

    LoadBalancerSettings.ConsistentHashLB 标志用于 Envoy 配置,Envoy's Load Balancing Docs 中有更多详细信息:

    环/模哈希负载平衡器对上游主机实现一致的哈希。该算法基于将所有主机映射到一个圆上,以便从主机集中添加或删除主机更改仅影响 1/N 请求。这种技术通常也称为“ketama”散列。

    这是一种哈希算法,可减少在 Envoy 的平衡池中添加和删除服务器的影响(例如,VirtualService 后面的服务器)。

    如果没有这样的算法,将单个服务器添加到池中causes hashes to map to different servers

    我们编写了 ketama 来替换我们的 memcached 客户端如何将密钥映射到服务器...每当我们从池中添加或删除服务器时,一切 散列到不同的服务器,这有效地擦除了整个缓存。


    回到 Istio - Envoy 的文档再次注意:

    一致的哈希负载均衡器仅在使用指定哈希值的协议路由时才有效。

    这意味着 - 指定一个标头来生成散列。来自Istio docs

    httpHeader |字符串 |必需的。将用于获取哈希键的 HTTP 请求标头的名称。如果请求头不存在,负载均衡器将使用随机数作为哈希,有效地使负载均衡策略随机化。

    【讨论】: