Ribbon是一个客户端负载均衡器,能够给HTTP和TCP客户端带来灵活的控制。
描述
Ribbon的核心概念是命名的客户端。每一个负载均衡器都是一系列工作在一起的组件的一部分,并用于按需联系远程服务。你可以给这一系列一个名字(例如使用@FeignClient注解)。Spring Cloud使用RibbonClientConfiguration为每一个命名的客户端建立一个新系列为满足ApplicationContext的需求。 这包括一个ILoadBalancer, 一个RestClient和一个ServerListFilter
使用方式
现在新版本的spring-cloud-starter-eureka依赖中就已经包含了Ribbon Starter
但是想要完整的使用ribbon的全部负载策略的话
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
使用以上的依赖即可
@Configuration
public class RestConfig {
@LoadBalanced //开启负载
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Autowired
private IClientConfig config;
@Bean
public IRule ribbonRule(IClientConfig config) {
// 自定义为权重模式
return new WeightedResponseTimeRule();
}
}
调用逻辑
在常见微服务场景中,负载下游服务的实例信息是通过注册中心来管理的。
ribbon通过注册中心获取的服务注册信息。(当然官网文档也说明,可以不使用注册中心,通过配置方式来定义负载的下游实例)
在服务调用时,ribbon会根据当前配置或定义的负载策略,在服务实例列表中进行选择,进而实现客户端的负载均衡。
其他使用方式参照官方文档
负载策略
负载的入口其实是ServiceInstanceChooser接口中的choose方法,所有实现该方法的类都可以实现负载服务实例的选择。
而内部真实的负载策略则是有IRule的接口实现类来定义。
实现类 | 描述 |
---|---|
RetryRule | 支持重试的策略 |
RoundRobinRule | 轮询策略 |
WeightedResponseTimeRule | 默认轮询,在使用过程中根据响应时间进行权重运算,根据权重来负载 |
AvailabilityFilteringRule | 支持筛选(连接状态、连接数…)负载策略 |
RandomRule | 随机负载策略 |