分布式组件的全域认识和操作--gateway

我们对gateway这个技术栈,产生什么样的认识,才算真

正的理解,会使用gateway。

构建与注册层

1.如何搭建一个gateway项目,并且注册到gateway里面

应用与实践层

2.深刻理解gateway提供了哪些逻辑功能和机制。

要真正理解和使用Gateway技术栈,需要从架构认知、核心机制、实践应用三个维度建立系统性理解。让我为你构建一个完整的Gateway知识体系:

一、构建与注册层:从零搭建Gateway项目

1.1 基础搭建(最小实现)

java 复制代码
// 1. 引入依赖(pom.xml)
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

// 2. 配置文件(application.yml)
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1

// 3. 启动类
@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

1.2 服务注册与发现

java 复制代码
// 集成Nacos注册中心
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

// 配置Nacos
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          enabled: true  # 开启服务发现
          lower-case-service-id: true

二、应用与实践层:Gateway核心机制深度理解

2.1 核心组件认知框架

复制代码
请求流程:
客户端 → HandlerMapping → RouteLocator → Predicate → Filter → 目标服务

关键组件:
- Route(路由):网关的基本构建块
- Predicate(断言):匹配条件
- Filter(过滤器):请求/响应处理
- HandlerMapping:路由匹配器

2.2 七大核心机制详解

1️⃣ 路由机制(Route)
java 复制代码
// 动态路由配置
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("order-service", r -> r.path("/api/order/**")
            .filters(f -> f.stripPrefix(1))
            .uri("lb://order-service"))
        .build();
}

理解要点:

  • 路由是Gateway的核心,定义了请求转发规则
  • 支持静态配置和动态编程两种方式
  • 每个路由包含ID、目标URI、断言集合、过滤器集合
