November 11, 2023

Конспект книги "Фундаментальный подход к программной архитектуре" Ричардс, Форд

Книга поделена на 3 основные части:

  • основы;
  • архитектурные стили;
  • технические приёмы и гибкие навыки.

Основы

В данной части авторы делают упор на том, что весь процесс проектирования архитектуры - это поиск компромиссов. Нет правильных или неправильных архитектур. Всё зависит от требований и общего контекста.

В архитектуре нет верных или неверных ответов, есть только компромиссы. Всегда стремитесь не к лучшей, а к наименее худшей архитектуре.

Также затрагиваются эксплуатационные и структурные свойства архитектуры.

Эксплуатационные свойства:

  • Доступность - время доступности системы. Если предполагается работа 24/7 - необходимо сделать все возможное для быстрого восстановления работоспособности;
  • Бесперебойность - способность аварийного восстановления;
  • Производительность - включает стресс-тестирование, анализ пиковых нагрузок, времени отклика. Иногда для подтверждения необходимого уровня производительности требуются длительные проверки на протяжении нескольких месяцев;
  • Восстанавливаемость - скорость выхода системы из аварийный ситуаций. Влияет на стратегию резервного копирования;
  • Надёжность и безопасность - потребность в безотказной работе системы;
  • Робастность - способность к обработке ошибок в ходе выполнения программы. Также устойчивость при отключении от интернета, от сети или при аппаратном сбое;
  • Масштабируемость - работоспособность системы при росте числа пользователей.

Структурные свойства:

  • Конфигурируемость - возможность лёгкого изменения конфигурационных свойств системы через UI;
  • Расширяемость - насколько важно иметь возможность наращивать функциональность системы;
  • Инсталлируемость - простота установки на все необходимые платформы;
  • Возможность многократного использования - возможность переиспользования общих компонентов в нескольких продуктах;
  • Локализуемость - возможность поддержки нескольких языков в системе;
  • Сопровождаемость - легкость внесения изменений в систему;
  • Переносимость - потребность запуска системы на более чем одной платформе;
  • Поддерживаемость - уровень технической поддержки, требуемой для работы с приложением;
  • Обновляемость - способность просто и быстро обновиться с прежней версии на актуальную.

Далее авторы следуя основной концепции своей книге о том, что архитектура - это компромиссы, показывают пример того, как выявить максимально важные архитектурные свойства на примере предметной области. Например:

  • Бизнес планирует делать слияния и поглощения - нужно уделить внимание масштабируемости, адаптируемости, расширяемости;
  • Бизнесу важны сроки выпуска - уделите внимание на гибкость, тестируемость, развертываемость;
  • Бизнес уделяет внимание удовлетворению запросов пользователей - сконцентрируйтесь на производительности, доступности, отказоустойчивости, тестируемости, развёртываемости, гибкости, безопасности;
  • Бизнесу важна конкурентноспособность - сделайте акцент на гибкости, тестируемости, развертываемости, масштабируемости, доступности, отказоустойчивости;
  • Бизнес ограничен в сроках и бюджетах разработки - сфокусируйтесь на простоте и реализуемости.

Помните главный принцип - стремитесь к наименее худшей архитектуре.

Архитектурные стили

Во второй части авторы описывают стили взаимоотношения компонентов, присущие им архитектурные свойства.

Основные приведённые архитектурные стили:

  • Многоуровневый - стандартный архитектурный стиль, выделяющий основные компоненты - frontend, backend, БД. Отлично подходит для небольших приложений или приложений с простой бизнес-логикой. Также может использоваться как стартовая архитектура когда разработка уже должна быть начата, а до конца сформулированного архитектурного решения ещё нет;
  • Конвейерный - стиль на основе каналов и фильтров, отлично подходит для обработки данных;
  • Микроядерный - отлично подходит для приложений, которые поставляются как коробочный продукт. Логика приложения разделена между ядром и подключаемыми компонентами - плагинами. Ядро - это минимальная функциональность, необходимая для работы системы. А плагины уже дополняют эту функциональность;
  • Сервисный - логика приложения распределена между отдельно-развёртывающимися сервисами. Пользовательский интерфейс и БД также разворачиваются отдельно. Зачастую, БД является общей для всех сервисов;
  • Событийный - используется для создания высокопроизводительных масштабируемых приложений. Состоит из отдельных компонентов, которые асинхронно получают и обрабатывают события;
  • Пространственный - используется для решения проблем, связанных с высокой масштабируемостью, адаптируемостью и высоким уровнем паралеллизма;
  • Оркестрированный сервис-ориентированный - основная концепция -переиспользование, которое привело к проблеме высокой связанности;
  • Микросервисный - разделение по принципу ограниченного контекста. Каждый сервис деплоится отдельно и имеет свою БД.

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

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

Оценочная таблица архитектурных стилей

Технические приёмы и soft-скиллы

В третьей части авторы рассказывают про способы и приёмы документирования архитектуры, работу с рисками и компромиссами при проектировании архитектуры. Подробно разбирается концепция ADR - architecture decision record.

Также уделяется время развитию основных soft-скиллов для архитекторов:

  • навыки фасилитации;
  • навыки переговоров;
  • управление командой.

Советы от авторов по развитию в качестве архитектора:

  • делать упор на развитие в ширь, а не в глубь. Лучше узнать о большем количестве технологий с меньшей степенью погружённости, чем стать специалистом одной области;
  • использовать правило 20 минут - тратить минимум 20 минут в день на изучение нового и поддержания своих знаний в актуальном состоянии.

Мои выводы

Книга однозначна будет очень полезна если вы интересуетесь и хотите развиваться в архитектуре. Считаю, что она относится к разряду книг, которые нужно периодически перечитывать. Приобретая новые знания можно по-новому взглянуть на описанные здесь технические концепции.

Моя оценка 5/5.