[SpringCloud教程]5. Ribbon负载均衡
2021-04-12 本文已影响0人
后端技术学习分享
Spring Cloud Ribbon 是一个客户端负载均衡工具,用于提供客户端的软件负载均衡算法和服务调用
概念
目前Ribbon项目是维护模式
集中式LB(负载均衡)
在服务提供者和消费者之间独立出一个负载均衡设施(硬件、nginx等),由该设施负责通过策略来转发请求
进程式LB(负载均衡)
将负载均衡逻辑集成于服务消费者,消费者从注册中心里获取哪些地址可以用,然后自己根据策略来选择合适服务
Ribbon本地负载均衡客户端和Nginx服务端负载均衡的区别
- Nginx是服务器负载均衡(集中式LB),所有请求交给Nginx转发,负载均衡由服务端实现
- Ribbon是本地负载均衡(进程式LB),客户端会从注册中心获取服务注册列表缓存到JVM本地,而后在本地实现RPC远程调用
集成
如果注册中心使用Eureka,服务消费者使用Eureka 客户端,则不需要加入Ribbon依赖,因为下方的依赖里包含了
<!-- eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
其他情况下需要加入Ribbon依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
前文基于Eureka的服务注册发现案例模块里,使用了支持Ribbon负载均衡的的RestTemplate工具(只需要在RestTemplate的Bean声明里加入注解@LoadBalanced即可),所以这里不再赘述Ribbon集成方法。
Ribbon负载均衡算法(了解)
Ribbon的负载均衡实现均继承自接口IRule,常见实现算法如下:
- RoundRobinRule: 默认轮询的方式
- RandomRule: 随机方式
- WeightedResponseTimeRule: 根据响应时间来分配权重的方式,响应的越快,分配的值越大。
- BestAvailableRule: 选择并发量最小的方式
- RetryRule: 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
- ZoneAvoidanceRule: 复合判断server所在区域的性能和server的可用性选择服务器
- AvailabilityFilteringRule: 先过滤掉故障实例,再选择并发较小的实例
Ribbon自定义负载均衡算法
-
轮询算法公式
调用服务器位置下标 = rest接口第几次请求数 % 服务器集群总数量 -
自定义负载均衡算法参考
https://blog.csdn.net/shunhua19881987/article/details/75466797
原创不易,转载请在开头著名文章来源和作者。如果我的文章对您有帮助,请点赞/收藏/关注鼓励支持一下吧❤❤❤❤❤❤