必须了解

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注解,这就是开启了负载均衡。

关于RestTemplate

使用方法:注入bean即可。
建议:写一个@Configuration配置类

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

Last modification:October 9, 2020
如果觉得我的文章对你有用,请随意赞赏