Ribbon核心组件
五大组件
IRule
IRule就是根据负载均衡算法中从服务器列表中选取一个要访问的服务
IPing
用于快速检查服务器当时是否处于活动状态(心跳检测)
ServerList
用于获取服务节点列表并存储的组件,分为静态和动态
- ConfigurationBasedServerList 从配置文件中获取所有服务列表
- DiscoveryEnabledNIWSServerList 从Eureka Client中获取服务列表。此值必须通过属性中的VipAddress来标识服务器集群。DynamicServerListLoadBalancer会调用此对象动态获取服务列表
- DomainExtractingServerList 代理类,根据ServerList的值实现具体的逻辑
ServerListFilter
实现服务实例列表的过滤,通过传入的服务实例清单,根据规则返回过滤后的服务实例清单
- ZoneAffinityServerListFilter
- ZonePreferenceServerListFilter
- ServerListSubsetFilter
ServerListUpdater
列表更新器,用于动态的更新服务列表
- PollingServerListUpdater
- EurekaNotificationServerListUpdater
IClientConfig
定义各种配置信息,用来初始化ribbon客户端和负载均衡器
- DefaultClientConfigImpl
负载均衡器的核心接口
ILoadBalancer
通过ServerList获取可访问的服务节点信息,然后通过ServerListFilter按照指定策略过滤服务节点列表,通过ServerListUpdater动态更新一组服务列表,通过IPing剔除非存活状态下的服务节点以及根据IRule从现有服务器列表中选择一个服务
- DynamicServerListLoadBalancer
- ZoneAwareLoadBalancer
Ribbon的负载均衡策略及原理
常见策略
- 随机 (Random)
- 轮询 (RoundRobin)
- 一致性哈希 (ConsistentHash)
- 哈希 (Hash)
- 加权(Weighted)
IRule实现类
- RoundRobinRule
- AvailabilityFilteringRule
- WeightedResponseTimeRule
- RetryRule
- BestAvailableRule
- RandomRule
支持自定义实现