4-Ribbon负载均衡
2022/6/26 23:31:34
本文主要是介绍4-Ribbon负载均衡,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
负载均衡原理
在刚刚进行远程调用的时候,实际上进行了服务拉取,然后负载均衡访问了服务提供者来获取的数据。
在消费者方使用的链接是无法直接访问的,而是由ribbon进行解析然后进行负载均衡和远程调用来获取的真实地址进行的访问。
实现负载均衡的类是LoadBalancerInterceptor,负载均衡拦截器:
LoadBalancerInterceptor继承了ClientHttpRequestInterceptor,也就有了拦截http请求的能力,通过此类进行对路径的拦截和解析:
intercept方法是实际执行拦截的方法,方法中获取到Host也就是服务名称之后,进入Eureka获取服务拉取。
其中loadBancer的excute方法就是来自RibbonLoadBanlancerClient对象,进入此方法可以看到:
对象中loadBanlance方法经过getLoadBanlancer方法之后,获取到了loadBanlance对象,其中allServerList中就包含了所有的服务实例也就是服务列表。
也就是说getLoadBanlancer方法就是从Eureka获取服务列表。
接下来getServer方法就是获取一个实际的服务实例来进行调用,也就是实际的负载均衡的方法。
负载均衡策略
原理与默认策略
根据getServer方法后,在BaseLoadBalacer类中可以看到通过rule选择到了一个服务,rule对象为IRule类型:
IRule接口有很多的实现类:
其中random是随机的意思,round robin是轮询的意思。
ribbon默认的Rule是ZoneAvoidanceRule,其上级采用的是轮询的机制,所以ribbon默认采用的是轮询机制。
所以ribbon的实际运行流程就是:
配置负载均衡策略
负载均衡策略:
配置负载均衡规则的第一种方式就是IOC一个IRule类型的实例,然后返回指定类型的Rule实现类即可:
第二种是采用配置文件来完成,需要指定对哪一个服务进行哪种负载均衡策略:
在代码中书写配置类无法在运行中进行更改,但是配置文件的方式是可以的。使用配置类是对所有发出的服务获取的服务列表进行统一管理,使用配置文件的方式是对某一个服务进行管理。
饥饿加载
默认每个服务的负载均衡实例是在进行服务调用的时候创建的,可以将其设定为启动项目创建。
如果不配置饥饿加载,在控制台中也能看到加载实体类的日志,是在第一次访问的时候创建的:
进行饥饿加载配置很简单:
如果要对多个服务统计进行控制,则可以指定集合:
指定饥饿加载之后,启动项目后就会针对服务进行负载均衡实例创建。
小总结:
这篇关于4-Ribbon负载均衡的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南