Background Jobs И Schedulers
Назначение
Документ задает правила для scheduled jobs, delayed processing, consumers, reconciliation jobs и maintenance tasks.
Главный Принцип
Hosted service не содержит бизнес-решение. Он только:
- получает trigger;
- создает command/query;
- передает его в MediatR;
- логирует result;
- обновляет technical checkpoint.
Бизнес-логика остается в Application/Domain.
Типы Jobs
| Тип | Пример | Требования |
|---|---|---|
ScheduledJob | nightly reconciliation | distributed lock, checkpoint, metrics. |
ConsumerJob | Kafka/MassTransit consumer | inbox/idempotency, retry, dead-letter policy. |
ProjectionJob | Elasticsearch/ClickHouse update | freshness SLA, replay, backfill. |
MaintenanceJob | cleanup expired exports | retention policy, audit if sensitive. |
ProviderSyncJob | provider catalog sync | provider ACL, rate limit, circuit breaker. |
Job Registry
Каждый job описывается в сервисной документации:
| Поле | Описание |
|---|---|
JobCode | Stable technical code. |
OwnerService | Сервис-владелец. |
Trigger | Cron/event/manual/retry. |
CommandOrQuery | MediatR request. |
IdempotencyKey | Как защищен повтор. |
LockKey | Distributed 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.
Обратные ссылки
Автоссылки: где используется этот документ.
- adr (1): ADR-0042: Distributed Locking
- 10-signalr-realtime.md (1): SignalR Realtime — Архитектура и Практическое Руководство
- 11-distributed-locking.md (1): Distributed Locking — Архитектура и Практическое Руководство
- backend-shared-standards-index.md (1): Backend Shared Standards Index