Один деплой, понятные модули внутри. Хорошая отправная точка для продукта с общей командой и общими данными.
arc-refer
Архитектурные и инженерные референсы
Готовые подборки
Новый продукт
Простая структура, границы и решения
Фоновые задачи
Поток работы, повторы и диагностика
Надёжная интеграция
Контракты, доступ и частичные сбои
Правила продукта отделены от интерфейса, базы и внешних сервисов. Внешние детали подключаются через адаптеры.
Последовательность небольших преобразований с понятным входом и выходом. Для импорта, медиа и обработки документов.
Основные действия работают на устройстве. Сервер синхронизирует изменения, а доступ к данным не исчезает вместе с сетью.
Компонент сообщает о случившемся, а подписчики реагируют независимо. Подходит, когда одно событие запускает несколько процессов.
Редактор управляет материалами, а читатель получает готовые или закешированные страницы и файлы через CDN.
Каждый компонент решает существующую задачу. Запас на выдуманное будущее не должен усложнять сегодняшний продукт.
Держи вместе то, что меняется вместе. Скрывай решения, которые остальной системе знать не нужно.
Важное правило должно выдерживать параллельные запросы. Проверка в интерфейсе не заменяет гарантию в хранилище.
Вход, выход, ошибки и совместимость описаны явно. Чужие данные становятся доверенными только после проверки.
Пользователь и компонент получают только нужные им действия над нужными данными. Отсутствие разрешения означает отказ.
Система наблюдает результат своих действий. Автоматическое решение имеет сигнал, цель и ограничения реакции.
Повтор одного намерения не создаёт второй платёж, заказ или другой лишний эффект.
Не жди бесконечно и не добивай упавший сервис повторами. У запроса есть общий бюджет времени.
После серии сбоев система временно перестаёт вызывать зависимость и осторожно проверяет её восстановление.
Один тяжёлый или сломанный сценарий не забирает все подключения, память и рабочие слоты.
Приложение сначала ищет готовое значение в кеше, а при промахе читает источник и заполняет кеш.
Изменение записи и намерение отправить событие сохраняются вместе. Отдельный обработчик доставляет событие позже.
Команды защищают правила изменения, а запросы отдают удобную модель чтения. Разделение начинается в коде, без обязательных двух БД.
Источником истины служит журнал принятых событий. Текущее состояние получается их последовательным применением.
Несколько локальных транзакций составляют длинную операцию. При частичном провале выполняются заранее определённые компенсации.
Система принимает работу с учётом своей ёмкости. Медленный потребитель не превращает очередь в бесконечное хранилище.
Новая реализация перехватывает отдельные возможности старой. Переезд проходит небольшими проверяемыми шагами.
Приложение разрешает ограниченную операцию, а большой файл передаётся прямо в объектное хранилище.
Сохрани контекст, выбор и последствия важного решения, чтобы через полгода не придумывать его причины заново.
Сначала покажи людей и соседние системы, затем приложения и хранилища. Углубляй схему только там, где это помогает.
Задай измеримую цель качества для важного сценария. Сто процентов доступности не должны быть неявным обещанием.
По сигналам работающей системы можно понять, что сломалось, кого затронуло и где искать причину.
Резервная копия полезна, если из неё можно вернуть работающий продукт за приемлемое время и с приемлемой потерей данных.
Сначала добавь новый путь рядом со старым, перенеси потребителей и данные, затем удали старый. Релиз не требует мгновенного общего переключения.