什么是Ribbon
Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,它将Netflix的中间服务连接在一起,Ribbon客户端组件提供一套完整的配置(如连接超时,重试等)。简单来说,就是在配置文件中列出Load Balancer(LB,负载均衡)后面所有的机器,Ribbon会自动地帮助你基于某种规则(比如简单轮询,随机连接等)去连接这些服务。我们也可以使用Ribbon实现自定义的负载均衡算法。默认使用的是轮询算法。
集中式LB
在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,比如F5,也可以是软件,比如nginx),由该设施负责把访问请求通过某种策略转发至服务提供方。
进程内LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己从中选择一个合适的服务器。
Ribbon的使用
- 配置pom.xml:导入eureka,ribbon,config的starter模块
- 修改application.yml:配置eureka客户端
- 在RestTemplate上配置注解 @EnableBalancer
Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号
Ribbon的架构图
Ribbon的核心组件IRule
配置Ribbon使用的负载均衡策略
Ribbon提供的负载均衡算法
自定义负载均衡策略
- 在启动类上加上注解
@RibbonClient(name = "客户端名称", configuration = MyselfRule.class)
- MyselfRule类:这个类不可以在启动类所在的包或者子包下,也不能在被 @ComponentScan 配置了扫描的包下。
@Configuration
public class MyselfRule {
@Bean
public IRule myRule () {
return new XXXRule();
}
}
- 自定一规则类:继承 AbstractLoadBalancerRule 类,并实现对应的方法即可。
|