将消息概率转发到服务器子集
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,直到您选择了随机选择的服务器数量。
有 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,直到您选择了随机选择的服务器数量。