301: Ideator/Хранилище
1. Введение
Этот документ определяет Систему: Хранилище — основной служебный сервис в экосистеме Idea. Сервис Хранилища функционирует как специализированный Idea Transformer, главная цель которого — предоставлять постоянное, контентно-адресуемое хранилище для Ideas
. Это основополагающий слой для памяти и воспроизведения, позволяющий сохранять и версионировать Ideas
для последующего использования другими сервисами, такими как Система: Resolver.
2. Основная концепция: Хранилище как Idea Transformer
Сервис Хранилища следует шаблону Idea Transformer
, принимая Idea
на входе и возвращая Idea
на выходе.
- Входные данные: Валидный триплет
Idea
(schema
,solution
,context
). - Процесс: Сервис получает
Idea
, присваивает ему уникальный адресуемый идентификатор (который включает версионирование) и сохраняет его в надёжное хранилище (например, в базу данных PostgreSQL). - Выходные данные: Сервис возвращает исходный
Idea
в качестве подтверждения успешного сохранения. Эти данные могут быть дополнены метаданными, такими как присвоенный идентификатор и версия, подтверждающими его сохранение.
3. Хранилище как транзакционная граница
Критически важная роль сервиса Хранилища — действовать как транзакционная граница. Когда внешний участник (например, пользователь или другой сервис) отправляет Idea
и получает успешное подтверждение, первоначальная транзакция считается завершённой.
Это разделение является основой устойчивости и масштабируемости архитектуры. Оно позволяет системе создавать сложные, событийно-ориентированные рабочие процессы. Как только Idea
зафиксирована в Storage
, другие сервисы (например, Watcher
или Subscriber
) могут реагировать на это изменение, инициируя новые, независимые транзакции для продолжения процесса. Это избавляет от необходимости в длительных монолитных транзакциях и создаёт чёткую, проверяемую передачу управления между различными этапами рабочего процесса.
4. Ключевые характеристики
4.1. Постоянство «чёрного ящика»
Сервис Хранилища спроектирован как управляемый «чёрный ящик». Пользователи отправляют Ideas
на хранение, не имея контроля над базовым механизмом хранения (например, типом базы данных, шардингом) или политиками хранения данных. Сервис гарантирует, что Idea
после принятия будет сохранена и доступна для использования. Конкретные детали реализации остаются на усмотрение поставщика услуг.
4.2. Версионирование и неизменяемость
Система построена на принципе неизменяемости. При «обновлении» существующей Idea
сервис хранилища не изменяет исходную запись. Вместо этого он создаёт и сохраняет новую версию Idea
, поддерживая полную, неразрывную цепочку её истории. Это гарантирует, что любая ссылка на конкретную версию Idea
всегда будет указывать на одно и то же содержимое. Ссылки могут указывать на определённую версию или на динамическую ветку (например, latest
).
4.3. Контентно-адресуемое хранение
Хотя точная схема адресации является деталью реализации, основной принцип заключается в том, что каждая сохранённая Idea
однозначно идентифицируема и может быть получена по своему идентификатору и версии. Это позволяет создать надёжную и децентрализованную систему, в которой на Ideas
можно ссылаться с высокой точностью.
5. Публичный интерфейс
Публичный интерфейс системы Хранилища прост и ориентирован на запись, что соответствует его основной роли «приёмника» для Ideas
.
-
Основное взаимодействие: Единственным публичным взаимодействием является отправка
Idea
. -
Отделение от извлечения данных: Для поддержания чёткого разделения ответственности сервис Хранилища не предоставляет публичный API для общего извлечения данных или выполнения запросов. Обязанность по получению и обработке
Ideas
явно делегирована сервису Resolver. Это позволяет каждому сервису сосредоточиться на одной задаче: Хранилище отвечает за сохранение, а Resolver — за извлечение и композицию.