ADR-0011: No-proxy архитектура

Status: accepted Date: 2026-04-17 Deciders: команда проекта

Контекст

При работе с credentials поставщиков возможна архитектурная развилка:

  • Proxy: клиентский запрос напрямую транслируется в запрос к поставщику (с использованием его credentials), результат возвращается клиенту.
  • Cache-and-enrich: клиент получает данные из нашей системы; данные предварительно собираются background-процессами через credentials.

В обоих подходах credentials используются, но flow и гарантии разные.

Решение

No-proxy: мы — самостоятельная система с собственным обогащённым каталогом.

  • Клиентские запросы никогда не порождают синхронные запросы к API поставщика.
  • Все запросы к поставщикам — в фоновых задачах: scheduled ingestion, async refresh job, validation.
  • Клиент получает данные только из нашего хранилища (canonical, observations, projections).
  • Credentials используются background-процессами в качестве input к нашему хранилищу, не как passthrough к поставщику.
  • Если данные устарели или отсутствуют — возможен async refresh job (клиент видит прогресс), но не синхронный proxy.

Последствия

Плюсы

  • Предсказуемая latency клиентских запросов (не зависит от поставщика).
  • Контролируемый response shaping — каждый ответ проходит наш Visibility Policy слой (см. ADR-0012).
  • Кэшируемость всех ответов (наш контент).
  • Защита API поставщика от пиков нашей клиентской нагрузки.
  • Стабильность: падение поставщика → деградация свежести, не падение сервиса.
  • Упрощение: упраздняется поле allowed_use в credentials (см. ADR-0009 §6.4) — все enrichment-данные всегда обогащают каталог; pricing-разделение контролируется на уровне credential routing.

Минусы

  • Клиент никогда не видит “real-time” данные напрямую от поставщика — всегда есть гэп свежести (TTL).
  • Сложнее объяснить клиенту, почему “его данные” не обновляются мгновенно.
  • Требуется явная “refresh”-кнопка для критичных позиций.

Нейтральные последствия

  • Совместимо с возможным будущим расширением: webhooks от поставщиков сократят гэп свежести.

Рассмотренные альтернативы

Proxy

  • Минусы: непредсказуемая latency, сложно применить Visibility Policy, легко уронить поставщика, нельзя кэшировать.
  • Плюс: real-time данные.

Гибрид (proxy для критичных запросов)

  • Усложнение архитектуры, размывание границ.
  • Гипотетические real-time выгоды не оправдывают.

Ссылки