Из этой статьи вы узнаете об основных широко используемых типах программной архитектуры, их преимуществах и недостатках, узнаете, как выбрать архитектуру и рассчитать нагрузку при проектировании домена, познакомитесь с принципами масштабирования приложений и получите знания о том, что такое CAP-теорема и уровни изоляции транзакций.
Системный аналитик. Краткий гайд по профессии. Часть 1. Основы сетевых взаимодействий.
Системный аналитик. Краткий гайд по профессии. Часть 2. Сбор, анализ и документирование требований.
Системный аналитик. Краткий гайд по профессии. Часть 3. Архитектура приложений и их масштабирование, CAP-теорема и изоляция транзакций.
Данный текст является обзорной статьей и преимущественно ориентирован на новичков в IT-индустрии, предназначен для желающих познакомиться с профессией, узнать о ее содержании, основных принципах, практиках и инструментах, используемых в ней.
Типы программной архитектуры
Архитектурные стили можно разделить на два основных типа:
монолитные (с единым развертываемым блоком для всего кода)
распределенные (с несколькими развертываемыми блоками, взаимодействующими друг с другом по различным протоколам).
На изображении ниже представлены типы программной архитектуры.

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

Архитектура каждого слоя состоит из множества элементов. Эти элементы представляют собой части программного кода. Такие элементы называют компонентами.
Компоненты слоя представления реализуют функции, необходимые для того, чтобы пользователи могли взаимодействовать с приложением. Это компоненты пользовательского интерфейса и компоненты, обрабатывающие действия пользователя.
Компоненты слоя бизнес-логики реализуют ключевые функции программы и выражают соответствующую бизнес-логику. Это компоненты бизнес-процессов, обрабатывающих данные сущностей предметной области.
Компоненты слоя доступа к данным реализуют логику извлечения, записи, редактирования и удаления данных независимо от особенностей их хранения.
Компоненты слоя базы данных реализуют функцию хранения данных и представляют собой различные СУБД, платформы управления облачными хранилищами и другие источники данных.
Для того, чтобы выполнить ожидаемую пользователем функцию запрос может последовательно проходить все слои ПО сверху вниз (от слоя представления до слоя хранилища данных).
После выполнения запроса формируется ответ. Ответ может проходить все слои ПО снизу вверх (от слоя хранилища данных до слоя представления), чтобы передать пользователю результат выполнения функции.
Вместе с тем, запрос и ответ могут пропускать некоторые слои ПО. Обязательность прохождения через слой ПО определяется для каждого слоя по отдельности. Любой слой может быть открытым или закрытым.
Этот стиль подходит для небольших и простых приложений или веб-сайтов, особенно, когда бюджет и время ограничены. Благодаря своей простоте и доступности для разработчиков многоуровневая архитектура является одной из наименее затратных.
Однако, по мере роста в домене числа приложений, построенных по этому принципу, возникают проблемы с сопровождением, гибкостью, тестированием и развертыванием. Крупные приложения и системы, использующие многоуровневую архитектуру, могут нуждаться в более модульных подходах.
➕ Плюсы: простота и скорость разработки и тестирования.
➖ Минусы: низкая производительность под высокой нагрузкой, слабая масштабируемость, сложность модификации.
