Spring Cloud——ribbon(负载均衡源码分析、算法详解、总结)

源码

在Controller里注入LoadBalancerClient,通过choose方法得到服务具体信息,而eureka是通过DiscoveryClient的getInstances方法获取。
在这里插入图片描述
在这里插入图片描述
自旋死循环来拿到server,线程安全

负载均衡算法

负载均衡算法:随机 轮训 权重 iphash
1.RoundRobinRule–轮询 请求次数 % 机器数量 2.RandomRule–随机 3.权重 4. iphash 3.AvailabilityFilteringRule --会先过滤掉由于多次访问故障处于断路器跳闸状态的服 务,还有并发的连接数量超过阈值的服务,然后对于剩余的服务列表按照轮询的策略进行访问 4.WeightedResponseTimeRule–根据平均响应时间计算所有服务的权重,响应时间越快服 务权重越大被选中的概率越大。刚启动时如果同统计信息不足,则使用轮询的策略,等统计信 息足够会切换到自身规则
5.RetryRule-- 先按照轮询的策略获取服务,如果获取服务失败则在指定的时间内会进行重 试,获取可用的服务 6.BestAvailableRule --会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后 选择一个并发量小的服务 7.ZoneAvoidanceRule – 默认规则,复合判断 Server 所在区域的性能和 Server 的可用 行选择服务器。
Ribbon 默认使用哪一个负载均衡算法: ZoneAvoidanceRule :区间内亲和轮询的算法!通过一个 key 来区分

访问不同服务使用不同算法

在yml文件中,第一行写提供者名称(集群名)
在这里插入图片描述

# 访问不同的服务使用不同的算法规则
provider-a: #先写服务提供者的应用名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 算法名

若想在全局改,则进入启动类中,通过@Bean实现

@Bean 
public IRule myRule() { 
	//指定调用所有的服务都用此算法 
	return new RandomRule(); 
}

总结

ribbon: #全局的设置 
	eager-load: 
		enabled: false # ribbon 一启动不会主动去拉取服务列表,当实际使用时才 去拉取 是否立即加载 
	http:
		client: 
			enabled: false # 在 ribbon 最后要发起 Http 的调用调用,我们认为是 RestTemplate 完成的,其实最后是 HttpURLConnection 来完成的,这里面设置为 true , 可以把 HttpUrlConnection->HttpClient 
	okhttp: 
		enabled: false #HttpUrlConnection 来完成的,这里面设置为 true ,可以 把 HttpUrlConnection->OkHttpClient(也是发 http 请求的,它在移动端的开发用的多) provider: #提供者的服务名称,那么访问该服务的时候就会按照自定义的负载均衡算法 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改默认负载均衡算法,几种算法的全限定类名 # NFLoadBalancerClassName: #loadBalance 策略 # NFLoadBalancerPingClassName: #ping 机制策略 # NIWSServerListClassName: #服务列表策略 # NIWSServerListFilterClassName: #服务列表过滤策略 ZonePreferenceServerListFilter 默认是优先过滤非一个区的服务列表

Ribbon 是客户端实现负载均衡的远程调用组件,用法简单
Ribbon 源码核心:
ILoadBalancer 接口:起到承上启下的作用

  1. 承上:从 eureka 拉取服务列表
  2. 启下:使用 IRule 算法实现客户端调用的负载均衡
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值