万字长文浅析微服务Ribbon负载均衡源码(二):负载均衡器

2020-05-25 00:00:00 更新 列表 服务 实例 均衡器

版本

作者:韩数
Github:github.com/hanshuaikang
完成日期:2019-06-16日
jdk:1.8
springboot版本:2.1.3.RELEASE
SpringCloud版本:Greenwich.SR1

声明:

身为一个刚入门的计算机菜佬,阅读源码自然离不开参考书籍和视频的引导,本篇文章的分析过程中"严重"借鉴了 翟永超 前辈的《SpringCloud微服务实战》这本书籍,在这里也向准备学习微服务的小伙伴们强烈推荐这本书,大家可以把这篇文章理解为《SpringCloud微服务实战》Ribbon部分的精简版和电子版,因为个人水平的原因,很多问题不敢妄下定论,以免误人子弟,所有书上很多内容都是精简过后直接放上去的,由于SpringCloud已经迭代到了Greenwich.SR1版本,Ribbon也和书上有了略微的差别,本篇文章的源码采用的是Ribbon新版本,同时,因为时间原因,有很多额外的子类实现并没有完全顾上,例如PredicateBasedRule类的ZoneAvoidanceRule和AvailabilityFilteringRule 感兴趣的读者可以买《SpringCloud微服务实战》这本书细看,同时强烈推荐小马哥的微服务直播课系列《小马哥微服务实战》。

致谢

翟永超:博客地址:

blog.didispace.com/abou

小马哥: Java 微服务实践 - Spring Boot / Spring Cloud购买链接:

segmentfault.com/ls/165

电子版及相关代码下载(欢迎Star)

Github:github.com/hanshuaikang

微信公众号:码上marson

负载均衡器

AbstractLoadBalancer 类

import java.util.List;

public abstract class AbstractLoadBalancer implements ILoadBalancer {
    
    //一个关于服务实例的分组枚举类,定义了三种不同的级别
    public enum ServerGroup{
        ALL,
        STATUS_UP,
        STATUS_NOT_UP        
    }
        
    /**
     * 选择一个服务实例,key为null,忽略key的条件判断
     */
    public Server chooseServer() {
        return chooseServer(null);
    }

    /**
     * 根据不同的分组类型来选择返回不同的服务实例的列表
     */
    public abstract List<Server> getServerList(ServerGroup serverGroup);
    
    /**
     * 获取与负载均衡器相关的统计信息
     */
    public abstract LoadBalancerStats getLoadBalancerStats();    
}

相关文章