假设我有以下实体:
public class Account {
private String id;
private List<Host> hosts;
}
public class Host {
private String name;
private int percentageLoad;
}
我有一个网络应用程序,只有一个端点
/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%),machine2
应该返回4次(因为它的负载百分比为40%)。我真的不知道应该采取什么策略来平衡它。
我考虑过一个计数器,用于计算每台机器的答案数,或者在0到10之间选择一个随机数字,并根据该数字决定哪个机器。但我认为它们不是好的方法,您有关于平衡的算法的任何想法吗?
machine1
可能会在每个请求中都被返回 :S - Mohamed Said Benmousa