SpringCloud Ribbon的分析(二)

 上文我们分析到 loadBalancer 根据具体的算法选择相应的server。

复制代码
protected Server getServer(ILoadBalancer loadBalancer) {         if (loadBalancer == null) {             return null;         }         return loadBalancer.chooseServer("default"); // TODO: better handling of key    }
复制代码

 loadBalancer是定义软件负载均衡器操作的接口,共有以下几个实现类

本文便从loadBalancer开始分析ribbon具体的负载均衡策略

LoadBalancer


 

首先看AbstractLoadBalancer 定义了几个基础的方法

复制代码
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);      /**  * 定义了获取LoadBalancerStats对象的方法,LoadBalancerStats对象被用来存储负载均衡器中  * 各个服务实例当前的属性和统计信息。这些信息非常有用,我们可以利用这些信息来观察负载均衡  * 的运行情况,同时这些信息也是用来制定负载均衡策略的重要依据。  */public abstract LoadBalancerStats getLoadBalancerStats();      } 
复制代码

 

 再看BaseLoadBalancer

BaseLoadBalancer定义了两个数组分别用来缓存所有服务实例和正常服务实例

复制代码
@Monitor(name = PREFIX + "AllServerList", type = DataSourceType.INFORMATIONAL)     protected volatile List<Server> allServerList = Collections             .synchronizedList(new ArrayList<Server>());     @Monitor(name = PREFIX + "UpServerList", type = DataSourceType.INFORMATIONAL)     
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信