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

Механизм Implies (Зависимости)

Обзор

Механизм Implies (Подразумевает) — это "умная" система связей в HSM, которая позволяет описывать декларативные зависимости между компонентами. Это ключевой инструмент для реализации Meta-Orchestration, позволяющий одной части системы (например, коду) автоматически настраивать другую (например, инфраструктуру).

В отличие от жестких зависимостей (dependencies), которые просто гарантируют наличие компонента, implies передает контекст и управляет выбором.

Матрица отношений (Implies)

HSM поддерживает гибкую систему связей между всеми типами компонентов реестра:

Кто влияет (Source)На кого влияет (Target)Что происходитПример использования
БиблиотекаСервисПередача параметров (ENV)auth-lib -> service:postgres db_name: auth. Библиотека сама "говорит" базе, как должна называться её БД.
БиблиотекаГруппаАвто-выбор опцииfastapi -> library_group:server uvicorn. Фреймворк сам выбирает подходящий сервер из группы.
СервисСервисПередача параметров (ENV)web-app -> service:redis db_index: 1. Один сервис настраивает другой под свои нужды.
СервисГруппаАвто-выбор опцииml-service -> service_group:db postgres. Сервис выбирает нужную реализацию БД в проекте.
Опция группыСервисПередача параметров (ENV)Выбор postgres в db-group -> service:backup type: sql. Выбор реализации БД настраивает сервис бэкапов.
Опция группыГруппаАвто-выбор опцииВыбор react в frontend-group -> library_group:ui mui. Выбор фреймворка сужает выбор UI-кита.

Визуализация связей

Ключевые концепции

1. Cross-Domain (Код -> Инфраструктура)

Это уникальная особенность HSM. Код (библиотека) может влиять на инфраструктуру (сервис). Это позволяет создавать автономные компоненты, которые сами "заказывают" и настраивают необходимые им ресурсы.

2. Implication Merging (Слияние параметров)

Если несколько компонентов влияют на один и тот же сервис, HSM не создает конфликтов, а сливает их параметры. Например, если auth-lib требует db_name=auth, а billing-lib требует db_name=billing для одного сервиса postgres, HSM объединит их. В манифесте сервиса это можно использовать так:

env:
POSTGRES_DATABASES: "${HSM_MERGED_PARAMS.db_name}" # Результат: auth,billing

3. Late Binding (Позднее связывание)

Связи вычисляются в момент hsm sync. Это означает, что при замене одного компонента (например, переходе с FastAPI на Django), весь остальной стек (серверы, базы, конфиги) перестроится автоматически согласно новым импликациям.

Использование в Реестре

Импликации описываются в манифестах компонентов в секции implies.

Пример: Библиотека настраивает сервис

# hsm-registry/libraries/my-auth-lib.yaml
name: my-auth-lib
implies:
service:postgres:
params:
db_name: auth_db
db_user: auth_admin

Пример: Опция группы выбирает другую группу

# hsm-registry/library_groups/web-frameworks.yaml
name: web-frameworks
options:
- name: fastapi
implies:
library_group:server: uvicorn

Управление через CLI

Для управления импликациями используются команды registry ... implies:

# Добавить настройку сервиса для библиотеки
hsm registry library implies add auth-lib service:postgres db_name=auth_db

# Добавить авто-выбор в группе
hsm registry library implies add fastapi library_group:server uvicorn

Преимущества

  • Декларативность: Все связи описаны явно, а не скрыты в коде или скриптах.
  • Целостность: Гарантирует, что инфраструктура всегда соответствует потребностям кода.
  • Масштабируемость: Позволяет легко менять реализации компонентов, не ломая зависимости во всем проекте.