2️⃣ 断言机制(Predicate)
java 复制代码
// 多条件组合断言
spring:
  cloud:
    gateway:
      routes:
        - id: complex-route
          uri: lb://service
          predicates:
            - Path=/api/**
            - Method=GET
            - Header=X-Request-Id, \d+
            - Query=token, \w+
            - After=2024-01-01T00:00:00+08:00

理解要点:

  • 断言是路由匹配的条件判断器
  • 支持11种内置断言(Path、Method、Header、Query等)
  • 可组合使用,满足复杂路由需求
3️⃣ 过滤器机制(Filter)
java 复制代码
// 自定义全局过滤器
@Component
public class AuthFilter implements GlobalFilter, Ordered {
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        
        if (token == null || !validateToken(token)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        return chain.filter(exchange);
    }
    
    @Override
    public int getOrder() {
        return -100; // 优先级
    }
}

理解要点:

  • 过滤器分为GatewayFilter(局部)和GlobalFilter(全局)
  • 执行顺序由Ordered接口的getOrder()方法决定
  • 可实现认证、限流、日志、修改请求/响应等
4️⃣ 负载均衡机制
java 复制代码
// 自动集成Ribbon/LoadBalancer
spring:
  cloud:
    gateway:
      routes:
        - id: service-route
          uri: lb://service-name  # lb://前缀触发负载均衡

理解要点:

  • 通过lb://前缀自动启用负载均衡
  • 支持轮询、随机、权重等多种策略
  • 与服务注册中心无缝集成
5️⃣ 限流机制(RateLimiter)
java 复制代码
// 基于Redis的分布式限流
spring:
  cloud:
    gateway:
      routes:
        - id: rate-limit-route
          uri: lb://service
          filters:
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 10  # 令牌桶填充速率
                redis-rate-limiter.burstCapacity: 20  # 令牌桶容量
                key-resolver: "#{@userKeyResolver}"   # 自定义key解析器
java 复制代码
@Bean
KeyResolver userKeyResolver() {
    return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));
}
6️⃣ 熔断降级机制
java 复制代码
// 集成Hystrix/Sentinel
spring:
  cloud:
    gateway:
      routes:
        - id: circuit-breaker-route
          uri: lb://service
          filters:
            - name: Hystrix
              args:
                name: fallbackCommand
                fallbackUri: forward:/fallback
7️⃣ 跨域处理机制
java 复制代码
// 全局CORS配置
@Configuration
public class CorsConfig {
    
    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.setAllowCredentials(true);
        
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        
        return new CorsWebFilter(source);
    }
}

三、真正理解的标准

认知层面

  1. 架构理解:清楚Gateway在整个微服务架构中的定位和作用
  2. 组件关系:理解Route、Predicate、Filter三者的关系和执行流程
  3. 设计模式:掌握Gateway使用的责任链、工厂、策略等设计模式

机制层面

  1. 执行流程:能画出请求从进入到转发的完整流程图
  2. 扩展能力:知道如何自定义Predicate和Filter
  3. 异常处理:理解全局异常处理和降级策略

实践层面

  1. 配置能力:能根据业务需求灵活配置路由规则
  2. 问题排查:能通过日志和监控快速定位网关问题
  3. 性能优化:了解网关的性能瓶颈和优化方案

进阶理解

java 复制代码
// 理解Gateway的底层原理
// 1. 基于WebFlux的响应式编程模型
// 2. Netty作为底层通信框架
// 3. 异步非阻塞的IO处理
// 4. 函数式编程的路由定义方式

四、实际应用场景示例

java 复制代码
// 综合应用:API网关的完整配置
spring:
  cloud:
    gateway:
      # 全局过滤器配置
      default-filters:
        - AddResponseHeader=X-Response-Default, Default-Value
      
      routes:
        # 用户服务路由
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200
        
        # 订单服务路由(带认证)
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/api/order/**
          filters:
            - StripPrefix=1
            - name: Hystrix
              args:
                name: orderFallback
                fallbackUri: forward:/order/fallback
        
        # 静态资源路由
        - id: static-resources
          uri: http://static.example.com
          predicates:
            - Path=/static/**

总结 :真正理解Gateway不仅仅是会配置,更要理解其设计理念、执行机制、扩展方式,能够在复杂场景下灵活运用,并具备问题排查和性能优化的能力。

这是一个非常深入的问题!让我从架构拓扑、性能原理、分发机制三个维度,系统地解析Gateway的内部构造。

一、Gateway内部拓扑构造

1.1 整体架构层次

复制代码
┌─────────────────────────────────────────────────────────┐
│                    客户端请求层                          │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│                   Netty网络层 (EventLoop)               │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │  Acceptor   │  │ EventLoop1  │  │ EventLoop2  │     │
│  │   线程      │  │   线程组    │  │   线程组    │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│              WebFlux响应式处理层 (Reactor)              │
│  ┌───────────────────────────────────────────────────┐  │
│  │  DispatcherHandler (请求分发器)                    │  │
│  │    ↓                                              │  │
│  │  RoutePredicateHandlerMapping (路由匹配)          │  │
│  │    ↓                                              │  │
│  │  FilteringWebHandler (过滤器链)                   │  │
│  │    ↓                                              │  │
│  │  GatewayFilterChain (责任链)                      │  │
│  └───────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│                  路由与过滤器层                          │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │  Route      │  │ Predicate   │  │  Filter     │     │
│  │  路由定义   │  │  断言匹配   │  │  过滤器链   │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│              服务发现与负载均衡层                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │  Discovery  │  │ LoadBalancer│  │ Connection  │     │
│  │  服务发现   │  │  负载均衡   │  │  连接池     │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│                    目标服务层                            │
└─────────────────────────────────────────────────────────┘

1.2 核心组件详解

java 复制代码
// 1. DispatcherHandler - 请求入口分发器
public class DispatcherHandler implements WebHandler {
    private final Map<String, HandlerMapping> handlerMappings;
    
    @Override
    public Mono<Void> handle(ServerWebExchange exchange) {
        // 遍历所有HandlerMapping,找到匹配的处理器
        return handlerMappings.values()
            .stream()
            .filter(mapping -> mapping.matches(exchange))
            .findFirst()
            .map(mapping -> mapping.getHandler(exchange))
            .orElse(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)))
            .flatMap(handler -> handler.handle(exchange));
    }
}

// 2. RoutePredicateHandlerMapping - 路由匹配器
public class RoutePredicateHandlerMapping extends AbstractHandlerMapping {
    
    @Override
    protected Mono<?> getHandlerInternal(ServerWebExchange exchange) {
        // 1. 获取所有路由
        Flux<Route> routes = routeLocator.getRoutes();
        
        // 2. 根据Predicate匹配路由
        return routes.filter(route -> {
            List<PredicateDefinition> predicates = route.getPredicates();
            return predicates.stream()
                .allMatch(predicate -> predicate.apply(exchange));
        })
        .next() // 返回第一个匹配的路由
        .map(route -> {
            exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, route);
            return webHandler; // 返回FilteringWebHandler
        });
    }
}

// 3. FilteringWebHandler - 过滤器链处理器
public class FilteringWebHandler implements WebHandler {
    
    @Override
    public Mono<Void> handle(ServerWebExchange exchange) {
        Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
        
        // 1. 获取路由的过滤器
        List<GatewayFilter> routeFilters = route.getFilters();
        
        // 2. 获取全局过滤器
        List<GlobalFilter> globalFilters = globalFilters();
        
        // 3. 合并并排序
        List<GatewayFilter> combined = combineFilters(routeFilters, globalFilters);
        
        // 4. 构建过滤器链
        GatewayFilterChain chain = new DefaultGatewayFilterChain(combined);
        
        // 5. 执行过滤器链
        return chain.filter(exchange);
    }
}

// 4. DefaultGatewayFilterChain - 责任链模式
private static class DefaultGatewayFilterChain implements GatewayFilterChain {
    
    private final int index;
    private final List<GatewayFilter> filters;
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange) {
        if (index < filters.size()) {
            // 递归调用下一个过滤器
            GatewayFilter filter = filters.get(index);
            return filter.filter(exchange, this);
        } else {
            // 所有过滤器执行完毕,转发请求
            return ((NettyRoutingFilter) filters.get(filters.size() - 1))
                .route(exchange);
        }
    }
}

二、为什么Gateway能承受大流量

2.1 响应式编程模型(Reactor Pattern)

java 复制代码
// 传统阻塞IO vs 响应式非阻塞IO

// 传统Servlet模型(阻塞)
@WebServlet("/api")
public class BlockingServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // 每个请求占用一个线程,直到IO完成
        String result = database.query(); // 阻塞等待
        resp.getWriter().write(result);
    }
}
// 问题:1000个并发请求 = 1000个线程 = 高内存消耗

// Gateway响应式模型(非阻塞)
@GetMapping("/api")
public Mono<String> reactiveApi() {
    // 线程不等待,注册回调,IO完成后触发
    return database.queryAsync() // 返回Mono
        .map(result -> process(result));
}
// 优势:少量线程处理大量并发请求

2.2 Netty的事件驱动架构

java 复制代码
// Netty线程模型
┌─────────────────────────────────────────────────────┐
│                  Boss EventLoopGroup               │
│  (1个线程,负责Accept连接)                          │
│  ┌───────────────────────────────────────────────┐  │
│  │  ServerSocketChannel → Accept → SocketChannel │  │
│  └───────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────┐
│              Worker EventLoopGroup                   │
│  (N个线程,负责IO读写)                               │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐│
│  │ EventLoop│ │ EventLoop│ │ EventLoop│ │ EventLoop││
│  │   线程1  │ │   线程2  │ │   线程3  │ │   线程4  ││
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘│
│      ↓            ↓            ↓            ↓       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐│
│  │Channel1 │  │Channel2 │  │Channel3 │  │Channel4 ││
│  │Channel2 │  │Channel3 │  │Channel4 │  │Channel5 ││
│  │Channel3 │  │Channel4 │  │Channel5 │  │Channel6 ││
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘│
└─────────────────────────────────────────────────────┘

// 关键特性:
// 1. 一个EventLoop绑定多个Channel(连接)
// 2. 每个Channel的生命周期绑定到同一个EventLoop
// 3. 无锁化设计,避免线程切换开销

2.3 线程模型对比

java 复制代码
// 传统Tomcat线程模型
┌─────────────────────────────────────────────────────┐
│  Thread Pool (200个线程)                             │
│  ┌─────┐ ┌─────┐ ┌─────┐ ... ┌─────┐               │
│  │Thread│ │Thread│ │Thread│     │Thread│             │
│  └─────┘ └─────┘ └─────┘     └─────┘               │
│     ↓       ↓       ↓           ↓                   │
│  Request1 Request2 Request3  Request200             │
│  (每个请求占用一个线程,直到完成)                     │
└─────────────────────────────────────────────────────┘
// 问题:线程上下文切换开销大,内存占用高

// Gateway Netty线程模型
┌─────────────────────────────────────────────────────┐
│  EventLoopGroup (CPU核心数 * 2)                      │
│  ┌─────────────┐  ┌─────────────┐                   │
│  │ EventLoop1  │  │ EventLoop2  │                   │
│  │ (处理1000+   │  │ (处理1000+   │                   │
│  │  连接)       │  │  连接)       │                   │
│  └─────────────┘  └─────────────┘                   │
│      ↓                 ↓                             │
│  Channel1-1000    Channel1001-2000                  │
└─────────────────────────────────────────────────────┘
// 优势:少量线程处理海量连接,无阻塞等待

2.4 内存管理优化

java 复制代码
// Netty的内存池化技术(PooledByteBufAllocator)

// 传统方式:每次分配新内存
byte[] buffer1 = new byte[1024]; // 分配
// 使用...
buffer1 = null; // 释放,等待GC

// Netty内存池:复用内存块
PooledByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;
ByteBuf buffer = allocator.buffer(1024); // 从池中获取
// 使用...
buffer.release(); // 归还到池中,可复用

// 优势:
// 1. 减少内存分配/释放开销
// 2. 降低GC压力
// 3. 避免内存碎片

2.5 连接复用与连接池

java 复制代码
// HTTP连接池配置
spring:
  cloud:
    gateway:
      httpclient:
        pool:
          type: ELASTIC  # 弹性连接池
          max-connections: 1000  # 最大连接数
          acquire-timeout: 45000 # 获取连接超时

// 连接复用机制
┌─────────────────────────────────────────────────────┐
│  Connection Pool (连接池)                            │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐             │
│  │ Conn1   │  │ Conn2   │  │ Conn3   │             │
│  │ (复用)   │  │ (复用)   │  │ (复用)   │             │
│  └─────────┘  └─────────┘  └─────────┘             │
└─────────────────────────────────────────────────────┘
        ↓           ↓           ↓
    Service1    Service2    Service3

// 优势:
// 1. 避免频繁建立/断开TCP连接
// 2. 减少TCP握手开销
// 3. 提高请求响应速度

三、请求分发机制

3.1 路由匹配算法

java 复制代码
// 路由匹配流程
public class RoutePredicateHandlerMapping {
    
    public Mono<Route> getRoute(ServerWebExchange exchange) {
        return routeLocator.getRoutes()
            .filter(route -> {
                // 1. Path匹配(AntPathMatcher)
                if (route.getPath() != null) {
                    AntPathMatcher matcher = new AntPathMatcher();
                    if (!matcher.match(route.getPath(), exchange.getRequest().getPath().value())) {
                        return false;
                    }
                }
                
                // 2. Method匹配
                if (route.getMethod() != null) {
                    if (!route.getMethod().equals(exchange.getRequest().getMethod())) {
                        return false;
                    }
                }
                
                // 3. Header匹配
                if (route.getHeaders() != null) {
                    for (Map.Entry<String, String> header : route.getHeaders().entrySet()) {
                        String value = exchange.getRequest().getHeaders().getFirst(header.getKey());
                        if (value == null || !value.matches(header.getValue())) {
                            return false;
                        }
                    }
                }
                
                // 4. Query匹配
                // 5. Cookie匹配
                // 6. 其他Predicate...
                
                return true;
            })
            .next(); // 返回第一个匹配的路由
    }
}

// 性能优化:路由缓存
private final Map<String, Route> routeCache = new ConcurrentHashMap<>();

public Mono<Route> getCachedRoute(String path) {
    return Mono.justOrEmpty(routeCache.get(path))
        .switchIfEmpty(getRouteFromLocator(path)
            .doOnNext(route -> routeCache.put(path, route)));
}

3.2 负载均衡策略

java 复制代码
// LoadBalancerClientFilter - 负载均衡过滤器
public class LoadBalancerClientFilter implements GlobalFilter {
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        URI url = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR);
        
        if (url != null && "lb".equals(url.getScheme())) {
            // 1. 解析服务名
            String serviceId = url.getHost();
            
            // 2. 获取服务实例列表
            ServiceInstance instance = loadBalancer.choose(serviceId);
            
            // 3. 构建实际请求URL
            URI uri = reconstructURI(instance, url);
            exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri);
        }
        
        return chain.filter(exchange);
    }
}

// 负载均衡算法实现
public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer {
    
    private final AtomicInteger position = new AtomicInteger();
    
    @Override
    public Mono<ServiceInstance> choose(Request request) {
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
        
        if (instances.isEmpty()) {
            return Mono.empty();
        }
        
        // 轮询算法
        int pos = Math.abs(position.incrementAndGet() % instances.size());
        return Mono.just(instances.get(pos));
    }
}

// 权重负载均衡
public class WeightedLoadBalancer {
    
    public ServiceInstance chooseWeighted(List<ServiceInstance> instances) {
        // 计算总权重
        int totalWeight = instances.stream()
            .mapToInt(i -> i.getMetadata().getOrDefault("weight", "1"))
            .mapToInt(Integer::parseInt)
            .sum();
        
        // 随机选择
        int random = ThreadLocalRandom.current().nextInt(totalWeight);
        
        // 根据权重分配
        int current = 0;
        for (ServiceInstance instance : instances) {
            current += Integer.parseInt(instance.getMetadata().get("weight"));
            if (random < current) {
                return instance;
            }
        }
        
        return instances.get(0);
    }
}

3.3 动态路由更新

java 复制代码
// 基于Nacos的动态路由
@Component
public class NacosRouteDefinitionRepository implements RouteDefinitionRepository {
    
    @Autowired
    private ConfigService configService;
    
    // 监听Nacos配置变化
    @PostConstruct
    public void init() throws NacosException {
        configService.addListener("gateway-routes", "DEFAULT_GROUP", 
            new Listener() {
                @Override
                public void receiveConfigInfo(String configInfo) {
                    // 解析配置
                    List<RouteDefinition> routes = parseRoutes(configInfo);
                    
                    // 更新路由
                    routes.forEach(route -> {
                        routeDefinitionWriter.save(Mono.just(route)).subscribe();
                    });
                }
            });
    }
    
    @Override
    public Flux<RouteDefinition> getRouteDefinitions() {
        // 从Nacos获取路由配置
        String config = configService.getConfig("gateway-routes", "DEFAULT_GROUP", 5000);
        List<RouteDefinition> routes = parseRoutes(config);
        return Flux.fromIterable(routes);
    }
}

// 路由热更新流程
┌─────────────────────────────────────────────────────┐
│  1. Nacos配置变更                                     │
│     ↓                                                │
│  2. 监听器收到通知                                    │
│     ↓                                                │
│  3. 解析新的路由配置                                  │
│     ↓                                                │
│  4. 调用RouteDefinitionWriter保存                     │
│     ↓                                                │
│  5. CachingRouteLocator清除缓存                       │
│     ↓                                                │
│  6. 新路由生效(无需重启)                            │
└─────────────────────────────────────────────────────┘

四、性能数据对比

java 复制代码
// 理论性能对比

// 传统Tomcat (Servlet)
// 线程数:200
// 每个线程处理时间:50ms
// 理论QPS = 200 / 0.05 = 4000

// Gateway (Netty + WebFlux)
// EventLoop线程数:8 (4核CPU * 2)
// 每个请求处理时间:50ms(非阻塞)
// 理论QPS = 8 * (1000/50) * 并发系数 ≈ 80000+

// 实际测试数据(仅供参考)
// 场景:简单路由转发
// 硬件:4核8G
// 
// Tomcat:  ~5000 QPS, 延迟 20ms
// Gateway: ~30000 QPS, 延迟 5ms

五、总结:Gateway高性能的核心原理

特性 传统Servlet Gateway (WebFlux + Netty)
编程模型 阻塞IO 非阻塞响应式
线程模型 每请求一线程 少量EventLoop处理海量连接
内存管理 频繁分配/释放 内存池复用
连接管理 短连接 连接池复用
扩展性 垂直扩展 水平扩展

核心优势:

  1. 事件驱动:无阻塞等待,线程利用率高
  2. 内存池化:减少GC压力,提高性能
  3. 连接复用:降低TCP握手开销
  4. 响应式流:背压机制,防止系统过载

这就是为什么Gateway能够承受大流量的根本原因!

相关推荐
Andy Dennis2 小时前
分布式ID方案学习
分布式
三点水-here2 小时前
04 - 分布式大模型推理实战:TP/PP/EP并行策略深度解析
分布式·rdma·nccl·moe·流水线并行·张量并行·专家并行
Coder_Boy_2 小时前
从单体并发工具类到分布式并发:思想演进与最佳实践
java·spring boot·分布式·微服务
阿里-于怀2 小时前
Higress 已支持全新 Gateway API / Inference Extension
gateway·higress·ingress nginx
礼拜天没时间.4 小时前
Docker 部署分布式 Hadoop(超详细实战版)
linux·hadoop·分布式·docker·容器
百块富翁17 小时前
可管控、不重复TraceId解决方案
java·分布式·系统架构
最贪吃的虎19 小时前
windows上如何可视化访问并远程操作linux系统上运行的浏览器或者linux可视化桌面
java·linux·运维·windows·分布式·后端·架构
没有bug.的程序员19 小时前
分布式缓存深潜:Redis Cluster 物理内核、数据分片算法博弈与高并发实战指南
redis·分布式·缓存·高并发·cluster·数据分片
组合缺一1 天前
OpenSolon v3.9.3, v3.8.5, v3.7.5, v3.6.8 年货版发布
java·人工智能·分布式·ai·llm·solon·mcp