Межсервисные запросы чтения¶
Требования применяются к операциям чтения, объединяющим данные нескольких
независимо развёртываемых сервисов. Они не разрешают прямой доступ к
внутреннему хранилищу другого сервиса. Уровни обязательности определены в
корневом 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 не иметь временного предела, если его идентичность и неизменяемость проверяются по контракту источника.