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

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-001INF-BCK-003 и INF-BCK-006INF-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 явно определён, наблюдаем и не маскирует потерю обязательной работы как успешную обработку.