详细介绍网关getway以及如何使用,常出现的面试题以及答案

网关(Gateway)详解

一、核心概念

网关是分布式系统的统一入口,主要功能包括:

  1. 协议转换:处理不同协议间的通信(如HTTP转gRPC)
  2. 路由控制:根据请求特征定向到特定服务
  3. 安全防护:身份验证、权限控制、防DDoS攻击
  4. 流量治理:限流、熔断、降级
  5. 监控分析:请求日志、性能指标收集

二、典型应用场景

# Spring Cloud Gateway 配置示例
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/users/**
          filters:
            - StripPrefix=2
            - name: RequestRateLimiter
              args:
                key-resolver: "#{@userKeyResolver}"
                redis-rate-limiter.replenishRate: 10
                redis-rate-limiter.burstCapacity: 20

三、常见面试题与解答

1. 网关与负载均衡器的区别?

  • 网关提供协议转换、安全控制等七层功能
  • 负载均衡器专注流量分发(四层或七层)
  • 示例:Nginx主要做负载均衡,Spring Cloud Gateway实现API网关

2. 如何实现动态路由?

  • 方案1:结合配置中心(如Nacos)实时更新路由表
  • 方案2:通过数据库存储路由规则,监听变更事件
  • 方案3:使用Kubernetes CRD定义路由策略

3. 限流算法比较

算法特点公式表示
令牌桶允许突发流量 r ( t ) = min ⁡ ( b , c + r t ) r(t) = \min(b, c + rt) r(t)=min(b,c+rt)
漏桶严格限制速率 q ( t ) = min ⁡ ( c , q p r e v + Δ t ⋅ r ) q(t) = \min(c, q_{prev} + \Delta t \cdot r) q(t)=min(c,qprev+Δtr)
滑动窗口计数精确控制单位时间请求量 c o u n t = ∑ t = n o w − 1 s n o w r e q t count = \sum_{t=now-1s}^{now} req_t count=t=now1snowreqt

4. 熔断机制实现原理

  • 状态机模型:
    • Closed:正常请求
    • Open:拒绝所有请求(触发阈值后)
    • Half-Open:试探性允许部分请求
  • 判定指标:
    • 错误率超过阈值(如50%)
    • 连续错误数达到上限
    • 响应时间百分位超标

5. 如何设计高可用网关?

  • 多活部署:跨机房集群部署
  • 流量分级:核心业务与非核心业务分离
  • 故障隔离:Bulkhead模式划分资源池
  • 自动恢复:健康检查+自动重启机制

四、性能优化技巧

  1. 连接池管理

    • 保持与下游服务的持久连接
    • 设置合理的最大连接数(公式: m a x _ c o n n = Q P S × a v g _ l a t e n c y 1000 max\_conn = \frac{QPS \times avg\_latency}{1000} max_conn=1000QPS×avg_latency
  2. 缓存策略

    • 对静态资源启用CDN缓存
    • 对认证结果进行短期缓存
  3. 异步处理

// Reactor 异步编程示例
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    return Mono.fromRunnable(() -> {
        // 记录请求日志
        logRequest(exchange.getRequest());
    }).then(chain.filter(exchange));
}

五、安全实践

  1. JWT验证流程

    • 客户端携带Token → 网关验证签名 → 解析claims → 转发用户信息到下游服务
  2. 防重放攻击

    • 时间戳校验(5分钟窗口)
    • Nonce随机数缓存
    • 请求签名算法: s i g n = H M A C _ S H A 256 ( s e c r e t , m e t h o d + p a t h + t i m e s t a m p + n o n c e + b o d y ) sign = HMAC\_SHA256(secret, method+path+timestamp+nonce+body) sign=HMAC_SHA256(secret,method+path+timestamp+nonce+body)
  3. 敏感数据过滤

# 敏感信息过滤伪代码
def filter_sensitive_data(headers):
    blacklist = ['Authorization', 'X-Api-Key']
    return {k:v for k,v in headers.items() if k not in blacklist}

六、常见架构模式

  1. Sidecar模式

    • 每个服务实例部署独立网关代理
    • 优势:细粒度控制,语言无关
  2. 分层网关架构

    • 边缘网关(处理外部流量)
    • 内部网关(服务间通信)
    • 服务网格(精细流量管理)

典型故障排查流程

  1. 检查网关日志中的X-Request-ID
  2. 确认路由配置是否生效
  3. 验证下游服务健康状态
  4. 分析监控指标(QPS/延迟/错误率)
  5. 检查证书有效期(HTTPS场景)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷爱码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值