美文网首页
Ribbon负载均衡原理

Ribbon负载均衡原理

作者: 技术灭霸 | 来源:发表于2020-03-14 16:37 被阅读0次

1、Ribbon介绍

Ribbon 是netflix 公司开源的基于客户端的负载均衡组件。


image.png

2、Ribbon工作原理

image.png

3、负载均衡器的核心--LoadBalancer

LoadBalancer 的职能主要有三个:

  • 维护Sever列表的数量(新增、更新、删除等)
  • 维护Server列表的状态(状态更新)
  • 当请求Server实例时,能否返回最合适的Server实例

负载均衡器的内部基本实现原理


image.png

(1)如何维护Server列表?(新增、更新、删除)?

Server列表的维护从实现方法上分为两类:

  • 1、基于配置的服务列表
    netflix 在做Spring cloud 套件时,使用了分布式配置框架netflix archaius ,archaius 框架有一个特点是会动态的监控配置文件的变化,将变化刷新到各个应用上。也就是说,当我们在不关闭服务的情况下,如果修改了基于配置的服务列表时, 服务列表可以直接刷新
  • 2、结合服务发现组件(如Eureka)的服务注册信息动态维护服务列表
    基于Spring Cloud框架下,Eureka服务注册和发现是一个分布式服务集群必不可少的一个组件,它负责维护不同的服务实例(注册、续约、取消注册),借助Eureka的服务注册信息动态刷新ribbon 的服务列表

Server列表可能在运行的时候动态的更新,而具体的更新方式有如下两种实现方式:

  • 基于定时任务的拉取服务列表
  • 基于Eureka服务事件通知的方式更新

(2)负载均衡器如何维护服务实例的状态?

Ribbon负载均衡器将服务实例的状态维护托交给PingerPingerStrategyIPing 来维护,Ribbon默认的IPing实现是DummyPing,具体交互模式如下所示:

image

(3)如何从服务列表中挑选一个合适的服务实例?

在Ribbon的实现中,在ServerList中,维护着Server的实例,并返回最新的List<Server>集合,供LoadBalancer使用。

从服务列表中挑选最合适的服务实例。LoadBalancer内部采用了如下图所示的组件完成:

image

定义IRule,从服务实例列表中,选择最合适的Server实例。
完整的算法包含如下:

  • RandomRule:随机算法实现;
  • RoundRobinRule:轮询负载均衡策略,依次轮询所有可用服务器列表,遇到第一个可用的即返回;
  • RetryRule :先按照RoundRobinRule策略获取服务,如果获取服务失败会在指定时间内重试;
  • AvaliabilityFilteringRule: 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) ;
  • BestAvailableRule :会先过滤掉由于多次访问故障二处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
  • WeightedResponseTimeRule: 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低;
  • ZoneAvoidanceRule: 复合判断server所在区域的性能和server的可用性选择server

相关文章

网友评论

      本文标题:Ribbon负载均衡原理

      本文链接:https://www.haomeiwen.com/subject/pmawshtx.html