微服务之负载均衡(Ribbon)

前言:当每个服务部署多个实例时,如何解决将请求分摊到多个服务提供者实例上,避免集中地请求某一个服务实例而导致出现意外,而有一些服务实例却是空闲的这种情况呢?这就涉及到了负载均衡。

负载均衡

负载均衡是分布式架构的重点,负载均衡机制决定着整个服务集群的性能与稳定。负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。(摘自百度百科)

Ribbon实现客户端负载均衡

Ribbon简介

Ribbon是Netflix下的负载均衡项目,它主要实现中间层应用程序的负载均衡。为Ribbon配置服务提供者地址列表后,Ribbon就会基于某种负载均衡算法,自动帮助服务调用者去请求。Ribbon默认提供的负载均衡算法有多种,例如轮询、随即、加权轮训等,也可以为Ribbon实现自定义的负载均衡算法。Ribbon有以下特性:

  • 负载均衡器,可支持插拔式的负载均衡规则
  • 对多种协议提供支持,如HTTP、TCP、UDP
  • 集成了负载均衡功能的客户端

Ribbon自带的负载规则:

  • RoundRobinRule:系统默认的规则,通过使用简单的轮询服务列表来选择服务器
  • AvailabilityFilteringRule:此规则会忽略以下服务器
    1)无法连接的服务器:默认情况下,如果三次连接失败,该服务器会被设置为“短路”状态,niws.loadbalancer..connectionFailureCountThreshod属性可配置连接失败的次数
    2)并发数过高的服务器:可通过.ribbon.ActiveConnectionLimit属性来设定最高并发数
  • RandomRule:顾名思义,随机选择可用的服务器
  • 其他省略…

在SpringCloud中使用Ribbon

SpringCloud集成了Ribbon,结合Eureka,可以实现客户端的负载均衡。

@LoadBalanced注解

在SpringCloud中,使用@LoadBalanced修饰的资源(如RestTemplate),在Spring容器启动时,会为这些被修饰过的RestTemplate添加拦截器,拦截器中使用了LoadBalancerClient来处理请求,LoadBalancerClient本来就是Spring封装的负载均衡客户端,通过这样简洁处理,使得RestTemplate拥有了负载均衡的功能。

你可能感兴趣的:(Ribbon,负载均衡)