В этой статье мы расскажем про самые популярные и полезные паттерны архитектуры программного обеспечения.
Многоуровневая архитектура (n-уровневая)
Многоуровневая архитектура является одной из самых распространенных. Ее идея заключается в том, что компоненты с одинаковыми функциями организованы в горизонтальные слои, или уровни. В результате чего каждый уровень выполняет определенную роль в приложении.
В таком варианте архитектуры нет ограничения на количество уровней, которое может иметь приложение. При этом здесь также продвигается концепция разграничения полномочий. Многоуровневая архитектура абстрагирует представление о программном обеспечении как о едином целом; предоставляя достаточно информации для понимания ролей каждого уровня и взаимосвязи между ними. Стандартной реализацией такой модели может быть:
- Пользовательский интерфейс/уровень представления: отображение и запуск пользовательского интерфейса, отправка запросов серверному приложению.
- Уровень приложений: содержит уровень представления, уровень приложения, уровень предметной области и уровень хранения и управления данными.
- Уровень предметной области: этот уровень содержит всю логику предметной области, сущности, события и другие типы объектов, которые содержат логику предметной области.
- Уровень базы данных: это уровень данных, который используется для сохранения данных, которые будут использоваться сервером приложений.

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

Пример: электронная почта, обмен документами, банковские операции и т.д.
Event-Bus (событийно-ориентированная архитектура)
Это распределенная асинхронная архитектура для создания быстро масштабируемых реактивных приложений. Такая архитектура подходит для стека приложений любого уровня, от маленьких до сложных. Основная идея – асинхронная доставка и обработка событий.
Эта модель состоит из четырех основных компонентов:
- Источник события
- Получатель события
- Канал
- Шина событий
Источник публикует сообщение в определенный канал на шине событий. Получатель подписывается на определенный канал и получает сообщения, которые публикуются на канале, на который они подписаны.

Пример: электронная коммерция, разработка мобильных приложений, службы уведомлений и т.д.
Шаблон брокера
Этот шаблон можно использовать для структурирования распределенных систем с несвязанными компонентами, взаимодействующими посредством удаленных вызовов служб. Компонент брокер отвечает за координацию обмена данными между компонентами; таких как переадресация запросов, а также передача результатов и исключений.
Серверы публикуют свои возможности (услуги и характеристики) брокеру. Клиенты запрашивает услугу у брокера, и затем брокер перенаправляет клиента к подходящей услуге из своего реестра.

Пример: ПО брокера сообщений, Apache ActiveMQ, Apache Kafka, RabbitMQ, JBoss Messaging и т.д.
Микросервисный шаблон
В данной модели службы взаимодействуют с использованием синхронных протоколов, таких как HTTP/REST, или асинхронных протоколов, таких как AMQP (Advanced Message Queuing Protocol - расширенный протокол организации очереди сообщений). Службы можно разрабатывать и разворачивать независимо, и каждая служба будет иметь собственную базу данных. Согласованность данных между службами поддерживается с помощью шаблона Saga (последовательность локальных транзакций).

Пример: может быть реализован в различных вариантах использования, особенно в обширном конвейере данных
Одноранговая модель (Peer-to-Peer)
Здесь, как и в обычной клиент-серверной архитектуре, несколько клиентов взаимодействуют с центральным сервером. Но модель одноранговой сети (Р2Р) состоит из децентралированной сети одноранговых узлов.
В этом шаблоне узлы ведут себя и как клиенты, и как серверы. Одноранговые узлы могут функционировать как клиент, запрашивающий услуги у других одноранговых узлов, и как сервер, предоставляющий услуги другим одноранговым узлам.
Сети Р2Р распределяют рабочую нагрузку между одноранговыми узлами, и все они вносят и потребляют ресурсы внутри сети без необходимости использования централизованного сервера. Одноранговый узел может динамически менять свою роль с течением времени

Пример: файлообменные сети, мультимедийные протоколы PDTP, P2PTV, биткоин, блокчен и т.д.
Blackboard (доска объявлений)
Данный паттерн полезен при решении задач, для которых не известны детерминированные стратегии решения.
Все компоненты имеют доступ к «доске объявлений». Компоненты могут создавать новые объекты данных, которые в последствие будут добавлены на эту доску. Компоненты ищут определенные типы данных на доске и находят их по образцу, совпадающему с существующим источником знаний.
Этот шаблон состоит из трех основных компонентов:
- Доска объявлений: структурированная глобальная память, которая содержит объекты из пространства решений.
- Источник знаний: специализированные модули с собственным представлением решения
- Компонент управления: выбирает, настраивает и выполняет модули

Пример: быстрое распознавание, идентификация структуры белка, интерпретация сигналов звуколокатора, программы машинного обучения и т.д.