ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

4-Ribbon负载均衡

2022-06-26 11:34:04  阅读:175  来源: 互联网

标签:负载 服务 获取 均衡 方法 Ribbon 进行


负载均衡原理

在刚刚进行远程调用的时候,实际上进行了服务拉取,然后负载均衡访问了服务提供者来获取的数据。
在消费者方使用的链接是无法直接访问的,而是由ribbon进行解析然后进行负载均衡和远程调用来获取的真实地址进行的访问。
image

实现负载均衡的类是LoadBalancerInterceptor,负载均衡拦截器:
image
LoadBalancerInterceptor继承了ClientHttpRequestInterceptor,也就有了拦截http请求的能力,通过此类进行对路径的拦截和解析:
image
intercept方法是实际执行拦截的方法,方法中获取到Host也就是服务名称之后,进入Eureka获取服务拉取。
其中loadBancer的excute方法就是来自RibbonLoadBanlancerClient对象,进入此方法可以看到:
image
对象中loadBanlance方法经过getLoadBanlancer方法之后,获取到了loadBanlance对象,其中allServerList中就包含了所有的服务实例也就是服务列表。
也就是说getLoadBanlancer方法就是从Eureka获取服务列表。
接下来getServer方法就是获取一个实际的服务实例来进行调用,也就是实际的负载均衡的方法。

负载均衡策略

原理与默认策略

根据getServer方法后,在BaseLoadBalacer类中可以看到通过rule选择到了一个服务,rule对象为IRule类型:
image

IRule接口有很多的实现类:
image
image
其中random是随机的意思,round robin是轮询的意思。
ribbon默认的Rule是ZoneAvoidanceRule,其上级采用的是轮询的机制,所以ribbon默认采用的是轮询机制。

所以ribbon的实际运行流程就是:
image

配置负载均衡策略

负载均衡策略:
image

配置负载均衡规则的第一种方式就是IOC一个IRule类型的实例,然后返回指定类型的Rule实现类即可:
image

第二种是采用配置文件来完成,需要指定对哪一个服务进行哪种负载均衡策略:
image
在代码中书写配置类无法在运行中进行更改,但是配置文件的方式是可以的。使用配置类是对所有发出的服务获取的服务列表进行统一管理,使用配置文件的方式是对某一个服务进行管理。

饥饿加载

默认每个服务的负载均衡实例是在进行服务调用的时候创建的,可以将其设定为启动项目创建。

如果不配置饥饿加载,在控制台中也能看到加载实体类的日志,是在第一次访问的时候创建的:
image

进行饥饿加载配置很简单:
image

如果要对多个服务统计进行控制,则可以指定集合:
image

指定饥饿加载之后,启动项目后就会针对服务进行负载均衡实例创建。

小总结:
image

标签:负载,服务,获取,均衡,方法,Ribbon,进行
来源: https://www.cnblogs.com/agoodjavaboy/p/16413193.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有