java – 基于百分比分布算法的负载均衡器
作者:互联网
参见英文答案 > Percentage load balance thread requests 2个
我们假设我有以下实体:
public class Account {
private String id;
private List<Host> hosts;
}
public class Host {
private String name;
private int percentageLoad;
}
我有一个Web应用程序,只有一个端点/检查,其中accountId作为请求参数.
请求的示例可以是:localhost:8080 / check?accountId = 123456.
该服务必须验证accountId是否存在于嵌入式数据库中,如果存在,则以主机名称进行回答.这些主机具有负载百分比,并且应根据其负载百分比平衡答案.
可能会让我想要解释的东西混乱,所以我举一个例子:
假设我在数据库中有以下帐户:
Account:
- id: 123
- hosts: [{machine1, 60}, {machine2, 40}]
正如您所看到的,该帐户具有123作为id和两个主机,每个主机具有一个百分比负载.
如果我收到以下请求:localhost:8080 / check?accountId = 123,那么当数据库中存在该帐户ID时,它应根据负载百分比平衡主机的名称答案.
更清楚的是,假设我发出了10个类似的请求:localhost:8080 / check?accountId = 123,那么主机名machine1应该返回6次(因为它的负载百分比为60%),而machine2应该返回4次(因为它的负载百分比为40%).
我真的不知道应该采用哪种策略来平衡它.
我想到了一个计数器,它计算每台机器的答案数量.或者选择0到10之间的随机数,并根据该数字决定一台或另一台机器.但我认为它们不是很好的方法,任何关于算法的想法来平衡它?
解决方法:
你需要在Host类中使用另一个变量:
public class Host {
private String name;
private int percentageLoad;
private int percentageAccum;
}
percentageAccum的初始值是percentageLoad的值.
收到请求时:
>选择百分比最高的主机
>从所选主机的percentageAccum中减去100
>为所有主机(包括所选主机)添加percentageLoad为percentageAccum
稍微优化是在更新所有主机的percentageAccum时确定下一个选项.
标签:java,algorithm,rest,load-balancing 来源: https://codeday.me/bug/20190705/1387998.html