Nginx:algorithm背后的ip_hash

请求从我的两个亚马逊节点进入相同的后端节点。 我想弄清楚为什么?

通过谷歌search,我发现“哈希是使用客户端地址的C类networking地址”

任何人都可以解释我背后的ip_hashalgorithm,如果可能的话,一些例子。

非常简短的答案是:一致性是为什么。 散列algorithm使它最终陷入同一个桶中,而它试图解决的问题是“确保同一个客户端总是与同一个后端对话,但仍然试图在后端保持相当均匀的分布”。

它等价于其他IP散列algorithm。 在一个非常基本的层面上:

  1. 你看看与你联系的对方的IP地址。
  2. 你哈希它 – 这样做给你一个相当随机的数字(然而,总是相同的地址) – 比IP地址更随机,这取决于你的用户可以是非常顺序的。
  3. 通过做hash % backendsselect一个hash % backends

通过这样做,你的客户是一个相当平均的客户,但是你应该能够期望客户对每一个请求都保持对话。 例如,如果每个服务器上都存储了会话数据,则这非常有用。

如果你只是想将负载分散到你的后端,并且没有什么可以担心的话, 循环是一个更好的select – 你会得到一个更均匀的传播(即使在大多数情况下只是勉强一点 – ip_hash工程很好) – 它会消耗略less的资源,因为没有花费时间散列的客户端地址。