Ribbon 负载均衡
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljau87ve-1630398094502)()]
现在的RIbbon已经进入维护模式了
现有他的代替解决方案是
LB(负载均衡)
负载均衡分类
集中式LB
即在服务的消费方和提供方之间使用独立的LB设施,(可以是硬件,如f5,也可以是软件,如nginx),由该设施负责把访问请求通过某种请求策略转发至服务的提供方;
进程内LB
将L B逻辑集成在消费方,消费方从服务注册中心获取那些地址可用,让后自己再从这些地址选择出一个合适的服务器.
Ribbon 就是属于进程内LB,他只是一个类库,集成于消费房的进程,消费房通过他来获取到服务器的提供方地址
Ribbon能够做些什么
就是在消费者中对服务提供者进行负载均衡操作,
默认是轮询的方式,
1 2 3 再来一遍 1 2 3
负载均衡+RestTemplate调用架构说明
总结:
Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。
我们之前导入的 Netflix-Eureka的jar包中包含了 ribbon 新版本不包含,
现在的最新版本 h12 Ribbon 以被上图提到的 lb给代替了(之前全部最新版的时候踩到的坑)
再次复习RestTemplate 的使用
官网连接:RestTemplate 官网
getForObject方法/getForEntity方法
postForObject/postForEntity
开启负载均衡
默认的开启负载均衡操作就一个注解
在你的消费者config中的restTemoplate上添加一个注解
@Configuration public class orderConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
这样就开启的Ribbon的默认轮询的负载均衡
IRule:根据特定算法从服务列表中选取一个要访问的服务,用哪一种方式做负载均衡
我们首先要强调一下配置细节
如果我们想改变默认的负载均衡算法我们需要在 这样建立一个新包
主启动类在cloud的中,所以他会扫描cloud下所有的子包
接下来是自定义负载均衡的规则编写(使用起来越方便的,他的底层就越精妙)
@SpringBootApplication @EnableEurekaClient @RibbonClient(value = "CLOUD-PAYMENT-SERVICE",configuration = Myselgrule.class ) public class orderMain { public static void main(String[] args) { SpringApplication.run(orderMain.class,args); } }
添加了这个之后我们要使用自己设置的规则我们需要使用到注解@RibbonClient
在主启动类上添加这个注解 ,并且设置两个参数
value:需要负载均衡的服务名
configuration : 要使用的规则类 Myselgrule.class
即可
Ribbon负载均衡算法(这里由于算法实在不是咱的擅长就跳过了手写算法那个一节课)
轮询算法原理