Перейти к содержанию

Межсервисные запросы чтения

Требования применяются к операциям чтения, объединяющим данные нескольких независимо развёртываемых сервисов. Они не разрешают прямой доступ к внутреннему хранилищу другого сервиса. Уровни обязательности определены в корневом README.md.

В этом документе:

  • синхронная композиция — формирование одного результата посредством ограниченного набора запросов к сервисам-владельцам во время операции;
  • производная модель чтения — принадлежащее consumer сохранённое представление, обновляемое из контрактов сервисов-владельцев;
  • свежесть — проверяемая граница между версией или временем источника истины и версией или временем доступного производного представления.

ARC-SVC-007. Явная стратегия межсервисного чтения

Уровень: MUST

Применяется к: операции, результат которой объединяет данные двух и более независимо развёртываемых сервисов

Проект должен выбрать для операции синхронную композицию, производную модель чтения либо закрытую комбинацию этих стратегий. Контракт операции должен определять владельца результата, сервисы-источники, соответствие полей источникам истины, допустимую согласованность и свежесть, правила доступа и наблюдаемый результат при недоступном, просроченном или частичном источнике.

Операция не должна читать внутреннее хранилище сервиса-источника в обход ARC-SVC-004.

Обоснование

Неявный выбор между runtime-зависимостью и сохранённой копией скрывает стоимость отказа, устаревания и восстановления результата.

Проверка

  • сопоставление каждого поля результата с источником истины и владельцем;
  • review inventory зависимостей и производных представлений;
  • тест полного, частичного, просроченного и недоступного источника;
  • проверка отсутствия storage credentials другого сервиса.

Исключения

Статические данные, зафиксированные в версии общего release-артефакта, MAY не иметь runtime-источника, если версия данных является частью контракта артефакта.

ARC-SVC-008. Ограниченная синхронная композиция

Уровень: MUST

Применяется к: межсервисному чтению с синхронной композицией

Проект должен задать закрытый перечень зависимостей, численный максимум downstream-вызовов на одну входную операцию, общий deadline, timeout каждой зависимости и предел конкурентных вызовов. Суммарное ожидание и retry должны укладываться в общий deadline.

Число downstream-вызовов не должно неограниченно зависеть от числа элементов входа или промежуточного результата. Для отсутствующего, частичного, просроченного и неопределённого ответа должен существовать отдельный наблюдаемый результат; такой ответ не должен неявно интерпретироваться как полный успешный результат.

Обоснование

Неограниченный fan-out и последовательные вызовы на каждый элемент распространяют задержку и отказ одной зависимости на всю операцию.

Проверка

  • статический или integration-тест максимального числа downstream-вызовов;
  • нагрузочный тест на максимальном размере входа;
  • fault-injection timeout, частичного ответа и недоступности каждой зависимости;
  • сверка timeout, retry и общего deadline.

Исключения

Потоковая операция MAY выполнять несколько ограниченных batch-вызовов, если размер batch, число одновременно активных batch и deadline одного batch заданы численно.

ARC-SVC-009. Контракт производной модели чтения

Уровень: MUST

Применяется к: сохранённому представлению данных, полученных от другого сервиса

Проект должен определить владельца и схему производной модели чтения, сервисы-источники, ключ сопоставления, механизм обновления, максимальную допустимую свежесть, обработку удаления и способ полного пересоздания. Производная модель не должна становиться источником истины для изменения данных сервиса-владельца.

Обновление из событий должно соблюдать INT-EVT-013 и INT-EVT-014. Пересоздание должно давать функционально эквивалентное состояние для одной версии источников и не должно требовать необъявленной записи в их хранилища.

Обоснование

Копия без freshness и rebuild contract постепенно становится вторым неуправляемым источником истины.

Проверка

  • тест обновления, удаления, дубликата и перестановки изменений;
  • измерение свежести относительно заявленного источника;
  • полное пересоздание из пустого состояния;
  • негативный тест записи в источник через производную модель.

Исключения

Одноразовый snapshot MAY не иметь непрерывного механизма обновления, если его версия, срок действия и запрет использования после истечения проверяются автоматически.

ARC-SVC-010. Свежесть данных для обязательного решения

Уровень: MUST

Применяется к: решению об авторизации, финансовом результате, прикладном инварианте или необратимом эффекте на основании производной модели чтения

Контракт решения должен задавать максимальный возраст либо минимальную версию каждого влияющего источника и способ доказать соблюдение этой границы во время операции. Если версия или возраст отсутствуют, неизвестны либо вышли за границу, операция должна получить подтверждённое актуальное состояние, отклонить решение или отложить его с отдельным наблюдаемым результатом.

Устаревшее либо не имеющее признака свежести значение не должно интерпретироваться как актуальное. Пустое значение источника должно различаться с отсутствием подтверждённой свежести.

Обоснование

Допустимое для отображения устаревание может нарушить доступ, денежный результат или инвариант при использовании той же копии для решения.

Проверка

  • граничный тест максимального возраста или минимальной версии;
  • тест отсутствующего и неизвестного признака свежести;
  • тест refresh, отклонения либо отложенного результата;
  • fault-injection недоступного сервиса-источника.

Исключения

Неизменяемое версионированное значение MAY не иметь временного предела, если его идентичность и неизменяемость проверяются по контракту источника.