Перейти к основному содержимому

Background Jobs И Schedulers

Назначение

Документ задает правила для scheduled jobs, delayed processing, consumers, reconciliation jobs и maintenance tasks.

Главный Принцип

Hosted service не содержит бизнес-решение. Он только:

  • получает trigger;
  • создает command/query;
  • передает его в MediatR;
  • логирует result;
  • обновляет technical checkpoint.

Бизнес-логика остается в Application/Domain.

Типы Jobs

ТипПримерТребования
ScheduledJobnightly reconciliationdistributed lock, checkpoint, metrics.
ConsumerJobKafka/MassTransit consumerinbox/idempotency, retry, dead-letter policy.
ProjectionJobElasticsearch/ClickHouse updatefreshness SLA, replay, backfill.
MaintenanceJobcleanup expired exportsretention policy, audit if sensitive.
ProviderSyncJobprovider catalog syncprovider ACL, rate limit, circuit breaker.

Job Registry

Каждый job описывается в сервисной документации:

ПолеОписание
JobCodeStable technical code.
OwnerServiceСервис-владелец.
TriggerCron/event/manual/retry.
CommandOrQueryMediatR request.
IdempotencyKeyКак защищен повтор.
LockKeyDistributed lock scope.
CheckpointГде хранится progress.
FreshnessSlaДля projection/report jobs.
RunbookСсылка на incident/runbook.

Distributed Lock

Distributed lock обязателен для jobs, которые:

  • меняют shared state;
  • делают provider calls с side effects;
  • запускают backfill/reconciliation;
  • могут конфликтовать между несколькими replicas.

Lock key включает tenant/brand scope, если job работает по scope.

Retry И Dead Letter

  • Transient failures retry через Polly/MassTransit policy.
  • Business failures не retry бесконечно.
  • Dead-letter event/job должен иметь reason, correlation id, tenant/brand scope и replay instruction.
  • Manual replay требует permission и audit.

Observability

Каждый job пишет:

  • started/completed/failed logs;
  • duration metric;
  • processed/skipped/failed counters;
  • lag/freshness metric для projections;
  • checkpoint value;
  • correlation id/run id.

Tests

  • job не выполняется параллельно при lock contention;
  • repeated trigger идемпотентен;
  • partial failure сохраняет checkpoint;
  • retry не дублирует money/event side effects;
  • manual replay проверяет permission и audit.

Обратные ссылки

Автоссылки: где используется этот документ.