Spring Cloud Ribbon 是 Netflix Ribbon 实现的一套客户端 负载均衡工具
简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供 客户端的复杂就哼算法和服务调用。 Ribbon 客户端组件提供一系列完善的配置项如超时、重试等。简单的说,就是配置文件中列出 load Balancer (简称 LB)后面所有的机器,Ribbon 会自动的帮助你基于某种规则(如简单轮询,随机链接等)去链接这些机器。我们很容易使用 Ribbon 自定义的负载均衡算法。
官方GitHub:https://github.com/Netflix/ribbon
目前已停止维护,但仍然很多公司在用。替代方案 ——Spring Cloud Loadbalancer
LB 负载均衡(Load Balance)
简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)
Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡区别
Nginx 是服务器负载均衡,客户端所有请求都会交给nginx, 然后 nginx 实现转发请求。即负载均衡是由服务端实现的。
Ribbon 本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到JVM 本地,从而在本地实现RPC远程 服务调用技术。
即在服务的消费方和提供方之间使用独立的LB 设施(可以是硬件,如F5, 也可以是软件如 Nginx ), 由该设置负责把访问请求通过某种策略转发至服务的提供方
将 LB 逻辑集成到消费方,消费方从服务注册中心获取有哪些地址可用,然后自己再从这些地址中选择一个适合的服务器。Ribbon 就属于进程内 LB,它只是一个类库,集成于消费方进程,消费方通过它阿莱获取服务提供方的地址。
总结:Ribbon 其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。
Ribbon 在工作时分为两步:
第一步先选择 EurekaServer, 它优先选择在同一个区域呢负载较少的Server
第二步在根据用户执行的策略,在从server 取到的服务注册列表中选择一个地址。
其中 Ribbon 提供了多种策略:比如轮询、随机和更具响应时间加权。
在 spring-cloud-starter-netflix-eureka-client 中自带了 spring-cloud-starter-ribbon
负载均衡默认轮询的方式,实际上就是Ribbon + RestTemplate
在配置RestTemplate Bean时我们也使用了@LoadBalanced注解,这就是开启了负载均衡。
使用方法:注入bean即可。
建议:写一个@Configuration
配置类
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}