Архитектура Pin
Контекст
Pin строится как multi-tenant enterprise-платформа для учета, каталогирования, управления товарами, остатками, объектами и персоналом. Архитектура должна быть пригодна для нескольких прикладных доменов, сохраняя единый стек, повторяемые building blocks и строгие operational standards.
Высокоуровневая Схема
Высокоуровневая runtime-диаграмма вынесена в Runtime Context Diagram.
Runtime Слои
Gateway: единая входная точка, маршрутизация, authentication forwarding, correlation, rate limiting и tenant resolution.API: административные и системные операции с явными политиками доступа.External Callback API: отдельный контур для входящих вызовов внешних систем с усиленными security controls.Internal API: синхронные межсервисные запросы внутри private network.Background: consumers, schedulers, reconciliation, projection maintenance, async orchestration.Migrator: миграции схем, индексов, справочников и связанных инфраструктурных объектов.
Ключевые Архитектурные Принципы
- сервис владеет только своим состоянием, схемой, миграциями и контрактами;
- business logic не живет в controllers, EF configurations, HTTP clients или UI components;
- любой mutation flow описывается transaction boundary, side effects, audit и observability;
- read models, search indexes и analytics stores не являются source of truth;
- cross-service consistency достигается через events, compensation и reconciliation;
- общая инфраструктурная логика выносится в
src/shared/*,src/building-blocks/*иsrc/contracts/*.
CQRS В Сервисах
Каждый backend service использует CQRS:
- HTTP actions и callbacks маппят запрос в MediatR
CommandилиQuery; Commandменяет owned state, пишет audit/idempotency/outbox в одной локальной транзакции;Queryчитает source of truth или документированный read model и указывает freshness SLA;- consumers работают через inbox/idempotency и не допускают повторного изменения состояния;
- distributed transactions не применяются без отдельного ADR.
Данные
- PostgreSQL: operational source of truth.
- ClickHouse: аналитические факты, агрегаты, dashboards и отчеты.
- Elasticsearch: поисковые projections.
- Redis: cache, locks, throttling, short-lived coordination state, realtime backplane.
- S3-compatible storage: документы, вложения, экспортные файлы и медиа-артефакты.
Подробности описаны в:
- Data Architecture
- Data Ownership И Data Lineage
- Data Freshness Standard
- Transaction Boundaries And Sagas
Multi-Tenant Модель
TenantIdявляется обязательной границей изоляции.- При необходимости используются дополнительные scope identifiers:
OrganizationUnitId,FacilityId,DepartmentId,WorkplaceId. - Shared reference data допускается только как явно документированный общий контур.
- Global operators и tenant-scoped operators имеют разные политики доступа и audit expectations.
Надежность И Эксплуатация
- critical operations должны быть идемпотентными;
- inbox/outbox обязателен для надежного event-driven взаимодействия;
- reconciliation является частью дизайна, а не аварийной мерой;
- feature flags, rollout, dashboards, alerts и runbooks проектируются вместе с поведением;
- архитектурные тесты и quality gates контролируют соблюдение зависимостей и стандартов.
Архитектурные Ограничения
- нет cross-service imports бизнес-кода;
- нет cross-service foreign keys;
- нет неявных generic payloads без схемы;
- нет чтения privileged scope из недоверенных клиентских полей;
- нет скрытых side effects вне documentable runtime boundaries;
- нет прямого редактирования финансовых и учетных итогов без документированной компенсирующей процедуры.
Обратные ссылки
Автоссылки: где используется этот документ.
- implementation-blueprint.md (1): Implementation Blueprint
- runtime-context-diagram.md (1): Runtime Context Diagram
- scenarios (1): Кросс-сервисные сценарии PIN (OVR)
Связанные Документы
- Сервис Журналов: Архитектурная Выжимка
- Implementation Blueprint
- Service Boundary Decision Matrix
- Service Decomposition Playbook
- Observability
- ADR Index