Ribbon【负载均衡策略】
时间:2019-10-18
本文章向大家介绍Ribbon【负载均衡策略】,主要包括Ribbon【负载均衡策略】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
ribbon有7种负载均衡策略可供选择:
策略类 | 命名 | 描述 |
RandomRule | 随机策略 | 随机选择server |
RoundRobinRule | 轮询策略 | 按照顺序选择server(ribbon默认策略) |
RetryRule | 重试策略 | 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server |
BestAvailableRule | 最低并发策略 | 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) |
ResponseTimeWeightedRule | 响应时间加权重策略 | 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server |
如果想要创建一个全局的负载策略,只需添加一个配置类,也可自己扩展,添加逻辑,如下:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; @Configuration public class RibbonConfiguration { @Bean public IRule ribbonRule() { return new RandomRule(); } }
如果想要对某个服务源设置特有的策略,可以在工程启动类上添加@RibbonClient注解,当然,对应配置代码也需要调整:
/** * 自定义-标记注解 */ public @interface AvoidScan { }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; /** * Ribbon负载策略配置类,IClientConfig是针对客户端的管理配置器,配合@RibbonClient注解使用 */ @Configuration @AvoidScan public class RibbonConfiguration { @Autowired private IClientConfig config; @Bean public IRule ribbonRule(IClientConfig config) { return new RandomRule(); } }
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import cn.springcloud.book.config.AvoidScan; import cn.springcloud.book.config.TestConfiguration; /** * 工程启动类 */ @SpringBootApplication @EnableDiscoveryClient @RibbonClient(name = "client-a", configuration = RibbonConfiguration.class)//表示针对client-a服务使用的负责策略是经过RibbonConfiguration配置类的。 //@RibbonClients(value = { // @RibbonClient(name = "client-a", configuration = RibbonConfiguration.class), // @RibbonClient(name = "client-b", configuration = RibbonConfiguration.class) //})//这种方式跟@RibbonClient类似,不过这个是针对多个服务进行策略指定。 @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {AvoidScan.class})})//表示让工程在启动的时候,不让Spring扫描被@AvoidScan注解标记的类, //因为配置的是针对特殊服务的负载策略,不是全局的,如果不排除,启动就会报错。 public class RibbonLoadbalancerApplication { public static void main(String[] args) { SpringApplication.run(RibbonLoadbalancerApplication.class, args); } }
如果想使用配置文件的方式,进行配置负责策略,语法是 client name.ribbon.*,client name是我们自己给服务取的名字,即:spring.application.name设置的值。如下:
client-a:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #针对client-a服务使用随机策略
原文地址:https://www.cnblogs.com/idoljames/p/11698923.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vue3.0的异步更新原理
- 小白学PyTorch | 10 pytorch常见运算详解
- vuex的基础知识点
- 小白学PyTorch | 11 MobileNet详解及PyTorch实现
- 小白学PyTorch | 12 SENet详解及PyTorch实现
- 重拾前端技能为你的职业前程保驾护航
- input切换显示与隐藏,歘~
- 小白学PyTorch | 13 EfficientNet详解及PyTorch实现
- Java 比较两个字符串内容是否相等
- 前端模块化发展史
- 前端性能优化
- 突击并发编程JUC系列-原子更新AtomicLong
- Windows下指定的服务已经标记为删除”
- 《剑指offer》第29天:m x n 网格的最小路径和
- 环保 HJ212协议解析