NATS JetStream как платформенный сервис¶
Требования применяются к конфигурации и эксплуатации production NATS
JetStream, включая streams, consumers, Key/Value и Object Store. Уровни
обязательности определены в корневом README.md.
INF-DAT-004. Ресурсный контракт и quorum JetStream¶
Уровень: MUST
Применяется к: JetStream streams, Object Store и Key/Value Store
Для каждого ресурса должны быть заданы владелец, subjects или bucket, storage, replicas, retention/limits, максимальный размер и ожидаемое поведение при достижении лимита. Production HA должен использовать число реплик, сохраняющее quorum при отказе одного узла, и размещать члены quorum в независимых отказных доменах.
Если потерянный ресурс нельзя восстановить из другого authoritative источника
в пределах RTO, цель должна объявлять capability persistent-data и выполнять
INF-BCK-001–INF-BCK-003 и INF-BCK-006–INF-BCK-010.
Обоснование¶
Значения по умолчанию не выражают срок хранения, ёмкость и гарантии данных.
Проверка¶
- запрос конфигурации streams/buckets и её владельца;
- тест достижения каждого limit и заполнения storage;
- отказ узла с проверкой quorum и прикладного результата;
- валидация
persistent-dataи recovery для невоспроизводимого ресурса.
Исключения¶
Одноразовый local stream MAY использовать одну реплику и memory storage.
INF-DAT-013. Управляемая конфигурация consumer¶
Уровень: MUST
Применяется к: broker-side JetStream consumer
Определение consumer и параметры AckWait или BackOff, MaxDeliver,
MaxAckPending, replicas, filter subjects и limits должны иметь одного
владельца и управляться в NATS-платформе либо в явно назначенном
deployment-репозитории. Микросервис не должен быть обязан создавать
платформенный consumer.
Фактические значения должны быть доступны проекту и до release проверяться на
совместимость с прикладным контрактом architecture:INT-NATS-002. Поведение
после исчерпания повторов должно быть определено и наблюдаемо; dead-letter
isolation MAY применяться по architecture:INT-EVT-009, но не является
обязательной.
Обоснование¶
Неявное владение consumer и broker defaults создают несовместимые timeout, повторы и предел параллелизма на границе приложения и платформы.
Проверка¶
- запрос фактической конфигурации consumer и её владельца;
- сопоставление
AckWait/BackOff,MaxDeliverиMaxAckPendingс timeout, идемпотентностью и ёмкостью приложения; - тест redelivery, исчерпания попыток и выбранного terminal result.
Исключения¶
Микросервис MAY владеть consumer, если граница ответственности явно назначает ему deployment ресурса; те же проверки совместимости остаются обязательными.
INF-DAT-009. Изоляция сообщений и replay¶
Уровень: SHOULD
Применяется к: JetStream consumer с конечной политикой повторов
NATS-платформе следует предоставлять управляемую изоляцию и replay для
сообщений, которые после исчерпания повторов могут быть исправлены,
расследованы или повторно обработаны. При реализации следует сохранять
контракт architecture:INT-EVT-009, ограничивать доступ и наблюдать заполнение,
возраст и ошибки replay.
Обоснование¶
Изоляция упрощает восстановление poison messages, но нужна не каждому потребителю и не должна навязывать микросервису владение broker topology.
Проверка¶
- тест исчерпания повторов и выбранного terminal result;
- replay одного сообщения дважды;
- проверка доступа, retention и alert.
Исключения¶
DLQ MAY отсутствовать, если terminal result явно определён, наблюдаем и не маскирует потерю обязательной работы как успешную обработку.