什么是负载均衡
负载均衡建立在现有 络结构之上,它提供了一种廉价有效透明的方法扩展 络设备和服务器的带宽、增加吞吐量、加强 络数据处理能力、提高 络的灵活性和可用性。
负载均衡(Load Balance)就是分摊到多个操作单元上进行执行。
负载均衡又分为硬件负载均衡和软件负载均衡。
- 硬件负载均衡:在服务器节点间安装用于负载均衡的设备,比如F5。
- 软件负载均衡:在服务器上安装一些用于负载均衡的软件,比如Nginx,LVS。
客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。关于Ribbon详解,请阅Ribbon详解。画个草图:
这里补充一下,如果你已经设置了以后,的设置会失效。在eureka的页面也会显示的值。每个应用程序一般都会设置,那么的设置也没什么意义了。
添加配置
在启动类添加注解
修改端口,启动三个,老办法。在上篇博客也做过
创建微服务作为服务消费者
服务消费者:服务的调用方,依赖其他服务。
快速创建Spring Boot项目。
勾选
创建实体类User,这里的User类属性是与服务提供者中返回的实体类User是保持一致的。道理很简单,只有保持一致,才能正确接收服务提供者返回的数据。
编写类模拟。RestTemplate提供了调用方法,可以自行点击去查看。这里说个重点:url的拼写为: + + 。
不要加IP,这很好理解。在eureka中注册了三个user-service服务实例,这样一来Ribbon可以实现负载均衡。这个地方是可以书写user-service的单个服务的完整请求路径,也能调用成功,但请求的永远只是那一个单体服务,实现不了负载均衡。
验证
确保所有的项目均已经正常启动。
查看eureka中 所有的服务已经注册
查看business-service服务消费者的服务正常调用成功
这里可以看到,user-service的三个服务是轮询。这也验证了Ribbon的默认是使用轮询的方式选择服务实例。
Ribbon 七大负载均衡策略
- RoundRobinRule:轮询策略。按照顺序选择server(ribbon默认策略)
- RandomRule:随机策略。随机选择
- RetryRule:重试策略。在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server
- BestAvailableRule:最低并发策略。选择一个最小的并发请求的 Server,逐个考察 Server,如果 Server 被标记为错误,则跳过,然后再选择 ActiveRequestCount 中最小的 Server。
- AvailabilityFilteringRule:可用过滤策略。过滤掉那些一直连接失败的且被标记为 circuit tripped 的后端 Server,并过滤掉那些高并发的后端 Server 或者使用一个 AvailabilityPredicate 来包含过滤 Server 的逻辑。其实就是检查 Status 里记录的各个 Server 的运行状态。
- WeightedResponseTimeRule:响应时间加权重策略。根据响应时间分配一个 Weight(权重),响应时间越长,Weight 越小,被选中的可能性越低。(ResponseTimeWeightedRule本质与其一样)
- ZoneAvoidanceRule:区域权重策略。使用 ZoneAvoidancePredicate 和 AvailabilityPredicate 来判断是否选择某个 Server,前一个判断判定一个 Zone 的运行性能是否可用,剔除不可用的 Zone(的所有 Server),AvailabilityPredicate 用于过滤掉连接数过多的 Server。
这是我目前项目版本的的RibbonRule实现类。
策略类的图在上面已经给出。
这里改成随机策略模拟。
这里设置全局策略为轮询,再测试,从日志查看。已经成了轮询。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92165 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!