跳到主要内容

代理与重试

如何区分正向与反向代理?​

  • forward proxy: Client 通过代理访问外部目标; 常用于出口控制和审计;
  • reverse proxy: Hertz 接收请求并转发到上游; 常用于网关、聚合和迁移;
  • transparent concern: 代理仍需明确 Host、scheme、Header、超时和流式语义;

如何实现受控的反向转发?​

client → Hertz proxy → upstream
← status/header/body ←
  • 路由重写: 明确原路径到上游路径的映射;
  • Header: 删除 hop-by-hop Header,追加规范的转发信息;
  • body: 大请求和响应使用流式转发并限制大小;
  • 错误: 上游不可达与上游 5xx 分开记录;
  • 安全: 不允许用户任意控制目标地址,防止 SSRF 和开放代理;

如何限制重试的总成本?​

总 deadline = 第一次尝试 + 退避 + 后续尝试 + 响应余量

如何防止重试放大故障?​

  • retry storm: 配合限流、熔断和总重试预算;
  • 写重复: 使用幂等键和服务端去重;
  • 指标: 记录原始请求数、尝试数、最终结果和重试原因;
  • 日志: 只在最终失败或策略异常时提升级别,避免每次尝试刷屏;