来自两个 Amazon 节点的请求进入同一个后端节点。我想知道为什么?
通过谷歌搜索,我发现“散列是使用客户端地址的 C 类网络地址完成的”
有人可以向我解释一下 ip_hash 背后的算法吗?如果可以的话,请举一些例子。
答案1
答案很简单:coincodence 就是原因。哈希算法使它最终进入同一个桶,它试图解决的问题是“确保同一个客户端始终与同一个后端通信 - 但仍然尝试在我的后端之间保持相当均匀的分布”。
它与其他 IP 哈希算法相同。从最基本的层面来说:
- 您查看与您联系的对方的 IP 地址。
- 您对其进行散列处理 - 这样做会给您一个相当随机的数字(但对于相同的地址,该数字始终相同) - 比 IP 地址更随机,这取决于您的用户,可能非常连续。
- 通过以下方式选择后端
hash % backends
通过这样做,您可以实现客户端的均匀分布 - 但您应该能够期望客户端对每个请求都与同一个后端进行通信。例如,如果您在每台服务器上都存储了会话数据,那么这非常有用。
如果您只是想将负载分散到后端,而不用担心应用程序的运行;那么循环调度是一个更好的选择 - 您将获得更均匀的分布(尽管在大多数情况下只是略有不同 - ip_hash 效果很好) - 并且由于不花时间对客户端地址进行散列,它将消耗更少的资源。