Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

一:Ribbon核心组件IRule

1、根据特定的算法中从服务列表中选取一个要访问的服务

2、SpringCloud结合Ribbon默认的自带有七种算法

3、可用在RitHup上查询源码

https://github.com/Netflix/ribbon

1、RoundRobinRule

1、轮询,依次执行每个执行一次(默认)

2、RandomRule

1、随机

2、在客户端(80)的配置类上(ConfigBean.java)加上新的Bean覆盖默认的轮询

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

2、在进行测试查询

先启动3个Eureka集群服务

在启动3个Dept(8001/8002/8003)微服务

在次启动消费端(80)并执行访问

http://localhost/consumer/dept/list

每次执行的就是随机的了而不是轮询算法

3、AvailabilityFilteringRule

1、会先过滤掉多次访问故障而处于断路器跳闸状态的服务

2、和过滤并发的连接数量超过阀值得服务,然后对剩余的服务列表安装轮询策略进行访问

4、WeightedResponseTimeRule

1、根据平均响应时间计算所有的服务的权重,响应时间越快服务权重越大,容易被选中的概率就越高。

2、刚启动时,如果统计信息不中,则使用RoundRobinRule(轮询)策略,等统计的信息足够了会自动的切换到WeightedResponseTimeRule

5、RetryRule

1、先按照RoundRobinRule(轮询)的策略获取服务,如果获取的服务失败侧在指定的时间会进行重试,进行获取可用的服务

2、如多次获取某个服务失败,这不会再再次获取该服务如(高德地图上某条道路堵车,司机不会走那条道路)

6、BestAvailableRule

1、会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

7、ZoneAvoidanceRule

1、默认规则,复合判断Server所在区域的性能和Server的可用性选择服务器

二:自定义Ribbo的策略一

1、自定义Ribbon的算法不去用自带的算法

1、修改消费端(80)主启动类DeptConsumer80_Ch

1、加上注解@RibbonClient(name="对外曝光微服务的名称",configuration=自定义的Rlue配置类.class)

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

2、自定义xxxRlue类定义规则

1、注意1:自定义的Rlue配置类不放在@ComponentScan注解所扫描的当前包下以及该子包下,不然自定义的配置类就会被所有的Ribbon客户端共享,也就达不到特殊制定的目的了

注解@ComponentScan就是@SpringBootApplication中

2、注意2:当自定义了,之前ConfigBean配置类中的IRule不能存在,不然系统无法抓取那个

3、创建一个类不在当前工程注解@ComponentScan的同包或者子包中

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

4、测试自定义的是否成功启动(7001/7002/7003->8001/8002/8003->80)

http://localhost/consumer/dept/get/1

二:自定义规则深入解析

1、需求:依旧使用默认的轮询策略,但是加上新的需求每个服务器要求被调用4次

说白就是之前一台机器执行一次现在是每台机器执行4次

2、查询源码:https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/RandomRule.java

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

3、在自定义xxxRlue类同包中创建一个算法类(如:RandomRule_My)

4、将源码部分负责到算法类中并修改如下,并把MyRlue类的返回值修改成当前类的

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

5、测试自定义的是否成功启动(7001/7002/7003->8001/8002/8003->80)看看是否是执行的4次

http://localhost/consumer/dept/get/1

Ribbon(负载均衡)核心组件IRule与自定义Ribbo的策略

猜你喜欢

转载自blog.csdn.net/weixin_34218890/article/details/86716219