Ribbon负载均衡
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
一、负载均衡流程
![img](https://i-blog.csdnimg.cn/blog_migrate/3c7f7b80d52085e500b27b3ae26eff4c.png)
流程总结
SpringCloud Ribbon 底层采用了一个拦截器,拦截了 RestTemplate 发出的请求,对地址做了修改。
基本流程如下:
- 拦截我们的 RestTemplate 请求 http://userservice/user/1
- RibbonLoadBalancerClient 会从请求url中获取服务名称,也就是 user-service
- DynamicServerListLoadBalancer 根据 user-service 到 eureka 拉取服务列表
- eureka 返回列表,localhost:8081、localhost:8082
- IRule 利用内置负载均衡规则,从列表中选择一个,例如 localhost:8081
- RibbonLoadBalancerClient 修改请求地址,用 localhost:8081 替代 userservice,得到 http://localhost:8081/user/1,发起真实请求
二、负载均衡策略
负载均衡的规则都定义在 IRule 接口中,而 IRule 有很多不同的实现类
不同规则的含义如下:
默认的实现就是 ZoneAvoidanceRule,是一种轮询方案。
两种修改负载均衡策略的方式:
第一种是针对全局的,第二种是针对某个服务的。
三、饥饿加载(Ribbon策略)
如果有多个服务,则需要换行,加上“-”再接服务名称
Ribbon总结:
Ribbon总结:
[外链图片转存中…(img-fh10uGwH-1666855505951)]