- Введение
- Цели и задачи
- Термины и определения (Глоссарий)
- Область применения и границы системы
- Требования к функциональности
- Нефункциональные требования (SLA, SLO/SLI, производительность)
- Архитектура и ограничения
- Модель данных и совместимость
- API и контракты
- Конфигурация, фичефлаги, миграции
- Безопасность и соответствие
- Наблюдаемость и эксплуатация
- Тестирование и качество
- CI/CD и выпуск релизов
- План производительности и емкости
- Управление изменениями
- Риски и допущения
- Процедуры инцидентов и DR/BCP
- Требования к документации
- График поставки
- Критерии приемки
- Приложения
Important
Цель документа — зафиксировать полный набор требований к системе, критерии приемки и эксплуатационные нормы.
Текущая версия: v1.0 (2025-08-09) Ответственные: Архитектор, Тимлид, Представитель заказчика
- Обработать не менее 50 000 событий/с со средней задержкой не более 200 мс на партию.
- Обеспечить горизонтальное масштабирование и отказоустойчивость.
- Предоставить наблюдаемость уровня продакшн (метрики, трассировка, логи).
- Событие: атомарная запись о действии/факте во внешней системе.
- Пакет: набор событий, обрабатываемых транзакционно в рамках одной операции.
- Идемпотентность: повторный прием одного и того же события не меняет итоговый результат.
- Exactly-once semantics: семантика, исключающая дубликаты и пропуски.
- Взаимодействует с внешними источниками событий через HTTP/gRPC и очередь сообщений.
- Не отвечает за восстановление исторических данных, если это не предусмотрено отдельным модулем реплея.
- Защита от злоупотреблений: rate limiting и квоты на вход.
- Вход: путь к файлу (UTF-8, абсолютный/относительный)
- Выход: структура
AppConfig
- Ошибки: файл отсутствует; неверный YAML; нет прав
- Вход: JSON-массив событий
- Выход: JSON-отчет (обработано, ошибки, длительность)
- Ошибки: неверный формат; превышен лимит; ошибка записи в БД
- Требуется детерминированный ключ идемпотентности
- Обязателен дедуп по ключу в пределах временного окна
- Гарантии порядка в пределах ключа партиционирования
- Консистентность записей в БД и в очереди подтверждений
Категория | Требование |
---|---|
Производительность | ≥ 50 000 событий/с |
Задержка | p50 ≤ 200 мс; p95 ≤ 400 мс; p99 ≤ 750 мс |
SLA | 99.9% ежемесячно |
Доступность API | 99.95% для /status , 99.9% для /events |
Безопасность | TLS 1.3, JWT (RS256/ES256), mTLS для межсервисного |
Масштабируемость | Горизонтальная (N экземпляров) |
Совместимость | Rust ≥ 1.75; Linux x86_64; PostgreSQL ≥ 14 |
Хранилище | P99 latency БД ≤ 20 мс на запись |
SLO/SLI фиксируются в панели Grafana и ежедневно валидируются.
-
Язык: Rust
-
Async runtime: Tokio
-
SQL: PostgreSQL с SQLx (async)
-
Очередь: Kafka/NATS (конкретизация по проекту)
-
Логи: JSON-структурированные
-
Ограничения:
- Не использовать
unwrap()/expect()/panic!
в продакшн-коде - Минимизировать глобальное состояние
- Не использовать
mod.rs
::
только вuse
-импортах
- Не использовать
Высокоуровневая схема (описательная):
- Ingress: HTTP
/events
(REST) и Consumer очереди - Processor: партиционированные воркеры; транзакционные операции
- Storage: PostgreSQL (основные данные), Redis (кэш/токены)
- Egress: отчеты/вебхуки/аудит
- Observability: Prometheus, OTLP, централизованные логи
- Схема БД версионируется миграциями; обратная совместимость не менее двух минорных версий.
- Ключ идемпотентности: строка до 128 символов, индексирован.
Пример DTO события:
{
"event_id": "string",
"type": "click",
"timestamp": "2025-08-09T12:00:00Z",
"attributes": { "key": "value" }
}
Метод | Путь | Описание | Коды |
---|---|---|---|
POST | /events | Прием и обработка батча событий | 202, 400, 413, 429, 500 |
GET | /status | Техническое состояние сервиса | 200, 500 |
Модель ошибок:
{
"error": {
"code": "PAYLOAD_TOO_LARGE",
"message": "Request size exceeds the configured limit",
"trace_id": "b2f1c..."
}
}
Требования:
- Версионирование API: заголовок
X-API-Version: 1
. - Идемпотентность: заголовок
Idempotency-Key
.
- Конфигурация через YAML и переменные окружения.
- Фичефлаги: включение новых алгоритмов через флаги с обратной совместимостью.
- Миграции БД: прямые и обратные; атомарность и откат.
- TLS 1.3, строгие ciphersuites.
- JWT: RS256/ES256, минимальный набор клеймов, истечение ≤ 15 мин.
- mTLS для внутреннего контура.
- Регистрация аутентифицированного субъекта в логах.
- Политики rate limiting и защита от дубликатов.
Метрики Prometheus (минимум):
events_processed_total
с лейблами результатаprocessing_latency_ms
(гистограмма)db_write_latency_ms
ingress_rate
Трейсинг: OTLP, service.name=event-processor
.
Логи: JSON с timestamp
, level
, message
, trace_id
, span_id
.
Runbooks:
- Повышенная задержка p95
- Утечки соединений БД
- Рост 429/5xx на
/events
- Unit: ≥ 80% по публичным функциям и веткам ошибок
- Интеграционные: API, БД, очередь
- Нагрузочные: профиль равномерный и burst
- Функциональные: требования из раздела 5
- Безопасностные: негативные кейсы аутентификации/авторизации
- Doctest: обязательны для публичных примеров
Запрещено использовать unwrap()/expect()
в тестах, влияющих на приемку.
Pre-commit:
cargo +nightly fmt --
cargo clippy -D warnings
cargo test --all
CI:
- Проверка форматирования/линтинга/тестов
- Отчеты покрытия
- Сборка образа
- Деплой в staging, затем в prod с ручным апрувалом
Стратегии релиза:
- Blue/Green или Canary
- Автооткат по SLO-сигналам
- Номинальная нагрузка: 50k событий/с
- Пики: до 2× номинала в течение 15 минут
- Исчерпываемость ресурсов: триггеры авто-скейлинга по CPU, latency, очередям
- Версионирование документа: SemVer
- Каждое изменение — PR с рецензией архитектора
- История версий хранится в репозитории
- Порядок событий не гарантирован вне ключа партиционирования
- Латентность внешней БД увеличивается в пиковые окна
- Зависимости очереди и сети
- RPO ≤ 5 минут, RTO ≤ 30 минут
- Репликация БД на горячий стенд
- Процедуры переключения и валидации целостности
- Архитектурная схема
- ER-диаграмма
- Описание API (OpenAPI)
- Руководства по запуску, обновлению, откату
- Плейбуки эксплуатации
Этап | Описание | Срок |
---|---|---|
1 | Архитектура и обзор | 2025-08-20 |
2 | Модуль конфигурации | 2025-08-30 |
3 | Ядро обработки | 2025-09-15 |
4 | Тестирование и приемка | 2025-09-25 |
- Соответствие производительности и задержкам (раздел 6)
- Прохождение всех тестов и проверок качества
- Соответствие OpenAPI
- Полная наблюдаемость (метрики, трассинг, логи)
- Отсутствие паник и необработанных ошибок в проде
- Готовность runbooks и алертов
- Примеры полезной нагрузки
- Политики rate limiting
- Схемы развёртывания
- Чек-листы релиза и отката
- Introduction
- Objectives
- Glossary
- Scope and Boundaries
- Functional Requirements
- Non-Functional Requirements (SLA, SLO/SLI, Performance)
- Architecture and Constraints
- Data Model and Compatibility
- API and Contracts
- Configuration, Feature Flags, Migrations
- Security and Compliance
- Observability and Operations
- Testing and Quality
- CI/CD and Releases
- Capacity and Performance Plan
- Change Management
- Risks and Assumptions
- Incident Handling and DR/BCP
- Documentation Requirements
- Delivery Schedule
- Acceptance Criteria
- Appendices
Important
The document defines the complete set of system requirements, acceptance criteria, and operational norms.
Current version: v1.0 (2025-08-09) Owners: Architect, Tech Lead, Customer Representative
- Process at least 50,000 events/sec with average batch latency below 200 ms.
- Provide horizontal scalability and fault tolerance.
- Deliver production-grade observability (metrics, tracing, logs).
- Event: an atomic record describing an action or fact from an external system.
- Batch: a set of events processed transactionally as a single operation.
- Idempotency: re-submitting the same event leaves the end state unchanged.
- Exactly-once semantics: no duplicates and no omissions.
- Interacts with external sources via HTTP/gRPC and a message queue.
- Historical replay is out of scope unless a dedicated replay module is enabled.
- Abuse protection via rate limiting and quotas.
- Input: file path (UTF-8, absolute/relative)
- Output:
AppConfig
structure - Failures: file missing; invalid YAML; insufficient permissions
- Input: JSON array of events
- Output: JSON report (processed, errors, duration)
- Failures: invalid input; payload too large; database write error
- Deterministic idempotency key required
- Enforce dedup within time window
- Ordering guarantees per partitioning key
- Consistency across DB writes and acknowledgment pipeline
Category | Requirement |
---|---|
Throughput | ≥ 50,000 events/s |
Latency | p50 ≤ 200 ms; p95 ≤ 400 ms; p99 ≤ 750 ms |
SLA | 99.9% monthly |
API Availability | 99.95% for /status , 99.9% for /events |
Security | TLS 1.3; JWT (RS256/ES256); mTLS intra-service |
Scalability | Horizontal scaling (N replicas) |
Compatibility | Rust ≥ 1.75; Linux x86_64; PostgreSQL ≥ 14 |
Storage | DB write P99 ≤ 20 ms |
SLO/SLI are exposed in Grafana and validated daily.
- Language: Rust
- Async runtime: Tokio
- SQL: PostgreSQL with SQLx (async)
- Queue: Kafka/NATS (project-specific)
- Logs: JSON structured
Constraints:
- No
unwrap()/expect()/panic!
in production code - Minimize global state
- No
mod.rs
files ::
only inuse
imports
High-level layout:
- Ingress: HTTP
/events
and queue consumer - Processor: partitioned workers; transactional flows
- Storage: PostgreSQL (primary), Redis (cache/tokens)
- Egress: reports/webhooks/audit
- Observability: Prometheus, OTLP, centralized logs
- Schema versioned via migrations; backward compatibility for at least two minor versions.
- Idempotency key: string up to 128 chars, indexed.
Example event DTO:
{
"event_id": "string",
"type": "click",
"timestamp": "2025-08-09T12:00:00Z",
"attributes": { "key": "value" }
}
Method | Path | Description | Codes |
---|---|---|---|
POST | /events | Accept and process event batch | 202, 400, 413, 429, 500 |
GET | /status | Service health and readiness | 200, 500 |
Error model:
{
"error": {
"code": "PAYLOAD_TOO_LARGE",
"message": "Request size exceeds the configured limit",
"trace_id": "b2f1c..."
}
}
Requirements:
- API versioning via
X-API-Version: 1
header - Idempotency via
Idempotency-Key
header
- Configuration via YAML and environment variables.
- Feature flags for new logic with backward-compatible toggles.
- DB migrations: forward and backward; atomicity and rollback.
- TLS 1.3 with strict ciphersuites.
- JWT with RS256/ES256, minimal claims, max TTL 15 minutes.
- mTLS for internal traffic.
- Authenticated subject recorded in logs.
- Rate limiting policies and duplicate protection.
Prometheus metrics (minimum):
events_processed_total
with result labelsprocessing_latency_ms
histogramdb_write_latency_ms
ingress_rate
Tracing: OTLP, service.name=event-processor
.
Logs: JSON with timestamp
, level
, message
, trace_id
, span_id
.
Runbooks:
- Elevated p95 latency
- DB connection leaks
- Rising 429/5xx on
/events
- Unit: ≥ 80% on public functions and error paths
- Integration: API, DB, queue
- Load: steady and burst profiles
- Functional: per Section 5
- Security: negative authn/authz cases
- Doctests: required for public examples
No unwrap()/expect()
in tests that affect acceptance.
Pre-commit:
cargo +nightly fmt --
cargo clippy -D warnings
cargo test --all
CI:
- Enforce fmt/clippy/tests
- Coverage reports
- Image build
- Staging then prod with manual approval
Release strategies:
- Blue/Green or Canary
- Auto-rollback driven by SLO signals
- Nominal load: 50k events/s
- Bursts: up to 2× for 15 minutes
- Autoscaling on CPU, latency and queue depth
- Document versioning: SemVer
- Each change via PR; architect review required
- Changelog preserved in repo
- Event order not guaranteed beyond partition key
- External DB latency spikes during peak windows
- Dependencies on queue and network stability
- RPO ≤ 5 minutes, RTO ≤ 30 minutes
- Hot-standby DB replication
- Switchover procedures and integrity validation
- Architecture diagram
- ER diagram
- OpenAPI spec
- Run/upgrade/rollback guides
- Operational playbooks
Stage | Description | Deadline |
---|---|---|
1 | Architecture and review | 2025-08-20 |
2 | Configuration module | 2025-08-30 |
3 | Processing core | 2025-09-15 |
4 | Testing and acceptance | 2025-09-25 |
- Meets throughput and latency targets (Section 6)
- All tests and quality gates pass
- Conforms to OpenAPI
- Full observability (metrics, tracing, logs)
- No panics or unhandled errors in production
- Runbooks and alerts are in place
- Payload examples
- Rate limiting policies
- Deployment diagrams
- Release and rollback checklists