Архитектура¶
Agate — это рабочее пространство Cargo, в котором каждый крейт — это один ограниченный контекст (bounded context). Внутри контекста слои Clean Architecture являются модулями, а файлы сгруппированы по типу DDD-объекта. Зависимости направлены только внутрь, и общего ядра (shared kernel) нет — межконтекстные технические возможности (например, криптография) публикуются как библиотеки общего поддомена, а не как разделяемые доменные модели.
Граф крейтов¶
flowchart TD
server["agate-server<br/>корень композиции"]
proxy["agate-proxy<br/>плоскость данных"]
policy["agate-policy<br/>решения о контенте/авторизации"]
audit["agate-audit<br/>журнал прозрачности"]
crypto["agate-crypto<br/>криптоагильность (библиотека)"]
server --> proxy
server --> audit
server --> policy
audit --> crypto
classDef root fill:#0b7285,stroke:#0b7285,color:#fff;
class server root;
agate-server компонует остальные за их публичными портами. agate-proxy и
agate-policy никогда не зависят друг от друга напрямую — их словари
встречаются только в корне композиции, который переводит между ними.
agate-audit зависит от agate-crypto ради стратегий хеширования и подписи.
Единственный шов принятия решений¶
Вся система держится на одном шве в прокси: для каждого инспектированного события (или каждой буферизованной логической единицы, такой как полный вызов инструмента) производится вердикт.
flowchart LR
ev["Инспектированное событие"] --> seam{{"событие → вердикт"}}
seam --> allow["Allow — переслать без изменений"]
seam --> deny["Deny — заблокировать (RUN_ERROR)"]
seam --> transform["Transform — переслать изменённым"]
seam --> buffer["Buffer — нужно больше кадров"]
seam --> terminate["Terminate — завершить run"]
seam -.->|спрашивает| policy["agate-policy"]
seam -.->|"записывает (событие, вердикт)"| audit["agate-audit"]
Читайте дальше¶
- Архитектура и DDD — правило зависимостей, решение об отсутствии общего ядра и строительные блоки DDD (объекты-значения, сущности, агрегаты, фабрики, порты) в применении к Rust.
- Модель угроз — что защищает прокси, от кого и топология развёртывания.
- Ограниченные контексты — по странице на крейт: crypto · audit · proxy · policy · server.