2018年2月

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;
    }

}

- 阅读剩余部分 -