微服务负载均衡器Ribbon
文章目录
一、什么是Ribbon?
目前主流的负载均衡方案分为以下两种:
- 集中式的(服务端)在消费者和服务的提供方使用独立的代理方式负载均衡(有用硬件,也有用软件nginx)
- 客户端的根据自己的请求情况负载均衡,Ribbon就属于客户端的负载均衡
SpringCloud Ribbon 是基于Netffix Ribbon
是实现的一套客户端负载均衡工具
,Ribbon客户端提供了一系列的完善的配置,如超时,重试等等,通过LoadBalance
获取到服务提供的所有机器的实例。Ribbon会自动地基于某种规则(轮询,随机)
去调用这些服务,Ribbon也可以自己实现自己的负载均衡算法。
1.1 客户端的负载就均衡
例如SpringCloud 中的Ribbon 客户端会有一些服务地址列表,再发送请求前通过负载均衡算法到另一个服务器,然后进行访问,这是客户端的负载均衡,
即在客户端就进行了负载均衡算法的分配
1.2 服务端的负载均衡
1.3 常见的负载均衡算法
- 随机:Random
- 轮询:一个接一个 One By One
- 加权:在服务提供者有一个weight的概念,根据机器的性能分配不同的权重,权重高的机器高配置,低负载,用以画质各个服务器的压力
- 地址hash:通过客户端的地址的hash值取模后进行服务的调度, ip — > hash
- 最小链数:即使请求均衡了压力也不一定均衡,最小链数算法就是根据服务的情况,比如请求积压数等等参数,将请求分配到当前压力最小的服务器上,最小活跃数。
二、Nacos使用Ribbon
nacos-discovery依赖了ribbon,可以不再引入ribbon的依赖
2.1 具体使用
- 需要加上一个配置注解
@LoadBalanced
实现负载均衡
- 在控制层上
可以写在配置类中,也可以直接写在启动类上。
三、Ribon内核原理
3.1 Ribbon负载均衡策略
Ribbon的负载均衡策略:
3.1.1 修改默认的负载均衡策略
全局配置: 调用其他服务,一律使用指定的负载均衡策略
例如使用nacos的集群负载均衡
这里返回IRule的类,原因是所有的负载均衡策略都有一个公共的父接口就是IRule,所以返回后,可以使用任何一种负载均衡策略。
局部配置:调用指定的微服务的服务提供者提供的服务,使用对应的负载均衡算法
修改application.yml
最后还要再启动类上加上ribbonClients的注解
🔥🔥
注意
:此操作实在服务的消费端实现