# SpringCloudRibbon

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具。

## 负载均衡策略

* 随机选择：RandomRule实现了从服务清单中随机选择一个服务实例的功能；
* 线性轮询：RoundRobinRule实现了按照线性轮询的方式依次选择每个服务实例的功能；默认策略；
* 重试机制：RetryRule实现了一个具备重试机制的实例选择功能，基于线性轮询方式进行反复尝试，如果成功获取则返回，失败则不断获取，直到达到一个时间阈值；
* 根据权重：WeightedResponseTimeRule对RoundRobinRule进行拓展，增加了根据实例的运行情况来计算权重，并根据权重来挑选实例，以达到更优的分配效果；
* ClientConfigEnabledRoundRobinRule：和RoundRobinRule一样，只是作为父类，后面的高级策略均是基于这个父类；
* BsetAvailableRule：继承ClientConfigEnabledRoundRobinRule，选择并发请求数最小的一个，所以该策略选出的是最空闲的实例，这个算法依赖统计对象`loadBalancerStats`，当为空时执行父类算法；
* PredicateBasedRule：抽象策略，继承ClientConfigEnabledRoundRobinRule，通过子类实现的Predicate过滤一部分实例，然后再以轮询方式选出一个；
* AvailabilityFilteringRule：继承PredicateBasedRule，过滤掉故障机器和并发请求数大于阈值的机器；
* ZoneAvoidanceRule：继承PredicateBasedRule，包含主过滤条件和次要过滤条件。

## 特性

* 客户端负载均衡
* 最佳区域选择，默认区域亲和策略
* 重试机制，尝试不同的实例
