Заметки: Архитектурный репозиторий
На этапе зарождения нового проекта будет хорошо, если в какой-либо базе знаний сохранится описание примерной архитектуры, и куда мы с ней должны прийти. Но практика показывает, что на это обычно не хватает времени.
В данной статье представлена попытка описания минимального архитектурного репозитория (Architecture as Code). Или как жить без выделенного архитектора в команде.
Инструменты
- git – основной принцип AaC.
- Writerside – система документации от JetBrains.
- PlantUML – поддержка диаграмм.
- C4 – архитектурная нотация.
- Mermaid – поддержка простых диаграмм.
- Скрипты и тулпинг
- Публикация (github/gitlab pages) – доступность в виде опубликованного сайта.
Ядро системы: Writerside
Данный бесплатный инструмент дает возможность просто организовать любой портал с документацией. Основные преимущества для архитектурного репозитория:
- Поддержка диаграмм С4 (и других схем)
- Богатый выбор разметки
- Поддержка инклюдов и переиспользование блоков документации (Single Source of Truth - SSOT)
- Плагины для IDE
Предлагаемая структура
- Структура команд
- Отдельная страница продуктовой команды
- Структура команды
- Общая архитектура. Например, C4 Диаграмма взаимодействия сервисов
- Список поддерживаемых сервисов
- ADR
- Инфраструктура
- Карта сети
- Сервера
Структура может быть сложнее и ветвистее, в зависимости от стадии развития команды.
Важные артефакты архитектуры на старте
- Схемы взаимодействия сервисов (на уровне C4 контейнеров)
- Физическая карта сети
- Описание сложных бизнес-процессов
- Верхнеуровневое описание сервисов
Тулинг
В данном репозитории можно отлично сохранять минимальные инструменты и скрипты, которые помогают визуализировать архитектуру.
Writerside/
cmd/
tool1/
tool2/
Makefile
go.mod
Примеры тулинга
Главная цель тулинга — автоматическое поддержание актуальности документации. Чем больше данных генерируется автоматически из кода или систем мониторинга, тем ценнее репозиторий.
- автоматическое построение карты сети из данных хостеров
- автоматическое построение сервисов из метрик метаданных appkit
- автоматическое построение межсервисного взаимодействия через HTTP на основе appkit
- построение техрадара на основе датасета
Почему не база знаний / wiki / confluence?
- Нет поддержки сложных диаграмм C4 и PlantUML (на достаточном уровне).
- Нет процессов принятия архитектурных изменений: git, merge request.
- Нет возможности сохранить рядом тулинг для работы с архитектурой.
- Нет атомарной истории изменений (у каждой статьи вместо одного коммита).
- В IDE создавать текст и диаграммы гораздо удобнее, чем в браузере.
Почему стоит начать прямо сейчас?
- Снизиться порог входа для нового члена команды
- Появится единственный источник истины (SSOT)
- Потому что “на потом” уже откладывали :)
- Даже если у вас 2 сервиса – начните сейчас, потом будет гораздо проще.
С чего начать?
- Описать оргструктуру и команды
- Расписать одну команду
- Попробовать сделать первый ADR
- Любой новый сервис описывать через MR
Подводные камни?
Нет времени– никогда и не появитсяСхема потеряет актуальность– измените процессы, чтобы внесение изменений в инфраструктуру было через Merge Requests.А зачем?– чтобы постоянно не рассказывать, как все устроено.
Пример структуры проекта во Writerside
Допустим, у нас появилась компания Sandbox, в которой есть три команды. Ниже предоставлен пример предлагаемой структуры:
- Sandbox – описание структуры компании (mindmap со ссылками)
- Команда админов – описание команды внутри (mindmap)
- Карта сети
- Команда платформы – описание команды внутри (mindmap), важные ссылки
- Сервисы – список сервисов команды с верхнеуровневым описанием
- Архитектура – архитектура сервисов
- Потоки данных
- ADR
- Команда фронтенда
- Команда мобильных приложений
- Техрадар
Интересно почитать
- https://archdays.ru/ – поискать доклады Архитектура как код
- https://www.jetbrains.com/writerside/ – создание документации для продуктов
- https://structurizr.com/ – DSL для C4
- https://github.com/jgraph/drawio – локальные диаграммы
- https://github.com/SEAFTeam/seaf-core – фреймворк от сбера