公众号
关注公众号和我一起学习哦!
什么是负载均衡?
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
为什么需要负载均衡?
随着互联网时代的来临,为了扛得住高并发,高请求访问量,我们开发的项目随之演变为一个一个的微服务,微服务可以单独部署,那么怎么样才可以实现负载均衡呢?
答案是:使用Ribbon
一、添加配置
1. 在 application.yml
中添加 Ribbon 的配置
# 配置负载均衡
user-provider: # 要进行负载均衡的 服务名
ribbon:
#配置哪种类型的负载均衡策略
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
要使用哪种策略只需要更改后边的策略类即可
com.netflix.loadbalancer.xxx策略类
策略类表格在下方
二、修改项目
由于 Eureka-Client的依赖中已经包含了 Ribbon的依赖 所以我们无需手动添加
1. 修改 user-provider中的 sayHi接口
// 使用 Spring EL 表达式 注入该项目运行的端口号
@Value("${server.port}")
public String port;
// 修改 sayHi接口 返回结果添加新的内容:port
@Override
@RequestMapping("/sayHi")
public String sayHi(@RequestParam("content") String content, @RequestParam("age") Integer age) {
System.out.println("9000");
return "Hello Spring Cloud Netflix!" + content + "\t" + age + "\t我来自:" + port;
}
2. 修改 IDEA 配置 可以让项目一个启动多次
找到 IDEA 顶部导航栏 -> RUN -> Edit Configurations -> 找到 SpringCloudNetflixUserProvider -> 勾上 All parallel run -> Apply -> OK 即可
3. 先启动一个项目 确保启动成后
4. 修改 application.yml 中的 端口号 再次启动
两个 user-provider 启动成功后 注册中心的样子
5. 测试访问 user-consumer 的 sayHi接口 查看返回结果的端口号
会出现 随机的情况 即为成功
三、负载均衡策略
Ribbon有7种负载均衡策略可供选择:
策略类 | 命名 | 描述 |
---|---|---|
RoundRobinRule | 轮询策略(Ribbon默认的策略) | 按照顺序选择server |
RandomRule | 随机策略 | 随机选择server |
RetryRule | 重试策略 | 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server |
BestAvailableRule | 最低并发策略 | 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) |
ResponseTimeWeightedRule | 响应时间加权重策略 | 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server |