B2B Engineering Insights & Architectural Teardowns

Latency-aware proxy против DNS: как выровнять S3 нагрузку

DNS round-robin перестаёт работать под нагрузкой, когда клиенты начинают кэшировать ответы. Agoda столкнулась с этим на уровне объектного хранилища и вынесла балансировку в отдельный слой.

Проблема проявилась в момент роста объёма data workloads. S3-совместимые endpoint’ы использовали DNS round-robin для распределения трафика. На практике клиенты кэшировали DNS-ответы и продолжали ходить в один и тот же backend. В результате система теряла равномерность: отдельные узлы перегружались, другие простаивали. Это классический случай, когда балансировка на уровне DNS перестаёт быть управляемой и наблюдаемой.

Решение — убрать балансировку из DNS и перенести её в управляемый слой. Agoda ввела reverse proxy Storefront между сервисами и объектным хранилищем. Прокси принимает решения о маршрутизации на основе текущего состояния backend’ов. Изначально использовали алгоритм least-in-flight requests, но под реальной нагрузкой его уточнили, добавив latency-aware scoring. Это компромисс: больше логики и состояния в прокси, но предсказуемое распределение и контроль.

Реализация построена на Rust и фреймворке Pingora. Прокси не только маршрутизирует запросы, но и закрывает операционные проблемы:
— IO timeouts защищают connection pools от клиентов, которые не дочитывают ответы
— трафик между дата-центрами изолирован в отдельные backend-пулы
— оптимизирована работа с HTTP Expect: 100-continue для снижения latency при upload
— добавлена credential-less аутентификация через идентификацию Kubernetes pod’ов

Последний пункт меняет модель доступа. Сервисы больше не управляют credentials напрямую. Контроль централизуется в прокси, что снижает риск утечек и упрощает compliance. Это сдвиг ответственности с приложений на инфраструктурный слой.

В результате Storefront стал не просто прокси, а точкой управления доступом и наблюдаемости. Через OpenTelemetry система отдаёт метрики по latency, загрузке, паттернам трафика и использованию S3 API. Конкретные численные улучшения не раскрываются, но архитектурно решена ключевая проблема: балансировка стала детерминированной и управляемой, а не побочным эффектом DNS.

Читать больше на Infoq

×

🚀 Deploy the Blocks

Controls: ← → to move, ↑ to rotate, ↓ to drop.
Mobile: use buttons below.