将消息概率转发到服务器子集

Probabilistic forwarding of messages to a subset of servers

n 个服务器(n >= 1),我们想转发一部分传入请求(使用一个介于 0 和 1 之间的常量 ratio)到这些服务器。

目标是平均总共 n x ratio 条转发消息,其中选择每个服务器作为接收请求目标的机会大致相同。

简单的解决方案是使用 ratio 过滤传入的请求,然后将每个请求转发到所有 n 个服务器,这样我们得到一个平均值 n x ratio。我们实际需要的是每次将一部分请求转发到可用服务器的一个子集,并且仍然有n x ratio作为转发请求的平均数量。

有人有解决办法吗?

将每个请求转发到 n * ratio 个服务器。

如果 n * ratio = k 很可能不是整数,则转发到 floor(k)ceil(k) 服务器,转发到 ceil(k) 的概率是 k - floor(k).

在选择服务器方面,只需执行 Fisher-Yates shuffle,直到您选择了随机选择的服务器数量。