假设我具有以下实体:
public class Account {
private String id;
private List<Host> hosts;
}
public class Host {
private String name;
private int percentageLoad;
}
我有一个Web应用程序,其中只有一个端点/check
,其中一个accountId
作为请求参数。
请求的示例可以是:localhost:8080/check?accountId=123456
。
该服务必须验证嵌入式数据库中是否存在accountId
,如果存在,它将以主机名作为答案。这些主机具有负载百分比,应根据其负载百分比来平衡答案。
这可能会混淆我的解释,所以我举一个例子:
假设我的数据库中有以下Account
:
Account:
- id: 123
- hosts: [{machine1, 60}, {machine2, 40}]
您会看到该帐户的ID为123
,并且有两个主机,每个主机的负载百分比为一个。
如果我收到以下请求:localhost:8080/check?accountId=123
,则由于该帐户ID存在于数据库中,因此它应根据负载百分比来平衡主机名答案。
更明确地说,假设我发出了10个类似的请求:localhost:8080/check?accountId=123
,则主机名machine1
应该返回6次(因为它的负载百分比为60%),而{{1} }应该返回4次(因为它的负载百分比为40%)。
我真的不知道该采用哪种策略来平衡它。
我想到了一个计数器,用于计算每台机器的答案数量。或者选择一个介于0到10之间的随机数,然后根据该数字决定一台或多台计算机。但是我认为它们不是好的方法,关于平衡算法的任何想法吗?
答案 0 :(得分:1)
在Host
类中需要另一个变量:
public class Host {
private String name;
private int percentageLoad;
private int percentageAccum;
}
percentageAccum
的初始值为percentageLoad
的值。
收到请求后:
percentageAccum
的主机percentageAccum
中减去所选主机的100 percentageLoad
添加到percentageAccum
略微的优化是在更新所有主机的percentageAccum
时确定下一个选择。