Ribbon(客户端负载均衡工具)的使用

        Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像Eureka服务注册中心、spring cloud config配置中心、API网关(zuul)那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括Feign(声明式rest调用),它也是基于Ribbon实现的工具。

 

Feign中实现ribbon的使用:

        通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:

        ▪️服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。

        ▪️服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。

        这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。

因为默认的springcloud中eureka server 是集成了ribbon的,在使用feign的时候是默认使用了eureka+ribbon的负载均衡。

ribbon可以是通过获取eureka中的注册服务获取listforservers,通过eureka实现的注册名称和端口地址的关联,实现不同服务器之间的负载均衡的。

 

联合eureka、feign实现ribbon的负载均衡

由于ribbon已经被spring-cloud-starter-netflix-eureka-server进行了集成:

Ribbon(客户端负载均衡工具)的使用_第1张图片

由于这个是在client端进行的配置所以,如果client端配置了 spring-cloud-netflix-eureka-client 则还是需要单独进行ribbon的依赖导入。

导入依赖之后,就已经默认的实现了负载均衡了。前提条件是:有两个以上的feign端注册在了eureka上。

如果要修改默认的轮询 负载配置,需要在配置文件下修改:

spring:

  application:

    name: user

server:

  port: 5100

eureka:

  client:

    service-url:

      defaultZone: http://localhost:5001/eureka



feign:

  hystrix:

    enabled: true

  ribbon:

    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule    这个意味着启动随机的负载模式

ribbon提供的负载模式:

WeightedResponseTimeRule :根据响应时间分配一个 weight,响应时间越长,

weight 越小,被选中的可能性越低。

➢ RoundRobinRule : roundRobin 方式轮询选择 server(默认)

➢ RandomRule :随机选择一个 server

➢ ZoneAvoidanceRule:复合判断 server 所在区域的性能和 server 的可用性选择

server

➢ RetryRule:对选定的负载均衡策略机上重试机制

➢ BestAvailableRule:选择一个最小的并发请求的 server

➢ AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为 circuit

tripped 的后端 server,并过滤掉那些高并发的的后端 server(active

connections 超过配置的阈值)

 

这样就实现了简单了ribbon的使用。

 

脱离eureka的ribbon实现

首先建立两个springboot项目最为provider端口,配置 简单的端口号就可以了。

重新创建一个springboot项目,作为client实现ribbon的负载均衡功能。配置简单的端口号之后需要做的是在配置文件中增加:

server.port=8083    端口号可以随便定

provide-without-eureka.ribbon.listOfServers=localhost:8081,localhost:8082   这个位置,由于没有了eureka提供的注册服务,需要自己手动配置代理的客户端口地址。

启动服务之后,就可以实现ribbon的负载均衡了。

你可能感兴趣的:(java)