Примеры архитектурных стилей и моделей
Миллионы написанных за всю историю человечества книг можно (по разным способам классификации) условно разделить на 4, 7 или 36 сюжетных линий. Точно так же на современном этапе развития ПО успешно применяемых архитектур, обладающих полезными свойствами, не так уж и много и все они более или менее похожи друг на друга.
Как и в реальной архитектуре зданий — некоторые строения имеют абсолютно неповторимый облик, некоторые более или менее удачно копируют его, некоторые внешне вообще не имеют ничего общего со словом «архитектура», но, тем не менее, весьма функциональны с практической точки зрения.
Некоторые очень простые на первый взгляд архитектурные решения могут оказаться более функциональными, нежели сложные и, казалось бы, детально проработанные. И наоборот — сложные хорошо организованные структуры могут оказаться предпочтительнее из-за лекгости рефакторинга и последующего сопровождения. Рассмотрим наиболее распространенные архитектурные стили, используемые при разработке ПО [40].
Архитектура файл—сервер
Самой простой архитектурой для реализации является архитектура файл-сервер (рис. 17), но она же обладает и самым большим количеством недостатков, ограничивающих спектр решаемых ею задач. Простейшим случаем является случай, когда данные располагаются физически на том же компьютере, что и само приложение [411.
Клиент
(прикладная часть, управление БД, сетевой доступ)
Ч
о

Файл сервер
Клиент
(прикладная часть, управление БД, сетевой доступ)
Клиент
(прикладная часть, управление БД, сетевой доступ)
Рис. 17. Структура информационной системы с архитектурой файл-сервер
К существенным неудобствам, возникающим при работе с системой, построенной по такой архитектуре, можно отнести следующее:
- • трудности при обеспечении непротиворечивости и целостности данных;
- • существенная загрузка локальной сети передаваемыми данными;
- • в целом невысокая скорость обработки и представления информации;
- • высокие требования к ресурсам компьютеров. При этом возникают следующие ограничения:
- — невозможность организации равноправного одновременного доступа пользователей к одному и тому же участку базы данных;
- — количество одновременно работающих с системой пользователей не превышает пяти человек для ЛВС, построенной в соответствии со спецификацией ЮВаБеТ (скорость обмена данными до 10 Мб/с).
При всем этом система обладает одним очень важным преимуществом — низкой стоимостью.
Архитектура файл-сервер предусматривает концентрацию обработки на рабочих станциях. Основным преимуществом этого варианта является простота и относительная дешевизна. Подобное решение приемлемо, пока число пользователей, одновременно работающих с базой данных, не превышает 5—10 человек. При увеличении количества пользователей система может «захлебнуться» из-за перегруженности ЛВС большими потоками необработанной информации.
Сервер, как правило, самый мощный и самый надежный компьютер. Он обязательно подключается через источник бесперебойного питания, в нем предусматриваются системы двойного или даже тройного дублирования. В особо ответственных случаях можно подключить вместе несколько серверов так, что при выходе из строя одного из них в работу автоматически включится «дублер». Таким образом, при концентрации обработки данных на сервере надежность системы в целом ограничивается только материальными средствами, которые заказчики готовы вложить в техническое оснащение.
Решение по автоматизации учета и управления в корпоративных структурах предполагает распределенную обработку данных, организацию параллельных вычислений, глубокое разграничение уровней доступа, возможность выбора различных операционных систем и серверных платформ. Если бизнес не велик, подобное решение оптимально.
Общие недостатки файл-серверного подхода:
- • вся тяжесть вычислительной нагрузки при доступе к базе данных ложится на приложение клиента — при выдаче запроса на выборку информации вся база данных копируется на клиентское место, и выборка осуществляется на клиентском месте. В результате возрастает сетевой трафик и увеличиваются требования к аппаратным мощностям пользовательского компьютера;
- • в базе данных на файл-сервере гораздо проще вносить изменения в отдельные таблицы, минуя приложения. Все это приводит к низкому уровню безопасности — как с точки зрения хищения и нанесения вреда, так и с точки зрения внесения ошибочных изменений;
- • недостаточно развитый аппарат транзакций для локальных СУБД служит потенциальным источником ошибок как с точки
зрения одновременного внесения изменении в одну и ту же запись, так и с точки зрения отката результатов серий объединенных по смыслу в единое целое операций над базой, когда некоторые из них завершились неуспешно, а некоторые — нет.
Поскольку файл-серверная организация не содержат специальных приложений и сервисов, управляющих данными, а используются для этой цели файловые сервисы операционной системы, вся реальная обработка данных в таких СУБД осуществляется в клиентском приложении, и любые библиотеки доступа к данным в этом случае также находятся в адресном пространстве клиентского приложения. Поэтому при выполнении запросов данные, на основании которых выполняется такой запрос, должны быть доставлены в то же самое адресное пространство клиентского приложения. Это и приводит к перегрузке сети при увеличении числа пользователей и объема данных, а также грозит иными неприятными последствиями, например разрушением индексов и таблиц. Недаром до сих пор популярны утилиты для «ремонта» испорченных файлов настольных СУБД.
Клиент-серверная модель (client—server)
Недостатки архитектуры файл-сервер решаются при переводе приложений в архитектуру клиент—сервер, которая знаменует собой следующий этап в развитии СУБД [411.
Программы, расположенные на сервере, ожидают от клиентских программ запросы и предоставляют им свои ресурсы в виде данных (например, загрузка файлов посредством HTTP, FTP, BitTorrent или потоковое мультимедиа) или сервисных функций (например, работа с

Рабочая станция (Клиент)
Рабочая станция (Клиент)
Рис. 18. Клиент-серверная модель
электронной почтой, общение посредством систем мгновенного обмена сообщениями, просмотр уеЬ-страниц).
БД в этом случае помещается на сетевом сервере, как и в архитектуре файл-сервер, однако прямого доступа к базе данных (БД) из приложений не происходит. Функция прямого обращения к БД осуществляет специальная управляющая программа — сервер БД (БОЬ-сервер), поставляемый разработчиком СУБД [42].
Характерной особенностью архитектуры клиент—сервер является перенос вычислительной нагрузки на сервер базы данных (8()Ь-сер-вер) и максимальная разгрузка приложения клиента от вычислительной работы, а также существенное укрепление безопасности данных — как от злонамеренных, так и просто ошибочных изменений (рис. 18).
Трехуровневая модель
Это расширенный вариант клиент-серверной модели. Архитектурная модель программного комплекса, предполагающая наличие в нем трех компонентов: клиентского приложения (обычно называемого «тонким клиентом» или терминалом), сервера приложений, к которому подключено клиентское приложение, и сервера базы данных, с которым работает сервер приложений [41].
Они могут взаимодействовать друг с другом по следующей схеме. Представление данных — на стороне клиента. Прикладной компо-

(пользовательский интерфейс)
Рис. 19. Трехзвенная архитектура
нент — на выделенном сервере приложений (как вариант, выполняющем функции промежуточного ПО). Управление ресурсами — на сервере БД, который и представляет запрашиваемые данные.
Идея сервера приложений заключается в разбиении приложения на две части — собственно клиента и сервера данного приложения. Причем сервер приложений может быть один на много приложений. Клиенты общаются с сервером приложений (или с серверами приложений, никто не запрещает иметь несколько серверов приложений). Клиенты посылают серверу приложений запросы, а получают ответы. Клиенты могут обратиться и непосредственно к серверу базы данных за теми или иными данными. Обращение за данными к серверу базы данных может производить и сервер приложений. Использование сервера приложений в трехзвенной архитектуре позволяет смягчить или свести на нет недостатки традиционной архитектуры клиент-сервер (рис. 19).
Blackboard (1997 г.)
Это платформа электронного обучения для управления виртуальной обучающей средой и обмена информацией студент—студент, студент-преподаватель, накопления и структурирования и управления доступом [43J.
Система обеспечивает единую интерактивную среду для обучения, взаимодействия, обмена информацией между обучаемыми или студентами и преподавателями и инструкторами вуза. Система позволяет управлять виртуальной обучающей средой, создавать электронные образовательные ресурсы, обеспечивать удаленный доступ к образовательным ресурсам учебного заведения, осуществлять контроль образовательного процесса, предоставлять платформы для курсов дистанционного обучения, накапливать, структурировать, управлять доступом, пополнять образовательную базу, а также предоставлять средства коммуникации и информирования участников.
Система позволяет автоматизировать следующие основные области деятельности вуза в образовательном процессе: подготовка образовательных материалов, дистанционное обучение, совместная научно-исследовательская деятельность, учет и контроль персональных критериев образовательного процесса, ведение нормативно-справочной информации, совместная работа удаленных членов образовательных проектов.
Front end and back end
База данных, к которой пользователи обращаются не напрямую, а через специально разработанное приложение в противоположность тому подходу, когда приложение использует встроенную базу данных или обращается к данным путем низкоуровневых манипуляций (например, с использованием SQL-запросов) [44]. База данных Back end хранит данные и не содержит элементов программного приложения для конечного пользователя, таких как хранимые запросы, формы, макросы или отчеты.
Все что связано с написанием серверных скриптов — back end.
Создание клиентской части — Front end.
Peer-to-peer
Одноранговая, децентрализованная или пиринговая (равный к равному) сеть — это оверлейная компьютерная сеть, основанная на равноправии участников. Часто в такой сети отсутствуют выделенные серверы, а каждый узел (peer) является как клиентом (рис. 20), так и выполняет функции сервера. В отличие от архитектуры клиент-сервера, такая организация позволяет сохранять работоспособность сети при любом количестве и любом сочетании доступных узлов. Участниками сети являются пиры [45J.

Server-based

P2P-network
Рис. 20. Peer-to-peer и клиент-серверная архитектуры
Пайпы и фильтры (pipes and filters)
Очень простая и очень надежная структура с последовательной обработкой информации. Состоит из некоторого набора компонентов, называемых фильтрами, которые получают информацию из некоторых соединяющих набор фильтров структур-трубопроводов

Рис. 21. Архитектура «пайпы и фильтры»:
Pump — источник данных в системе; фильтр (filter) — получает информацию от источника (вначале от внешнего — pump), затем через Pipe от предыдущего фильтра. После обработки поток данных отправляется дальше; Pipe — осуществляет передачу данных от источника информации к фильтру или между фильтрами в системе; Sink — приемник обработанного фильтрами потока данных
(pipes). Часто применяется в Unix-программах, компиляторах и синтаксических анализаторах [46].
Чаше всего схема обработки последовательная, хотя возможны и варианты разветвления потоков, как показано на рис. 21.
Данная архитектура обладает рядом существенных недостатков. Так, для большинства применений фильтр должен полностью получить весь пакет данных до начала их обработки. Поэтому возможны существенные временные задержки, связанные с накоплением данных в буфере, или потеря данных в случае переполнения буфера. И еще важный фактор — пайпы обычно проектируют для передачи одного вида данных. Таким образом, при необходимости передавать данные разных типов может возникнуть необходимость в создании нескольких видов пайпов для связи между фильтрами.
Сервис-ориентированная архитектура
(SOA, англ, service-oriented architecture)
Модульный подход к разработке программного обеспечения, основанный на использовании распределенных, слабо связанных (англ. loose coupling) заменяемых компонентов, оснащенных стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам (рис. 22) [47J.
Интерфейсы компонентов в сервис-ориентированной архитектуре инкапсулируют детали реализации (операционную систему, платформу, язык программирования) от остальных компонентов, таким образом обеспечивая комбинирование и многократное использова-
Пользователи

Клиент
Встроенный Выделенный Web
ERP |
|
Mobile |
Desktop |
Portal |
Internet |
|||
Сервер

Рис. 22. Сервис-ориентированная архитектура
ние компонентов для построения сложных распределенных про-граммных комплексов, обеспечивая независимость от используемых платформ и инструментов разработки, способствуя масштабируемости и управляемости создаваемых систем.
Архитектура не привязана к какой-то определенной технологии. Она может быть реализована с использованием широкого спектра технологий, включая такие технологии, как REST, RPC, DCOM, CORBA или веб-сервисы. SOA может быть реализована, используя один из этих протоколов и, например, может использовать дополнительно механизм файловой системы для обмена данными.
Главное, что отличает SOA, — это использование независимых сервисов с четко определенными интерфейсами, которые для выполнения своих задач могут быть вызваны неким стандартным способом, при условии, что сервисы заранее ничего не знают о приложении, которое их вызовет, а приложение не знает, каким образом сервисы выполняют свою задачу.
SOA также может рассматриваться как стиль архитектуры информационных систем, который позволяет создавать приложения, построенные путем комбинации слабосвязанных и взаимодействующих сервисов. Эти сервисы взаимодействуют на основе какого-либо строго определенного платформенно-независимого и языково-независимого интерфейса (например, WSDL). Определение интерфейса скрывает языково-зависимую реализацию сервиса. К примеру, сервисы, написанные на С#, работающие на платформах .Net, и сервисы на Java, работающие на платформах Java ЕЕ, могут быть с одинаковым успехом вызваны общим составным приложением. Приложения, работающие на одних платформах, могут вызывать сервисы, работающие на других платформах, что облегчает повторное использование компонентов.
SOA может поддерживать интеграцию и консолидацию операций в составе сложных систем, однако SOA не определяет и не предоставляет методологий или фреймворков для документирования сервисов.
Языки высокого уровня, такие как BPEL, или спецификации, такие как WS-CDL и WS-Coordination, расширяют концепцию сервиса, предоставляя метод оркестрации, для объединения мелких сервисов в более обширные бизнес-сервисы, которые, в свою очередь, могут быть включены в состав технологических процессов и бизнес-процессов, реализованных в виде составных приложений или порталов.
Архитектура, управляемая событиями
(Event-driven architecture — EDA)
Это концепция управления корпоративной информационной системой на основе событий, возникающих в бизнес-процессе. Доступ к БД в EDA базируется на использовании централизованного способа обращения к распределенным базам данных. Все запросы клиентов поступают на вход SQL-шлюза, который транслирует SQL-запросы в унифицированный формат и перенаправляет их к серверам БД. Взаимодействие с ними возможно как через набор общих API, так и через ODBC-интерфейс (рис. 8). Использование SQL-шлюза обеспечивает доступ к данным в разнородных многозвенных системах, где множество приложений параллельно обращаются к источникам данных различного формата.
Событие можно определить как «существенное изменение состояния» [48J. Например, когда покупатель приобретает автомобиль, состояние автомобиля изменяется с «продаваемого» на «проданный». Системная архитектура продавца автомобилей может рассматривать это изменение состояния как событие, создаваемое, публикуемое, определяемое и потребляемое различными приложениями в составе архитектуры.
Этот архитектурный стиль может применяться при разработке и реализации приложений и систем, передающих события среди слабосвязанных программных компонентов и служб. Система, управляемая событиями, обычно содержит источники событий (или агентов) и потребителей событий (или стоков). Стоки ответственны за ответную реакцию, как только событие возникло. Реакция может полностью или не полностью создаваться стоком. К примеру, сток может отвечать лишь за фильтрацию, преобразование и доставку события другому компоненту, либо он может создать собственную реакцию на это событие. Создание приложений и систем в рамках архитектуры, управляемой событиями, позволяет им быть сконструированными способом, способствующим лучшей интерактивности, поскольку системы, управляемые событиями, по структуре более ориентированы на непредсказуемые и асинхронные окружения (рис. 23).

Рис. 23. Событийно-управляемая архитектура
REST
REST (сокр. от англ. Representational State Transfer — «передача репрезентативного состояния») — метод взаимодействия компонентов распределенного приложения в сети Интернет, при котором вызов удаленной процедуры представляет собой обычный НТТР-запрос (обычно GET или POST; такой запрос называют REST-запрос), а необходимые данные передаются в качестве параметров запроса. Этот способ является альтернативой более сложным методам, таким как SOAP, CORBA и RPC [49J.
В широком смысле REST означает концепцию построения распределенного приложения, при которой компоненты взаимодействуют наподобие взаимодействия клиентов и серверов во Всемирной паутине.
Хотя данная концепция лежит в самой основе Всемирной паутины, термин REST был введен Роем Филдингом (англ. Roy Fielding), одним из создателей протокола HTTP, лишь в 2000 г. Филдинг описал концепцию построения распределенного приложения, при которой каждый запрос (REST-запрос) клиента к серверу содержит в себе исчерпывающую информацию о желаемом ответе сервера (желаемом репрезентативном состоянии), и сервер не обязан сохранять информацию о состоянии клиента («клиентской сессии»).
Необходимые условия для построения распределенных REST-приложений:
- • клиент-серверная архитектура;
- • сервер не обязан сохранять информацию о состоянии клиента;
- • в каждом запросе клиента должно явно содержаться указание о возможности кэширования ответа и получения ответа из существующего кэша;
- • клиент может взаимодействовать не напрямую с сервером, а с произвольным количеством промежуточных узлов. При этом клиент может не знать о существовании промежуточных узлов, за исключением случаев передачи конфиденциальной информации;
- • унифицированный программный интерфейс сервера.
Приложения, не соответствующие приведенным условиям, не
могут называться REST-приложениями. Если же все условия соблюдены, то приложение получит следующие преимущества:
- • надежность (за счет отсутствия необходимости сохранять информацию о состоянии клиента, которая может быть утеряна);
- • производительность (за счет использования кэша);
- • масштабируемость;
- • прозрачность системы взаимодействия, особенно необходимая для приложений обслуживания сети;
- • простота интерфейсов;
- • портативность компонентов;
- • легкость внесения изменений, способность эволюционировать, приспосабливаясь к новым требованиям.
Model Driven Architecture
Model Driven Architecture (MDA, архитектура, управляемая моделью) — это архитектурный подход к построению многокомпонентного ПО, основанный на разработке независимого от платформы и языка программирования представления системы (модели) с последующим переходом к исходному коду системы через автоматизированную генерацию кода. Разработка MDA началась в 2000 г. Предпосылкой к разработке являлся тот факт, что уже к концу 90-х годов прошлого столетия было создано большое количество технологий и протоколов для создания распределенных приложений. В качестве примеров можно привести COM/DCOM, CORBA, Java/RMI, ХМL/SOAP/RPC и др. Большинство таких технологий созданы зависимыми от платформы, не все из них были описаны в виде стандарта. Это создавало большие проблемы при разработке ПО и интеграции компонент в единую инфраструктуру 150, 51J.
Основной целью разработчиков MDA являлось создание архитектурного подхода, позволяющего снизить риск, вызванный различиями между и технологиями разработки программных систем и платформами. Для решения этой задачи в MDA вводятся понятия модели, зависимой от платформы (Platform Specific Model (PSM)), и модели, независимой от платформы (Platform Independent Model (PIM)). MDA предполагает создание PIM и последующий переход к PSM с использованием специализированных средств. Кроме того, возможен переход от одной PSM модели к другой (рис. 24).
Консорциум OMG как разработчик MDA не предоставляет никаких программных средств для обеспечения перехода от модели к модели. Предполагается, что они будут реализованы силами сторонних разработчиков.
Фактически, MDA — это концепция разработки, поддержанная группой стандартов (UML, MOF, CWM и XMI), разработанных OMG. Эти стандарты накладывают требования, которым должны удовлетворять модели, и предоставляют рекомендации для разработчиков сред создания ПО по MDA.

Рис. 24. MDA, архитектура, управляемая моделью
Meta Object Facility (MOF) — это мета-метамодель (модель для описания метамоделей). MOF состоит из четырех уровней, верхний из которых соответствует мета-метамодели. Третий уровень соответствует метамодели (например, UML). Второй уровень соответствует экземпляру UML модели, описывающей какую-либо систему. Самый нижний уровень отражает экземпляры моделируемых объектов.
Common Warehouse Model (CWM) — спецификация, определяющая метамодель для обмена экземплярами метаданных между различными средствами моделирования и информационными системами.
XML Metadata Interchange (ХМ1) — спецификация описывает отображение метамоделей, построенных согласно MOF в XML, который, в свою очередь, может являться основой для обмена метаданными. Совокупность стандартов MDA MOF достаточна для определения моделей и метамоделей без введения дополнительных уровней абстракции.
Model—view—controller
Model—view—controller (МУС, «модель—представление—поведение», «модель—представление—контроллер», «модель—вид—контроллер») предполагает разделение данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо [52j. Модель (Model) предоставляет данные предметной области представлению и реагирует на команды контроллера, изменяя свое состояние. Представление (View) отвечает за отображение данных предметной области (модели) пользователю, реагируя на изменения модели. Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.
Основная цель применения этой концепции состоит в разделении бизнес-логики {модели) от ее визуализации {представления, вида). За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения (рис. 25). В частности, выполняются следующие задачи:
- • к одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы;
- • не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных), для этого достаточно использовать другой контроллер',
- • ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо разрабатывают бизнес-логику. Поэтому возможно добиться того, что программисты, занимающиеся разработкой бизнес-логики {модели), вообще не будут осведомлены о том, какое представление будет использоваться.

Рис. 25. МУС, «модель—представление—поведение»
Контрольные вопросы
- 1. Перечислите архитектурные парадигмы.
- 2. Перечислите основные принципы ООП.
- 3. Используя основное определение архитетуры ПО, поясните место и значение принципов ООП при построении архитектуры.
- 4. Поясните основные отличия ООП и КОП.
- 5. Особенности реализации сервисов в СОП.
- 6. Перечислите и дайте краткую характеристику основных архитектурных стилей.
- 7. Приведите примеры использования архитектуры клиент—сервер.
- 8. Насколько надежны одноранговые сети? Приведите пример использования одноранговых сетей.
- 9. Можно ли считать сервис-ориентированную архитектуру расширением клиент-серверной архитектуры?
- 10. Приведите примеры технологий и протоколов, использующих МРА.