RPC客户端负载均衡
RPC客户端负载均衡
0x00 负载均衡的插入点
一般是客户端或调用方进行负载均衡的处理。
0x01 常见的负载均衡策略
LocalFirst-本地优先
获取所有的本地服务提供者,按照一定顺序,取得被调用次数最小的服务提供者。
public class LocalFirstLoadBalance {
public static void main(String[] args) {
LocalFirstLoadBalance balance = new LocalFirstLoadBalance();
for (int i = 0; i < 10; i++) {
Refer refer = balance.getRefer();
System.out.println(refer);
refer.incrActiveCount("");
}
}
public Refer getRefer() {
List<Refer> refers = getLocalRefers();
Refer refer = null;
for (int i = 0; i < refers.size(); i++) {
int index = i % refers.size();
Refer temp = refers.get(index);
if (!ReferUtils.isReferAvailable(temp)) {
continue;
}
if (refer == null) {
refer = temp;
} else {
if (compare(refer, temp) > 0) {
refer = temp;
}
}
}
return refer;
}
private int compare(Refer referer1, Refer referer2) {
return referer1.activeRefererCount() - referer2.activeRefererCount();
}
private List<Refer> getLocalRefers() {
List<Refer> allRefers = ReferUtils.getAllRefers();
List<Refer> collect = allRefers.stream().filter(ReferUtils::isLocalRefer).collect(Collectors.toList());
return collect;
}
}