我有一个线程将传入的 IPv6 连接委托给 X 工作线程,其中具有相同 IPv6 源地址的连接应始终发送到同一个工作线程。但是,考虑到来自 Internet 的大量连接,我还想最小化所有 X 工作线程必须承担的负载差异(即,在任何给定的大时间间隔内,所有工作线程都应该被委托与大约相同数量的唯一 IPv6 地址)。
最简单的做法是将 IPv6 地址的全部或部分解释为数字 N,并将其发送到索引为 [N mod X] 的工作线程。但是,IP 地址具有低熵(即某些位比其他位更频繁地(未)设置,因此非常随机),因此会导致工作线程之间的负载平衡不佳。
显然,需要对地址执行某种低成本的散列,以获得具有更高熵的密钥。那么这个问题有记录的解决方案吗?不需要产生奇妙的随机性,只需要已知可以很好地与 IPv6 地址一起工作的东西。
编辑删除了关于避免碰撞的句子(因为在这种情况下,碰撞实际上完全没问题)。