Конспект книги "Фундаментальный подход к программной архитектуре" Ричардс, Форд
Книга поделена на 3 основные части:
Основы
В данной части авторы делают упор на том, что весь процесс проектирования архитектуры - это поиск компромиссов. Нет правильных или неправильных архитектур. Всё зависит от требований и общего контекста.
В архитектуре нет верных или неверных ответов, есть только компромиссы. Всегда стремитесь не к лучшей, а к наименее худшей архитектуре.
Также затрагиваются эксплуатационные и структурные свойства архитектуры.
- Доступность - время доступности системы. Если предполагается работа 24/7 - необходимо сделать все возможное для быстрого восстановления работоспособности;
- Бесперебойность - способность аварийного восстановления;
- Производительность - включает стресс-тестирование, анализ пиковых нагрузок, времени отклика. Иногда для подтверждения необходимого уровня производительности требуются длительные проверки на протяжении нескольких месяцев;
- Восстанавливаемость - скорость выхода системы из аварийный ситуаций. Влияет на стратегию резервного копирования;
- Надёжность и безопасность - потребность в безотказной работе системы;
- Робастность - способность к обработке ошибок в ходе выполнения программы. Также устойчивость при отключении от интернета, от сети или при аппаратном сбое;
- Масштабируемость - работоспособность системы при росте числа пользователей.
- Конфигурируемость - возможность лёгкого изменения конфигурационных свойств системы через UI;
- Расширяемость - насколько важно иметь возможность наращивать функциональность системы;
- Инсталлируемость - простота установки на все необходимые платформы;
- Возможность многократного использования - возможность переиспользования общих компонентов в нескольких продуктах;
- Локализуемость - возможность поддержки нескольких языков в системе;
- Сопровождаемость - легкость внесения изменений в систему;
- Переносимость - потребность запуска системы на более чем одной платформе;
- Поддерживаемость - уровень технической поддержки, требуемой для работы с приложением;
- Обновляемость - способность просто и быстро обновиться с прежней версии на актуальную.
Далее авторы следуя основной концепции своей книге о том, что архитектура - это компромиссы, показывают пример того, как выявить максимально важные архитектурные свойства на примере предметной области. Например:
- Бизнес планирует делать слияния и поглощения - нужно уделить внимание масштабируемости, адаптируемости, расширяемости;
- Бизнесу важны сроки выпуска - уделите внимание на гибкость, тестируемость, развертываемость;
- Бизнес уделяет внимание удовлетворению запросов пользователей - сконцентрируйтесь на производительности, доступности, отказоустойчивости, тестируемости, развёртываемости, гибкости, безопасности;
- Бизнесу важна конкурентноспособность - сделайте акцент на гибкости, тестируемости, развертываемости, масштабируемости, доступности, отказоустойчивости;
- Бизнес ограничен в сроках и бюджетах разработки - сфокусируйтесь на простоте и реализуемости.
Помните главный принцип - стремитесь к наименее худшей архитектуре.
Архитектурные стили
Во второй части авторы описывают стили взаимоотношения компонентов, присущие им архитектурные свойства.
Основные приведённые архитектурные стили:
- Многоуровневый - стандартный архитектурный стиль, выделяющий основные компоненты - frontend, backend, БД. Отлично подходит для небольших приложений или приложений с простой бизнес-логикой. Также может использоваться как стартовая архитектура когда разработка уже должна быть начата, а до конца сформулированного архитектурного решения ещё нет;
- Конвейерный - стиль на основе каналов и фильтров, отлично подходит для обработки данных;
- Микроядерный - отлично подходит для приложений, которые поставляются как коробочный продукт. Логика приложения разделена между ядром и подключаемыми компонентами - плагинами. Ядро - это минимальная функциональность, необходимая для работы системы. А плагины уже дополняют эту функциональность;
- Сервисный - логика приложения распределена между отдельно-развёртывающимися сервисами. Пользовательский интерфейс и БД также разворачиваются отдельно. Зачастую, БД является общей для всех сервисов;
- Событийный - используется для создания высокопроизводительных масштабируемых приложений. Состоит из отдельных компонентов, которые асинхронно получают и обрабатывают события;
- Пространственный - используется для решения проблем, связанных с высокой масштабируемостью, адаптируемостью и высоким уровнем паралеллизма;
- Оркестрированный сервис-ориентированный - основная концепция -переиспользование, которое привело к проблеме высокой связанности;
- Микросервисный - разделение по принципу ограниченного контекста. Каждый сервис деплоится отдельно и имеет свою БД.
В дальнейших статьях мы будем знакомиться с каждым архитектурным стилем более подробно, а пока представляю рейтинговую систему всех стилей по основным архитектурным свойствам от авторов книги.
Одна звезда в оценочной таблице означает, что данное архитектурное свойство плохо поддерживание в архитектуре, а пять звезд - что свойство является одной из самых сильных сторон архитектурного стиля.
Технические приёмы и soft-скиллы
В третьей части авторы рассказывают про способы и приёмы документирования архитектуры, работу с рисками и компромиссами при проектировании архитектуры. Подробно разбирается концепция ADR - architecture decision record.
Также уделяется время развитию основных soft-скиллов для архитекторов:
Советы от авторов по развитию в качестве архитектора:
- делать упор на развитие в ширь, а не в глубь. Лучше узнать о большем количестве технологий с меньшей степенью погружённости, чем стать специалистом одной области;
- использовать правило 20 минут - тратить минимум 20 минут в день на изучение нового и поддержания своих знаний в актуальном состоянии.
Книга однозначна будет очень полезна если вы интересуетесь и хотите развиваться в архитектуре. Считаю, что она относится к разряду книг, которые нужно периодически перечитывать. Приобретая новые знания можно по-новому взглянуть на описанные здесь технические концепции.