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 выгоды не оправдывают.
Ссылки
- ADR-0009 (multi-tenant credentials).
- ADR-0012 (data visibility policy).
../../20-architecture/principles.md