微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ribbon框架原理及解析

1、简介

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。

2、接口

Ribbon提供了抽象接口,如IClient,IClientConfig,IRule,ILoadBalancer

2.1 IClient

IClient:客户端接口,依赖IClientConfig配置执行请求,返回响应。 

IClientConfig:客户端配置,主要是属性配置,依赖于IClientConfigKey

IClientConfigKey:客户端配置键,包含key,类型及对应值信息。

ReloadableClientConfig支持重新加载的客户端配置,其依赖Property以及PropertyResolver

Property:动态配置的封装。

ReloadableProperty:支持重新加载的动态配置

PropertyResolver:配置解析器,用于解耦配置与属性源。

2.2 ILoadBalancer

负载均衡接口,其依赖于Server类,支持添加Server,选择Server以及获取所有及可用 Server列表。

 AbstractLoadBalancer:包含大多数LoadBalancer的公有特征,同时提供了抽象方法根据ServerGroup获取服务器列表方法

BaseLoadBalancer:实现了AbstractLoadBalancer,也是其它类的基类,其依赖IRule,IPing,IPingStrategy接口。

DynamicServerListLoadBalancer:可以根据数据源动态更新Server列表

ZoneAwareLoadBalancer:分区的动态负载均衡。

其它**LoadBalancer继承自BaseLoadBalancer,决定了**LoadBalancer的依赖组件

2.2.1 IRule

负载均衡的规则接口,有很多不同的实现类,主要是根据各自的规则从负载均衡得到 的Server列表中选取其中的一个Server。

AbstractLoadBalancerRule:是其它规则类的公共基类,是公共的特征即依赖ILoadBalancer。

ClientConfigEnabledRoundRobinRule:内部包含RoundRobinRule,同时也提供根据客户端配置来设置规则。

PredicateBasedRule:基于AbstractServerPredicate过滤,然后基于round robin

AvailabilityFilteringRule:先基于round robin得到server,如果server不可用,继续下一个

ZoneAvoidanceRule:首先基于zone区选择,然后再根据server的可用性来选择。

BestAvailableRule:选择并发数最小的

Randomrule:随机选择

RoundRobinRule:轮询方式

ResponseTimeWeightedRule:基于响应时间的权重

WeightedResponseTimeRule:基于响应时间的权重

2.2.2 IPing

判断服务器是否是存活的接口

AbstractLoadBalancerPing:抽象基类,提供基本实现, 主要是成员AbstractLoadBalancer。

NIWSdiscoveryPing:基于服务发现,通过发现实例信息的状态 判断服务器是否是存活

PingUrl:主要是通过向服务器发送get请求, 根据响应来判断是否是存活

2.2.3 IPingStrategy

对于多个服务器判断存活的策略,当前只有一个实现类SerialPingStrategy,遍历Server依次IPing。

2.2.4 AbstractServerPredicate

对于Server的过滤器,有不同的实现类

ZoneAffinityPredicate:过滤与当前客户端不在同一服务区的服务器

AvailabilityPredicate:过滤处于断路以及有太多并发连接的服务器

CompositePredicate:多个过滤器and操作

ZoneAvoidancePredicate:过滤测量指标超过阀值的服务区


 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