Spring-cloud学习笔记—Ribbon服务器端和客户端负载均衡
1. 关于负载均衡
- 负载均衡⼀般分为
服务器端负载均衡
和客户端负载均衡
- 所谓
服务器端负载均衡
,⽐如Nginx、F5这些,请求到达服务器之后由这些负载均衡器根据⼀定的算法将请求路由到⽬标服务器处理。 - 所谓
客户端负载均衡
,⽐如我们要说的Ribbon,服务消费者客户端会有⼀个服务器地址列表,调⽤⽅在请求前通过⼀定的负载均衡算法选择⼀个服务器进⾏访问,负载均衡算法的执⾏是在请求客户端进⾏。 Ribbon是Netflix发布的负载均衡器
。Eureka⼀般配合Ribbon进⾏使⽤,Ribbon利⽤从Eureka中读取到服务信息,在调⽤服务提供者提供的服务时,会根据⼀定的算法进⾏负载。
2. Ribbon负载均衡策略
-
不需要引⼊额外的Jar坐标,因为在服务消费者中我们引⼊过eureka-client,它会引⼊Ribbon相关Jar
-
代码中使⽤如下,在RestTemplate上添加对应注解即可
-
Ribbon内置了多种负载均衡策略,内部负责复杂均衡的
顶级接⼝
为com.netflix.loadbalancer.IRule
,其中choose
方法是IRule
的核心方法,public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if none * server is available */ public Server choose(Object key); public void setLoadBalancer(ILoadBalancer lb); public ILoadBalancer getLoadBalancer(); }
-
IRule
的类树如下
-
负载均衡策略
-
修改某个微服务的负载均衡策略,针对的被调⽤⽅微服务名称
#针对的被调⽤⽅微服务名称,不加微服务名称就是全局⽣效 lagou-service-resume: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载策略调整
-
修改全局微服务的负载均衡策略
#不加微服务名称就是针对全局⽣效的负载均衡策略 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载策略调整