springcloud之ribbon自定义负载均衡规则

更新时间:2023-05-16 16:49:31 阅读: 评论:0

springcloud之ribbon⾃定义负载均衡规则
1、在springcloud中,使⽤的是ribbon来解决负载均很的问题,⽽常见的负载均衡策略包括有
1)轮询
2)随机
3)⼀致性哈希
4)哈希
5)加权
2、在ribbon中提供了ILoadBalance接⼝⽤来代表负责均衡的操作,它提供了增加服务器,选择服务器,标记服务器状态为down,获得可⽤服务器以及获得所有服务器的操作
public interface ILoadBalancer {
void addServers(List<Server> var1);
Server chooServer(Object var1);
生完void markServerDown(Server var1);
/** @deprecated */
@Deprecated
List<Server> getServerList(boolean var1);
List<Server> getReachableServers();
List<Server> getAllServers();
}
下雨天3、ribbon中具体实现负载均衡的策略是通过IRule这个接⼝来实现的,接⼝实现结构图
4、ribbon默认是使⽤的是zoneAvoidanceRule规则,这⾥我们修改规则使⽤随机算法
默认ribbon规则的配置
@Bean
@ConditionalOnMissingBean
public IRule ribbonRule(IClientConfig config) {
if (this.propertiesFactory.isSet(IRule.class, this.name)) {
return (IRule)(IRule.class, config, this.name);
} el {
ZoneAvoidanceRule rule = new ZoneAvoidanceRule();
rule.initWithNiwsConfig(config);
return rule;
谢霆峰
}
}
// 来⾃ RibbonClientConfiguration
⾃定义为随机访问的策略
/**
* 该类为Ribbon的配置类
* 该类不能被@ComponentScan扫描到
* @author nicker
* @description
* @date 2018/5/16 18:25
* @
*/
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule() {
// 负载均衡规则,改为随机
return new RandomRule();
}
}
5、⾃定义指定ribbon客户端的配置
/**
* 使⽤RibbonClient,为特定name的Ribbon Client⾃定义配置
* 使⽤@RibbonClient的configuration属性,指定Ribbon的配置类
* @author nicker
* @description
* @date 2018/5/16 18:27
*/
@Configuration
@RibbonClient(name = "rvice-provider-ur", configuration = RibbonConfiguration.class) public class TestConfiguration {
}
6、controller层的api代码
/**
* @author nicker
* @description
* @date 2018/5/16 14:31
*/
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/ur/{id}")
public Ur findById(@PathVariable Long id){
Ur ur = ForObject("rvice-provider-ur/" + id, Ur.class);
return ur;
}
@GetMapping("/ur-instance")
public List<ServiceInstance> showInfo() {
Instances("rvice-provider-ur");
}
@GetMapping("/log-ur-instance")
public void logUrInstance() {
ServiceInstance rviceInstance = loadBalancerClient.choo("rvice-provider-ur");
//打印当前选择的是哪个节点
System.out.ServiceId()+Host()+Port());    }
}
7、在访问/log-ur-instance这个接⼝的时候,使⽤⾃定义的策略对应的结果
8、通过l中配置的⽅式,这⾥就不⽤使⽤前⾯的编程式配置了
格式如下<clientName>.ribbon.
NFLoadBalancerClassName: 配置ILoadBalancer的实现类
NFLoadBalancerRuleClassName: 配置IRule的实现类
NFLoadBalancerPingClassName: 配置IPing的实现类
NFWSServerListClassName: 配置ServerList的实现类
NIWSServerListFilterClassName: 配置ServerListFilter的实现类
本案例的测试,直接使⽤随机规则
rvice-provider-ur:
ribbon:
NFLoadBalancerRuleClassName: flix.loadbalancer.RandomRule
9、ribbon⾃带的⼏个负载均衡规则说明
策略名策略声明策略描述实现说明
BestAvailableRule public class BestAvailableRule
extends
ClientConfigEnabledRoundRobinRule
选择⼀个最⼩的
并发请求的
rver
逐个考察Server,如果Server被
tripped了,则忽略,在选择其中
ActiveRequestsCount最⼩的
rver
AvailabilityFilteringRule public class AvailabilityFilteringRule
extends PredicateBadRule
过滤掉那些因为
⼀直连接失败的
被标记为circuit
tripped的后端
rver,并过滤
掉那些⾼并发的
的后端
rver(active
connections 超
过配置的阈值)
使⽤⼀个AvailabilityPredicate来
包含过滤rver的逻辑,其实就就
是检查status⾥记录的各个rver
的运⾏状态
WeightedResponTimeRule public class
WeightedResponTimeRule extends严格执法
RoundRobinRule
根据相应时间分
配⼀个weight,
相应时间越
长,weight越
嘴用英语怎么说
⼩,被选中的可
能性越低。
⼀个后台线程定期的从status⾥⾯
读取评价响应时间,为每个rver
计算⼀个weight。Weight的计算
也⽐较简单respontime 减去每
个rver⾃⼰平均的
respontime是rver的权重。
当刚开始运⾏,没有形成statas
时,使⽤roubine策略选择
rver。
RetryRule public class RetryRule extends
AbstractLoadBalancerRule
对选定的负载均
衡策略机上重试
机制。
在⼀个配置时间段内当选择rver
不成功,则⼀直尝试使⽤subRule
的⽅式选择⼀个可⽤的rver
RoundRobinRule public class RoundRobinRule
extends AbstractLoadBalancerRule
roundRobin⽅
式轮询选择
rver
轮询index,选择index对应位置的
rver
RandomRule public class RandomRule extends
AbstractLoadBalancerRule
随机选择⼀个
rver
在index上随机,选择index对应位
置的rver
ZoneAvoidanceRule public class ZoneAvoidanceRule
extends PredicateBadRule
复合判断rver余额宝怎么转出
所在区域的性能
和rver的可⽤
性选择rver
使⽤ZoneAvoidancePredicate和中国诗词
蒜香面包AvailabilityPredicate来判断是否
选择某个rver,前⼀个判断判定
⼀个zone的运⾏性能是否可⽤,剔
除不可⽤的zone(的所有
rver),AvailabilityPredicate
⽤于过滤掉连接数过多的Server。

本文发布于:2023-05-16 16:49:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/656424.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:策略   服务器   配置   选择   负载   实现   规则
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图