负载均衡(Load Balance,简称 LB) 是⾼并发, ⾼可⽤系统必不可少的关键组件.
当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源中, 按照⼀定的规则合理分配负载.
负载均衡的⼀些实现
就像是eureka中对请求进行轮询的方式
服务多机部署时, 开发⼈员都需要考虑负载均衡的实现, 所以也出现了⼀些负载均衡器, 来帮助我们实现负载均衡.
注:负载均衡分为服务端负载均衡和客⼾端负载均衡.
服务端负载均衡
在服务端进⾏负载均衡的算法分配.
⽐较有名的服务端负载均衡器是Nginx. 请求先到达Nginx负载均衡器, 然后通过负载均衡算法, 在多个服务器之间选择⼀个进⾏访问.
客⼾端负载均衡
在客⼾端进⾏负载均衡的算法分配.
把负载均衡的功能以库的⽅式集成到客⼾端, ⽽不再是由⼀台指定的负载均衡设备集中提供.
⽐如Spring Cloud的Ribbon, 请求发送到客⼾端, 客⼾端从注册中⼼(⽐如Eureka)获取服务列表, 在发
送请求前通过负载均衡算法选择⼀个服务器,然后进⾏访问
Spring Cloud LoadBalancer
1.使⽤Spring Cloud LoadBalancer实现负载均衡
1.1. 给 RestTemplate 这个Bean添加 @LoadBalanced 注解就可以
2.负载均衡策略
Spring CloudLoadBalancer 仅⽀持两种负载均衡策略: 轮询策略 和 随机策略
1. 轮询(Round Robin): 轮询策略是指服务器轮流处理⽤⼾的请求. 这是⼀种实现最简单, 也最常⽤的
策略. ⽣活中也有类似的场景, ⽐如学校轮流值⽇, 或者轮流打扫卫⽣.
2. 随机选择(Random): 随机选择策略是指随机选择⼀个后端服务器来处理新的请求
默认的是轮询策略
⾃定义负载均衡策略:
1、定义随机算法对象, 通过 @Bean 将其加载到 Spring 容器中
此处使⽤Spring Cloud LoadBalancer提供的 RandomLoadBalancer
注意: 该类需要满⾜:
①不⽤ @Configuration 注释
②在组件扫描范围内
2、使⽤ @LoadBalancerClient 或者 @LoadBalancerClients 注解
在 RestTemplate 配置类上⽅, 使⽤ @LoadBalancerClient 或 @LoadBalancerClients 注解, 可以对不同的服务提供⽅配置不同的客⼾端负载均衡算法策略.
由于这个项⽬中只有⼀个服务提供者, 所以使⽤@LoadBalancerClient
@LoadBalancerClient 注解说明
1. name: 该负载均衡策略对哪个服务⽣效(服务提供⽅)
2. configuration : 该负载均衡策略 ⽤哪个负载均衡策略实现
.