写点什么

Agoda 的 Storefront 简介:感知延迟的反向代理,用于改善基于 DNS 的负载分布

作者:Leela Kumili
  • 2026-03-31
    北京
  • 本文字数:977 字

    阅读完需:约 3 分钟

Agoda 工程师自研了Storefront,这是一款基于Rust开发、兼容S3协议的反向代理,用于优化大规模对象存储系统的负载均衡、请求路由与可观测性。该代理解决了 DNS 流量分发的固有局限性,实现了延迟感知路由、跨数据中心优化、IO 安全防护、无凭证认证,并能够通过 OpenTelemetry 对外暴露遥测数据。

 

Agoda 的数据处理与分析工作流高度依赖对象存储,包含大量读写海量文件的流水线。据工程团队介绍,其存储服务商 VAST Data 提供的 S3 端点采用 DNS 轮询机制在多个虚拟 IP 之间分发流量。但应用客户端通常会缓存 DNS 解析结果,这会导致请求持续集中转发至同一后端节点。该现象会造成负载不均,部分节点流量过载形成热点,而其余节点则会资源闲置。

DNS 轮询导致负载分布不均(来源:Agoda技术博客

 

为了解决这一问题,团队引入了 Storefront 反向代理,主动将 S3 请求智能分发至各个后端节点。该服务基于 Rust 语言开发,底层依赖 Cloudflare 开源代理框架Pingora。它不再依赖 DNS 解析做负载均衡,而是实时评估后端健康状态与负载压力后再进行路由。初期版本采用最少活跃请求(least-in-flight)算法,后续又迭代优化为延迟感知评分策略,进一步提升生产环境下的流量分发的均衡性。

 

该代理还加入多重运维防护机制提升稳定性。工程师配置了 IO 超时控制,用于处理部分 S3 客户端无法完整读取 HTTP 响应的异常场景,这类问题原来会耗尽后端的连接池资源。Storefront 将跨数据中心流量隔离至独立的后端池中,并针对对象上传请求优化处理Expect: 100-continue 请求头信息,有效降低对象上传请求的延迟。

 

Storefront 内置了无凭证认证的能力,它能自动识别调用方 Kubernetes Pod 的身份,并在内部完成权限校验。该方案采用统一的集中权限管理,业务服务无需自行保管密钥即可安全访问对象存储,这大幅降低运维复杂度、减少密钥泄露风险,同时简化大规模分布式集群的合规管控流程。

 

Agoda 的技术负责人Desmond Xu表示:

Storefront 已经从一款简单得反向代理,演进为我们数据基础设施的核心组件。

 

除请求路由外,Storefront 完整集成了无凭证认证,通过识别调用 Pod 身份实现内部鉴权,让业务不再直接管理存储密钥。同时,代理基于 OpenTelemetry 全面暴露遥测指标,包含性能指标、资源使用率、流量模型与 S3 API 调用的统计数据。

 

查看英文原文:Inside Agoda’s Storefront: A Latency-Aware Reverse Proxy for Improving DNS Based Load Distribution