Архитектура корпоративных приложений
Что такое архитектура ?
А попробуем рассмотреть на примере
Пример: Задача аренды авто
Пример
Вначале у вас ничего нет.
У вас есть программа которая ничего не делает
- Бесконечная производительность
- Бесконечная масштабируемость
- Абсолютная расширяемость
- Абсолютная поддержка
- Нет багов
Layered Architecture
(Слоеная архитектура)
Onion Architecture
(Луковая архитектура)
Решаемые проблемы
- Упрощение системы
- Упрощение понимания
- Возможность тестирования
- Безболезненная замена слоёв и модулей
- Повторное использование частей кода
Цель архитектуры
снижение сложности системы путём введения абстракций и разграничения полномочий.
Снижение сложности системы
- Декомпозиция
- Введение абстракций
- Выделение слоёв
Декомпозиция
- нет циклических зависимостей
- не более 7 элементов на уровне
- функциональное разделение
Введение абстракций
- Железо
- Прошивка
- Ассемблер
- Ядро
- Операционная система
Введение слоев
Один из примеров - MVC - Model View Controller
- Слой данных
- Слой логики
- Слой представления
MVC - Model View Controller
Способы описания Архитектуры
- специализированные языки описания
- UML - Unified Modeling Language
UML-диаграмма
Инструменты
- draw.io
- Dia
- Microsoft Office Visio
- LibreOffice - Draw
- ...
Двухзвенная архитектура
- Клиент - СУБД
- Клиент - Сервер
Плюсы:
- вся логика по обработке запросов выполняется в единственном процессе
- разделение на классы функции модули производится в одном месте
- приложение легко запускается и тестируется на машине разработчика
- используется стандартный процесс развертывания
- легкое горизонтальое масштабирование
Минусы:
- с течением времени, становится труднее сохранять хорошую модульную структуру
- изменения логики одного модуля могут влиять на код других модулей
- любое изменение требует пересборки всего монолита
- масштабировать приходится все приложение целиком, даже если это требуется только для одного модуля этого приложения
Микросервисная архитектура
Что это ?
- организация сервисов вокруг бизнес-потребностей
- автоматическое развертывание
- перенос логики от шины сообщений к приемникам (endpoints)
- децентрализованный контроль над языками и данными.
Плюсы
- писать и поддерживать небольшие сервисы всегда проще, чем большие.
- чем меньше кода, тем легче уместить его в голове
- разные сервисы могут разрабатываться разными командами
- разные микросервисы могут быть написаны на разных языках
- испоьзование "правильного" и лучшего инструмента для конкретной задачи
Цена ошибки
Системные ошибка могут обходится компаниям очень дорого
Что делать ?
- прекратить предотвращать ошибки
- дружите с ошибками
- уменьшать время на восстановление после ошибок
- улучшать утилиты и сервисы для анализа ошибок
Устойчивая архитектура
- повышение всевозможного логирования
- использование устойчивых моделей
- дружить с хаосом
- смотреть за ошибками когда они произойдут
- измерять все, что можно измерить
Шаблоны устойчивой архитектуры
- timeouts
- retries
- bulkheads
- circuit breakers
DDD
Domain-Driven Design (Проблемно-ориентированное проектирование)
DDD
это набор принципов и схем, направленных на создание оптимальных систем объектов.
...
...
...
DDD Основные моменты
- Домен — предметная область, к которой применяется разрабатываемое программное обеспечение.
- Модель — описывает отдельные аспекты области и может быть использована для решения проблемы.
- Язык описания — используется для единого стиля описания домена и модели.
Архитектура тестов
Применимы подходы к архитектуре, как и для любого другого кода.
При этом в тестах не считается плохой практикой дублирование кода.
Архитектура тестов
Универсальные правила написания (четырёхфазные):
- подготовка
- выполнение
- проверка
- очистка
Архитектура инфраструктуры разработки