Архитектура корпоративных приложений

Что такое архитектура ?

Что такое архитектура ?

А попробуем рассмотреть на примере

Пример: Задача аренды авто

Пример

Вначале у вас ничего нет.
У вас есть программа которая ничего не делает

  • Бесконечная производительность
  • Бесконечная масштабируемость
  • Абсолютная расширяемость
  • Абсолютная поддержка
  • Нет багов

Что же делать?

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)
  • децентрализованный контроль над языками и данными.

Плюсы

  • писать и поддерживать небольшие сервисы всегда проще, чем большие.
  • чем меньше кода, тем легче уместить его в голове
  • разные сервисы могут разрабатываться разными командами
  • разные микросервисы могут быть написаны на разных языках
  • испоьзование "правильного" и лучшего инструмента для конкретной задачи

Resilient architecture

Цена ошибки

Системные ошибка могут обходится компаниям очень дорого

Что делать ?

  • прекратить предотвращать ошибки
  • дружите с ошибками
  • уменьшать время на восстановление после ошибок
  • улучшать утилиты и сервисы для анализа ошибок

Устойчивая архитектура

  • повышение всевозможного логирования
  • использование устойчивых моделей
  • дружить с хаосом
  • смотреть за ошибками когда они произойдут
  • измерять все, что можно измерить

Шаблоны устойчивой архитектуры

  • timeouts
  • retries
  • bulkheads
  • circuit breakers

DDD

Domain-Driven Design (Проблемно-ориентированное проектирование)

DDD

это набор принципов и схем, направленных на создание оптимальных систем объектов. ... ... ...

DDD Основные моменты

  • Домен — предметная область, к которой применяется разрабатываемое программное обеспечение.
  • Модель — описывает отдельные аспекты области и может быть использована для решения проблемы.
  • Язык описания — используется для единого стиля описания домена и модели.

Архитектура тестов

Применимы подходы к архитектуре, как и для любого другого кода.

При этом в тестах не считается плохой практикой дублирование кода.

Архитектура тестов

Универсальные правила написания (четырёхфазные):

  • подготовка
  • выполнение
  • проверка
  • очистка

Архитектура инфраструктуры разработки

Вопросы ?