<分区>
假设我有以下实体:
public class Account {
private String id;
private List<Host> hosts;
}
public class Host {
private String name;
private int percentageLoad;
}
我有一个只有一个端点 /check
的 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 之间的随机数,然后根据该数字决定使用一台机器还是另一台机器。但我认为它们不是好的方法,有没有关于平衡它的算法的想法?