Spring Cloud Netflix Ribbon:微服务的客户端负载均衡利器

在微服务架构中,服务注册与发现 (如 Eureka)解决了 "服务在哪里" 的问题,而负载均衡则解决了 "选哪个服务实例" 的关键问题。Spring Cloud Netflix Ribbon 作为 Netflix 开源的客户端负载均衡组件,与 Eureka 无缝协作,为微服务通信提供了 "智能路由" 能力 ------ 它让服务消费者能自动从多个服务实例中选择最优节点,避免单点故障,提升系统吞吐量。

本文将从负载均衡基础入手,逐步深入 Ribbon 的核心原理、实战配置与高级特性,帮你系统性掌握这一微服务通信必备工具。

目录

[一、负载均衡基础:为什么需要 Ribbon?](#一、负载均衡基础:为什么需要 Ribbon?)

[1.1 什么是负载均衡?](#1.1 什么是负载均衡?)

[1.2 负载均衡的核心价值](#1.2 负载均衡的核心价值)

[1.3 两类负载均衡:客户端 vs 服务端](#1.3 两类负载均衡:客户端 vs 服务端)

[二、Spring Cloud Netflix Ribbon:核心原理与功能](#二、Spring Cloud Netflix Ribbon:核心原理与功能)

[2.1 Ribbon 是什么?](#2.1 Ribbon 是什么?)

[2.2 Ribbon 与 Eureka 的协作原理](#2.2 Ribbon 与 Eureka 的协作原理)

[2.3 Ribbon 的核心组件](#2.3 Ribbon 的核心组件)

[三、实战:Ribbon 集成与负载均衡测试](#三、实战:Ribbon 集成与负载均衡测试)

[3.1 环境准备](#3.1 环境准备)

[3.2 服务消费者集成 Ribbon](#3.2 服务消费者集成 Ribbon)

[步骤 1:添加依赖(无需额外引入 Ribbon)](#步骤 1:添加依赖(无需额外引入 Ribbon))

[步骤 2:配置 RestTemplate 并启用 Ribbon](#步骤 2:配置 RestTemplate 并启用 Ribbon)

[步骤 3:编写消费代码(用服务名调用)](#步骤 3:编写消费代码(用服务名调用))

[3.3 测试负载均衡效果](#3.3 测试负载均衡效果)

[四、Ribbon 核心:负载均衡策略详解](#四、Ribbon 核心:负载均衡策略详解)

[4.1 内置负载均衡策略](#4.1 内置负载均衡策略)

[4.2 策略配置方式](#4.2 策略配置方式)

[方式 1:全局配置(所有服务生效)](#方式 1:全局配置(所有服务生效))

[方式 2:局部配置(指定服务生效)](#方式 2:局部配置(指定服务生效))

[4.3 自定义负载均衡策略](#4.3 自定义负载均衡策略)

[步骤 1:实现 IRule 接口](#步骤 1:实现 IRule 接口)

[步骤 2:配置自定义策略](#步骤 2:配置自定义策略)

[五、Ribbon 高级特性:重试与超时控制](#五、Ribbon 高级特性:重试与超时控制)

[5.1 重试机制配置](#5.1 重试机制配置)

[步骤 1:添加 spring-retry 依赖](#步骤 1:添加 spring-retry 依赖)

[步骤 2:配置重试参数](#步骤 2:配置重试参数)

[5.2 服务列表缓存配置](#5.2 服务列表缓存配置)

[5.3 禁用 Ribbon(特定场景)](#5.3 禁用 Ribbon(特定场景))

[六、Ribbon 的现状:停止维护与替代方案](#六、Ribbon 的现状:停止维护与替代方案)

[6.1 Ribbon vs Spring Cloud LoadBalancer](#6.1 Ribbon vs Spring Cloud LoadBalancer)

[6.2 选择建议](#6.2 选择建议)

七、常见问题与排查技巧

[7.1 问题 1:服务调用报错 "Could not find service instance for XXX"](#7.1 问题 1:服务调用报错 “Could not find service instance for XXX”)

[7.2 问题 2:负载均衡策略不生效](#7.2 问题 2:负载均衡策略不生效)

[7.3 问题 3:重试机制不生效](#7.3 问题 3:重试机制不生效)

[7.4 问题 4:调用超时](#7.4 问题 4:调用超时)

[八、总结:Ribbon 在微服务中的价值与展望](#八、总结:Ribbon 在微服务中的价值与展望)


一、负载均衡基础:为什么需要 Ribbon?

在学习 Ribbon 之前,我们需要先明确 "负载均衡" 的核心价值 ------ 它是微服务高可用、高并发的基石。

1.1 什么是负载均衡?

负载均衡(Load Balancing)是指将客户端的请求均匀分发到多个服务实例的技术,本质是 "分摊压力、避免单点故障"。例如:当用户服务(user-service)部署了 2 个实例(端口 8081、8082),负载均衡器会将请求轮流发送到这两个实例,防止单个实例因压力过大宕机。

1.2 负载均衡的核心价值

  1. 高可用性:避免单个服务实例故障导致整个服务不可用(故障转移)。
  2. 高并发能力:多个实例共同承载流量,提升系统整体吞吐量(如 1 个实例能抗 100QPS,3 个实例可抗 300QPS)。
  3. 弹性扩展:新增服务实例后,负载均衡器能自动识别并分配请求,无需修改客户端配置。

1.3 两类负载均衡:客户端 vs 服务端

负载均衡主要分为 "服务端" 和 "客户端" 两种模式,而 Ribbon 属于客户端负载均衡,这是它与 Nginx(服务端负载均衡)的核心区别。

对比维度 客户端负载均衡(Ribbon) 服务端负载均衡(Nginx)
工作位置 服务消费者本地(嵌入在消费者进程中) 独立的服务端节点(集中式网关)
服务列表来源 从注册中心(如 Eureka)获取并缓存本地 手动配置或从注册中心拉取
决策逻辑 消费者本地计算(无需网络跳转) 所有请求先经过 Nginx,再转发到服务端
优点 减少网络开销(本地决策)、去中心化 集中管理(配置简单)、适合异构系统
缺点 与编程语言绑定(如 Ribbon 依赖 Java) 可能成为单点故障(需集群)、增加延迟
适用场景 微服务内部通信(Java 技术栈) 外部请求入口(Web 端、APP 端)

二、Spring Cloud Netflix Ribbon:核心原理与功能

理解了负载均衡的基础后,我们来聚焦 Ribbon------ 它如何在 Spring Cloud 体系中实现客户端负载均衡?

2.1 Ribbon 是什么?

Ribbon 是 Netflix 开源的客户端负载均衡器,本质是一个 Java 库。Spring Cloud 对其进行了封装,使其能与 Eureka、OpenFeign 等组件无缝集成,实现 "开箱即用" 的负载均衡能力。

核心特点:

  • 客户端侧工作:无需额外部署独立服务,嵌入在服务消费者中。
  • 动态服务列表:自动从 Eureka(或其他注册中心)获取服务实例列表,并缓存到本地。
  • 可配置策略:支持多种负载均衡策略(如轮询、随机、权重),且允许自定义。
  • 重试机制:调用失败时可自动重试其他实例,提高请求成功率。

2.2 Ribbon 与 Eureka 的协作原理

Ribbon 本身不具备 "服务发现" 能力,它需要依赖 Eureka 获取服务列表。两者的协作流程如下(结合之前学习的 Eureka 知识):

  1. 服务注册:服务提供者(如 user-service)启动后,向 Eureka Server 注册自己的信息(服务名、IP、端口)。
  2. 列表拉取:服务消费者(如 order-service)启动时,Eureka Client 会从 Eureka Server 拉取服务列表,并缓存到本地(默认 30 秒刷新一次)。
  3. 负载均衡决策 :消费者调用服务时,通过RestTemplate(加@LoadBalanced注解)触发 Ribbon:
    • Ribbon 从本地缓存的服务列表中,根据配置的负载均衡策略,选择一个实例。
  4. 请求调用 :Ribbon 将服务名(如http://user-service)解析为选中实例的 IP + 端口(如http://192.168.1.100:8081),发起 HTTP 请求。

流程图

复制代码
[Eureka Server] ← 注册 ← [服务提供者集群(user-service:8081/8082)]
   ↑
   | 拉取服务列表
   ↓
[服务消费者(order-service)]
   ↓(@LoadBalanced RestTemplate)
[Ribbon] → 策略选择实例 → 调用实例

2.3 Ribbon 的核心组件

Ribbon 的功能由多个核心接口实现,Spring Cloud 默认提供了这些接口的实现类,无需手动开发:

核心接口 作用 默认实现类
ILoadBalancer 负载均衡器核心,管理服务列表和选择实例 ZoneAwareLoadBalancer(支持区域感知)
IRule 负载均衡策略接口 RoundRobinRule(轮询)
ServerList 获取服务列表 DiscoveryEnabledNIWSServerList(从 Eureka 获取)
ServerListFilter 服务列表过滤(如过滤故障实例) ZonePreferenceServerListFilter(优先同区域实例)
IClientConfig Ribbon 配置接口 DefaultClientConfigImpl

三、实战:Ribbon 集成与负载均衡测试

基于之前搭建的 Eureka 环境,我们通过 "服务提供者集群 + 服务消费者集成 Ribbon" 的实战,掌握 Ribbon 的使用流程。

3.1 环境准备

  1. 启动 Eureka Server:确保 Eureka Server(或集群)正常运行(参考之前的 Eureka 集群搭建)。
  2. 搭建服务提供者集群 :以user-service为例,启动 2 个实例(端口 8081 和 8082):
    • 实例 1:server.port=8081spring.application.name=user-service
    • 实例 2:server.port=8082spring.application.name=user-service(两个实例服务名必须一致,Eureka 才会将其识别为同一服务的不同实例)
  3. 验证服务注册 :访问 Eureka 管理平台(http://localhost:8761),确认user-service有 2 个实例(Status 为 UP)。

3.2 服务消费者集成 Ribbon

服务消费者(如order-service)需要通过 Ribbon 调用user-service,步骤如下:

步骤 1:添加依赖(无需额外引入 Ribbon)

在 Spring Cloud Hoxton 版本中,spring-cloud-starter-netflix-eureka-client已经内置了 Ribbon 依赖,因此无需额外添加spring-cloud-starter-netflix-ribbon。依赖配置如下:

复制代码
<!-- 父工程:Spring Boot 2.3.12.RELEASE -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
</parent>

<!-- Spring Cloud依赖管理:Hoxton.SR12 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- 核心依赖:Web + Eureka Client(内置Ribbon) -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
步骤 2:配置 RestTemplate 并启用 Ribbon

在 Spring Boot 启动类中,配置RestTemplate并添加@LoadBalanced注解 ------ 这个注解是 Ribbon 的 "开关",告诉 Spring:对该RestTemplate的请求,使用 Ribbon 进行负载均衡。

复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class OrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

    // 配置RestTemplate,添加@LoadBalanced启用Ribbon
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
步骤 3:编写消费代码(用服务名调用)

在消费者的 Controller 中,通过RestTemplate调用user-service,注意使用服务名(user-service)代替 IP + 端口------Ribbon 会自动将服务名解析为具体的实例地址。

复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    // 调用user-service的接口:根据用户ID查询用户
    @GetMapping("/order/user/{userId}")
    public String getOrderByUserId(@PathVariable Long userId) {
        // 关键:用服务名(user-service)代替IP:端口
        String userUrl = "http://user-service/user/" + userId;
        // Ribbon会自动选择user-service的实例,发起请求
        return restTemplate.getForObject(userUrl, String.class);
    }
}

3.3 测试负载均衡效果

  1. 启动服务消费者order-service的端口设为 8090(server.port=8090)。
  2. 多次调用接口 :访问http://localhost:8090/order/user/1,观察user-service两个实例的日志。
  3. 预期结果 :默认使用RoundRobinRule(轮询策略),请求会交替发送到 8081 和 8082 端口的实例,例如:
    • 第 1 次调用:8081 实例响应
    • 第 2 次调用:8082 实例响应
    • 第 3 次调用:8081 实例响应
    • ......

四、Ribbon 核心:负载均衡策略详解

Ribbon 的核心能力是 "选择实例",而策略决定了如何选。Spring Cloud 提供了 7 种内置策略,同时支持自定义策略。

4.1 内置负载均衡策略

策略类(IRule 实现) 策略特点 适用场景
RoundRobinRule 轮询选择(默认策略):按实例顺序依次分配请求 所有服务实例性能相近,需均匀分摊压力
RandomRule 随机选择:从实例列表中随机选一个 实例性能差异小,无需固定顺序
WeightedResponseTimeRule 权重策略:响应时间越短,权重越高,被选中概率越大 实例性能差异大(如高配机器权重高)
BestAvailableRule 选并发量最低的实例:先过滤故障实例,再选并发量最小的 需优先保证请求响应速度,避免实例过载
AvailabilityFilteringRule 过滤故障 + 高并发实例:过滤掉连续失败的实例和并发量超过阈值的实例 对可用性要求高,需避免调用故障实例
ZoneAvoidanceRule 区域优先策略:优先选择同区域的实例,再轮询 跨区域部署场景(如阿里云不同地域),减少跨区域延迟
RetryRule 重试策略:先按轮询选实例,调用失败则重试其他实例 网络波动频繁的场景,提高请求成功率

4.2 策略配置方式

Ribbon 的策略配置分为 "全局配置"(所有服务共用一个策略)和 "局部配置"(指定服务用特定策略),两种方式按需选择。

方式 1:全局配置(所有服务生效)

在 Spring Boot 启动类或配置类中,定义IRule类型的 Bean,即可全局生效:

复制代码
// 全局配置:所有服务使用随机策略(RandomRule)
@Bean
public IRule randomRule() {
    return new RandomRule();
}
方式 2:局部配置(指定服务生效)

application.yml中,通过 "服务名.ribbon.NFLoadBalancerRuleClassName" 配置,仅对该服务生效。例如:让user-service使用权重策略(WeightedResponseTimeRule):

复制代码
# 局部配置:仅user-service使用权重策略
user-service:
  ribbon:
    # 指定策略类的全路径
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

注意 :策略类必须指定全路径名,不能直接写类名(如WeightedResponseTimeRule)。

4.3 自定义负载均衡策略

如果内置策略无法满足需求(如按实例的 "地区""机房" 选择),可以自定义策略。步骤如下:

步骤 1:实现 IRule 接口

自定义策略类,实现IRule接口,重写choose方法(核心:选择实例的逻辑):

复制代码
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.Random;

// 自定义策略:优先选择端口为8081的实例,没有则随机选
public class CustomRule extends AbstractLoadBalancerRule {

    private Random random = new Random();

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        // 初始化配置(可选)
    }

    @Override
    public Server choose(Object key) {
        // 1. 获取负载均衡器
        ILoadBalancer loadBalancer = getLoadBalancer();
        // 2. 获取所有可用实例
        List<Server> reachableServers = loadBalancer.getReachableServers();
        if (reachableServers.isEmpty()) {
            return null;
        }

        // 3. 自定义逻辑:优先选端口8081的实例
        Server targetServer = null;
        for (Server server : reachableServers) {
            if (server.getPort() == 8081) {
                targetServer = server;
                break;
            }
        }

        // 4. 若没有8081实例,随机选一个
        if (targetServer == null) {
            int index = random.nextInt(reachableServers.size());
            targetServer = reachableServers.get(index);
        }

        return targetServer;
    }
}
步骤 2:配置自定义策略

与内置策略配置方式一致,可全局或局部配置:

复制代码
# 局部配置:user-service使用自定义策略
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.example.order.config.CustomRule

五、Ribbon 高级特性:重试与超时控制

在实际场景中,网络波动、实例临时不可用等问题很常见,Ribbon 的 "重试机制" 和 "超时控制" 能有效提高请求成功率。

5.1 重试机制配置

Ribbon 的重试机制需要配合spring-retry依赖,当调用实例失败时,自动重试其他实例。

步骤 1:添加 spring-retry 依赖
复制代码
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
步骤 2:配置重试参数

application.yml中配置重试次数、间隔等参数(全局或局部):

复制代码
# 全局配置:所有服务启用重试
ribbon:
  # 连接超时时间(毫秒):建立HTTP连接的超时时间
  ConnectTimeout: 2000
  # 读取超时时间(毫秒):获取响应数据的超时时间
  ReadTimeout: 5000
  # 同一实例的最大重试次数(不包括首次调用)
  MaxAutoRetries: 1
  # 切换实例的最大重试次数
  MaxAutoRetriesNextServer: 2
  # 是否对所有HTTP方法重试(如GET、POST)
  OkToRetryOnAllOperations: false

参数说明

  • MaxAutoRetries=1MaxAutoRetriesNextServer=2:首次调用实例 A 失败→重试实例 A 1 次→若仍失败,切换到实例 B→重试实例 B 1 次→若仍失败,切换到实例 C→重试实例 C 1 次→最终失败。
  • OkToRetryOnAllOperations=false:仅对 GET 请求重试(POST 请求可能有副作用,如重复提交订单,不建议重试)。

5.2 服务列表缓存配置

Ribbon 会从 Eureka Client 本地缓存的服务列表中选择实例,默认 30 秒刷新一次缓存。可通过以下配置调整刷新间隔:

复制代码
ribbon:
  # 服务列表刷新间隔(毫秒):默认30000ms(30秒)
  ServerListRefreshInterval: 10000

场景建议:若服务实例动态增减频繁(如秒杀场景临时扩容),可缩短刷新间隔(如 10 秒);若实例稳定,保持默认即可(减少 Eureka Server 压力)。

5.3 禁用 Ribbon(特定场景)

若某个服务不需要负载均衡(如仅一个实例),可禁用 Ribbon:

复制代码
# 禁用user-service的Ribbon
user-service:
  ribbon:
    NFLoadBalancerEnabled: false

六、Ribbon 的现状:停止维护与替代方案

需要注意的是,Netflix 在 2018 年宣布停止维护 Ribbon,Spring Cloud 也在后续版本中推荐使用Spring Cloud LoadBalancer(SCLB) 作为替代方案。但 Ribbon 仍有大量存量项目在使用,因此学习 Ribbon 仍有实际价值。

6.1 Ribbon vs Spring Cloud LoadBalancer

对比维度 Ribbon(Netflix) Spring Cloud LoadBalancer(SCLB)
维护状态 停止维护(仅修复严重 BUG) 积极维护(Spring 官方项目)
编程模型 基于同步阻塞模型 支持同步 + 响应式(WebFlux)模型
依赖 依赖 Netflix 相关组件(如 eureka-client) 轻量,无第三方强依赖
扩展性 自定义策略需实现 IRule,扩展性一般 基于 SPI 机制,扩展性更强
兼容性 仅支持 Spring MVC(同步) 支持 Spring MVC 和 Spring WebFlux

6.2 选择建议

  • 存量项目:继续使用 Ribbon,无需强行迁移(Ribbon 仍能正常工作,且问题较少)。
  • 新项目:优先使用 SCLB,尤其是采用响应式编程(WebFlux)的项目。
  • 过渡方案:若需从 Ribbon 迁移到 SCLB,只需替换依赖和配置(Spring Cloud 提供平滑过渡支持)。

七、常见问题与排查技巧

在使用 Ribbon 时,可能会遇到 "负载均衡不生效""服务调用失败" 等问题,以下是常见问题的排查思路:

7.1 问题 1:服务调用报错 "Could not find service instance for XXX"

原因 :Ribbon 未获取到该服务的实例列表。排查步骤

  1. 检查服务名是否正确(http://user-service中的user-service是否与提供者的spring.application.name一致,注意大小写)。
  2. 检查 Eureka Server:确认服务提供者已成功注册(Eureka 管理平台中 Status 为 UP)。
  3. 检查 Eureka Client 缓存:服务消费者是否拉取到服务列表(可通过日志查看,搜索 "DiscoveryClient" 关键词)。

7.2 问题 2:负载均衡策略不生效

原因 :策略配置方式错误或类名不正确。排查步骤

  1. 全局配置:确认IRule Bean 是否正确定义(是否加了@Bean注解)。
  2. 局部配置:确认application.yml中策略类的全路径是否正确(如com.netflix.loadbalancer.RandomRule,而非RandomRule)。
  3. 查看日志:启动日志中搜索 "LoadBalancerClient",确认策略是否加载成功(如 "Loaded rule: RandomRule")。

7.3 问题 3:重试机制不生效

原因 :未添加spring-retry依赖或参数配置错误。排查步骤

  1. 检查依赖:确认spring-retry依赖已添加到 POM 中。
  2. 检查参数:MaxAutoRetriesMaxAutoRetriesNextServer是否大于 0(默认值为 0,需手动配置)。
  3. 查看日志:搜索 "RetryLoadBalancerInterceptor",确认重试逻辑是否触发。

7.4 问题 4:调用超时

原因ConnectTimeoutReadTimeout设置过短,或服务提供者响应慢。排查步骤

  1. 调整超时参数:适当增大ConnectTimeout(如 2000ms)和ReadTimeout(如 5000ms)。
  2. 排查服务提供者:检查提供者接口是否存在性能问题(如 SQL 慢查询、线程阻塞)。

八、总结:Ribbon 在微服务中的价值与展望

Ribbon 作为 Spring Cloud Netflix 体系的核心组件,其核心价值在于实现了客户端侧的负载均衡------ 它与 Eureka 协作,解决了 "服务注册后如何选择实例" 的问题,为微服务通信提供了 "去中心化" 的路由能力,避免了服务端负载均衡(如 Nginx)的单点风险和网络延迟。

虽然 Ribbon 已停止维护,但它仍是理解 "客户端负载均衡" 原理的最佳案例。对于开发者而言,掌握 Ribbon 的策略配置、重试机制,不仅能解决存量项目的问题,也能为学习后续的 Spring Cloud LoadBalancer 打下基础。

在微服务架构中,"服务发现(Eureka)+ 负载均衡(Ribbon)" 是通信层的基石,后续学习的 OpenFeign(服务调用)、Hystrix(服务容错)等组件,都需要基于这一基石展开。因此,扎实掌握 Ribbon,是构建稳定、高可用微服务系统的关键一步。

相关推荐
虫师c3 小时前
云原生微服务:Kubernetes+Istio 魔法学院实战指南
微服务·云原生·kubernetes·istio·服务网格
稚辉君.MCA_P8_Java5 小时前
Git 基础 - 查看提交历史
spring boot·git·微服务·云原生·kubernetes
宇宙超粒终端控制中心19 小时前
Java使用easypoi填充数据到word
java·spring boot·spring cloud·java-ee·easypoi
java_logo1 天前
使用 Docker 部署 Nginx 教程
java·spring cloud·eureka
森林-1 天前
Spring Cloud Netflix Eureka:从微服务基础到高可用集群实战
微服务·云原生·eureka·springcloud
TGITCIC1 天前
SpringCloud API Gateway2.0如何解决docker中应用间IP漂移的正确手法
spring cloud·docker·云原生·本地镜像·api gateway
月夕·花晨1 天前
Gateway-过滤器
java·分布式·spring·spring cloud·微服务·gateway·sentinel
---学无止境---2 天前
Linux任务迁移函数和空闲负载均衡函数的实现
linux·负载均衡
罗亚方舟2 天前
微服务故障排查
微服务·云原生·架构