[SpringCloud教程]5. Ribbon负载均衡

453 阅读3分钟

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接口第几次请求数 % 服务器集群总数量

  • 自定义负载均衡算法参考 blog.csdn.net/shunhua1988…

交流&联系

  • QQ群 欢迎加入Java交流群(qq群号: 776241689 )

  • 欢迎关注公众号"后端技术学习分享"获取更多技术文章! PS:小到Java后端技术、计算机基础知识,大到微服务、Service Mesh、大数据等,都是本人研究的方向。我将定期在公众号中分享技术干货,希望以我一己之力,抛砖引玉,帮助朋友们提升技术能力,共同进步!

  • 博客

原创不易,转载请在开头著名文章来源和作者。如果我的文章对您有帮助,请点赞/收藏/关注鼓励支持一下吧❤❤❤❤❤❤