📜  服务器上的负载平衡(随机算法)

📅  最后修改于: 2022-05-13 01:56:09.053000             🧑  作者: Mango

服务器上的负载平衡(随机算法)

考虑一个高流量网站,每五分钟接收数百万个请求(不同类型),该站点有 k(例如 n = 1000)台服务器来处理请求。服务器之间的负载应该如何平衡?

我们一般想到的解决方案是
a) 循环赛
b) 将新请求分配给负载最小的服务器。

上述两种方法看起来都不错,但它们需要维护额外的状态信息以进行负载平衡。以下是一种比上述方法效果更好的简单方法。

Do following whenever a new request comes in, 
        Pick a random server and assign the request to a random server

上述方法更简单、轻量并且出奇地有效。这种方法不计算服务器上的现有负载,也不需要时间管理。

上述随机方法分析
让我们分析使用上述随机选择服务器的方法时服务器上的平均负载。

假设有 k 个请求(或作业) J 1 , J 2 , ... J k

假设有 n 个服务器是 S 1 , S 2 , ... S k

让第 i 份工作花费的时间为 T i

让 R ij从 Job J j加载到服务器 S i上。

如果将第 j 个工作(或 J j )分配给 S i ,则 R ij为 T j ,否则为 0。因此,R ij的值为 T j ,概率为 1/n,值为 0,概率为 (1-1/n )

让 R i加载到第 i 个服务器上

第 i 个服务器上的平均负载 'Ex(R i )' [应用预期线性度] = 负载平衡2 = 负载平衡3 =(总负载)/n

因此,服务器上的平均负载是总负载除以 n,这是一个完美的结果。

偏离平均值的可能性有多大(特定服务器负载过大)?
上述随机分配方法的平均负载看起来不错,但特定服务器可能会变得负载过大(即使平均值还可以)。
事实证明,偏离平均值的概率也非常低(可以使用 Chernoff 界来证明)。读者可以参考下面的参考链接来证明偏差。例如,在 MIT 视频讲座中,表明如果每单位时间有 2500 个请求并且有 10 个服务器,那么任何特定服务器获得 10% 以上负载的概率最多为 1/16000。类似的结果也显示在第二个参考文献的末尾。

所以上面简单的负载均衡方案很完美。事实上,该方案用于负载均衡器。

参考:
http://www.cs.princeton.edu/courses/archive/fall09/cos521/Handouts/probabilityandcomputing.pdf

麻省理工学院视频讲座