一、对一些常用的接口说明及方法
1.IRule
这是所用负载均衡策略的父接口,里面的核心方法就是choose方法,用来选择一个服务的实例。
2.AbstractLoadBalancerRule
AbstractLoadBalancerRule是一个抽象类,里面主要定义了一个ILoadBanlancer,就是我们所用的负载均衡,定义它的目的主要是辅助负载均衡策略选取的服务端实例,
3.RandomRule
RandomRule他是一个随机选 择一个服务实例,看源码我们知道,在RandomRlue的无惨构造方法中初始化了一个Random对象,然后在他重写的choose方法又调用choose这个重载的choose方法,这个重载的choose方法中,每此利用random对性生成一个不大于服务实例总数的随机数,并将该数作为下标所以获取一个服务实例,
4.RoundRobinRule
RoundRobinRule这种负载均衡策略叫做线性轮询负载均衡策略,这个类的choose函数整体逻辑是这样的:开启一个计数器count,在while循坏中遍历服务清单,货物清单之前,先通过incrementAndGetModule方法获取一个下标,这个下标是一个不断自增的数先加1然后和服务清单总数去摸之后获取到的,拿着下标再去服务清单列表中去服务,每次循环计数器都会加1,如果连续10次都没有取到服务,则会报一个警告 No available alive servers after 10 tries from load balancer:xxx
5.RetryRlue(在轮询的基础上进行重试功能)
这种负载均衡策略带有重试功能,首先RetryRule又定义了一个subRule,他的实现类是RoundRobbinRule,然后在RetyRule的choose方法中,每次还是采用RoundRobinRule中的choose规则来选择一个服务实例,如果选到的实例正常就返回,如果选择的服务实例为null或者已经失败,则在失效的时间deadline之前不断的进行重试,若果超过了deandline还是没有取到服务实例就返回null
6.weightedResponseTimeRule(权重nacos的nacosRule,Nacos还扩展了一个自己基于配置的权重扩展)
它是RoundRobinRule的一个子类,它是对RoundRule的功能扩展,weightedResponseTimeRule中会根据每一个实例的运行情况来给计算出该实例的一个权重,然后在挑选实例的时候则根据权重进行挑选,默认情况下,每隔30秒会计算一次各个服务实例的权重
饥饿加载
Ribbon 默认采用赖加载,即第一次访问的时候才会去创建LoadBalanceClient,所以第一次请求的时候时间会长一点,而饥饿加载则会在项目启动的时候创建LoadBalanceClient,降低了第一次访问的耗时,会没可以指定一个服务开启饥饿加载,在yml文件中配置
ribbon:
eager-load:
enable: true //开启饿汉加载
clients: user-service //指定user-service这个服务要开启这个饿汉加载