负载均衡
负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行操作
根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡
服务端负载均衡指的是发生在服务提供者一方,比如nginx
客户端负载均衡指的是发生在服务消费的一方,也就是在发送请求之前已经选好了由哪个实例处理请求
微服务中一般会选择:客户端负载均衡
ribbon
ribbon是spring cloud的一个组件,它可用让我们使用一个注解就能轻松搞定负载均衡
使用
- 
在RestTemplate的生成方法上添加注解
@Bean @LoadBalanced public RestTemplate restTemplate () { return new RestTemplate(); } - 
修改RestTemplate的调用方式
restTemplate.getForObject("http://服务名称", Object.class) 
默认负载均衡策略:轮询
负载均衡策略
ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule
具体策略
| 策略名 | 策略描述 | 
|---|---|
| BestAvailableRule | 选择一个最小的并发请求的server | 
| AvailabilityFilteringRule | 过滤掉那些因为一直连接失败被标记为circuit tripped的后端server,并过滤掉那些高并发的后端server(active connections 超过配置的阈值) | 
| WeightedResponseTimeRule | 根据相应时间分配一个weiht,相应时间越长,weight越小,被选中的可能性越低 | 
| RetryRule | 对选定的负载均衡策略上重试机制 | 
| RoundRobinRule | 轮询方式轮询选择server,默认使用 | 
| RandomRule | 随机选择一个server | 
| ZoneAvoidanceRule | 符合判断server所在区域的性能和server的可用性选择server | 
修改策略
方式一
修改配置文件
被调用服务名称:
  ribbon:
    NFLoadBalancerRuleClassName: 策略类全类名
方式二
- 
编写自定义配置类
/** * 必须使用@Configuration * 不能在在应用程序扫描包路径下 */ @Configuration public class MyRibbonConfig { @Bean public IRule ribbonRule(){ return new RandomRule(); //具体策略 } } - 
在启动类上添加注解
//如果有多个可以使用@RibbonClients @RibbonClient(name = "被调用服务名",configuration = MyRibbonConfig.class)