编程语言
首页 > 编程语言> > java – 基于百分比分布算法的负载均衡器

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