Nginx:ip_hash 背后的算法

Nginx:ip_hash 背后的算法

来自两个 Amazon 节点的请求进入同一个后端节点。我想知道为什么?

通过谷歌搜索,我发现“散列是使用客户端地址的 C 类网络地址完成的”

有人可以向我解释一下 ip_hash 背后的算法吗?如果可以的话,请举一些例子。

答案1

答案很简单:coincodence 就是原因。哈希算法使它最终进入同一个桶,它试图解决的问题是“确保同一个客户端始终与同一个后端通信 - 但仍然尝试在我的后端之间保持相当均匀的分布”。

它与其他 IP 哈希算法相同。从最基本的层面来说:

  1. 您查看与您联系的对方的 IP 地址。
  2. 您对其进行散列处理 - 这样做会给您一个相当随机的数字(但对于相同的地址,该数字始终相同) - 比 IP 地址更随机,这取决于您的用户,可能非常连续。
  3. 通过以下方式选择后端hash % backends

通过这样做,您可以实现客户端的均匀分布 - 但您应该能够期望客户端对每个请求都与同一个后端进行通信。例如,如果您在每台服务器上都存储了会话数据,那么这非常有用。

如果您只是想将负载分散到后端,而不用担心应用程序的运行;那么循环调度是一个更好的选择 - 您将获得更均匀的分布(尽管在大多数情况下只是略有不同 - ip_hash 效果很好) - 并且由于不花时间对客户端地址进行散列,它将消耗更少的资源。

相关内容