Понятие архитектурного стиля. Классификация архитектурных стилей
Архитектура может соответствовать некоторому архитектурному стилю.
Большинство архитектур построены на основе систем, использующих похожие решения. Сходство может быть определено как архитектурный стиль, который, в свою очередь, можно рассматривать как особый вид паттерна (шаблона). Архитектурный стиль представляет собой кодификацию опыта проектирования ИТ-систем. Примеры архитектурных стилей включают распределённый стиль, стиль “каналы и фильтры”, стиль с централизованной обработкой данных, стиль, построенный на правилах, и т.д. Конкретная система может демонстрировать более одного архитектурного стиля.
Архитектурный стиль можно определить, как семейство систем в терминах шаблона организации структуры. Точнее, архитектурный стиль определяет номенклатуру компонентов и типов соединительных звеньев, а также набор условий, в соответствии с которыми они могут соединяться. Архитектурный стиль определяется набором типов компонентов, во время счёта выполняющих некоторую функцию, топологической раскладкой компонентов с указанием их взаимосвязей во время выполнения, набором семантических ограничений, набором соединителей, служащих средой сообщения, координации и сотрудничества между компонентами.
Иногда вместо термина архитектурный стиль используется термин архитектурный паттерн (шаблон). Однако следует отметить наличие принципиальных различий между архитектурными стилями и паттернами. Паттерн – это фрагмент кода на конкретном языке программирования, а архитектурный стиль – это подход к проектированию.
Несмотря на многочисленные попытки до сих пор отсутствуют стандартные языки описания архитектур.
Принято выделять 12 базовых архитектурных стилей, которые делятся на 5 групп:
· потоки данных (Data Flow Systems);
· вызов с возвратом (Call-and-Return Systems);
· независимые компоненты (Independent Component Systems);
· централизованные данные (Data-Centric Systems);
· виртуальные машины (Virtual Machines).
Рис. Классификация архитектурных стилей
К системам, работающим по принципу потоков данных, относят системы двух архитектурных стилей: системы пакетно-последовательной обработки (Batch Sequential Systems) и системы типа конвейеры и фильтры (Pipe and Filter Architecture).
К вызову с возвратом относят 4 архитектурных стиля: программа-сопрограммы (Main Program and Subroutines), объектно-ориентированные системы (Object-Oriented Systems), клиент-серверные системы (Client-Server Systems), иерархические многоуровневые системы (Hierarchically Layered Systems).
Системы, работающие по принципу вызова с возвратом:
К ним обычно относят системы, построенные по принципу программа-сопрограммы, клиент-серверные системы, объектно-ориентированные системы и иерархические многоуровневые системы. Самым старым архитектурным стилем, относящимся к данной группе, является архитектурный стиль типа программа-сопрограммы. Программа выполняет функции контроллера, который управляет вычислительным процессом, в то время как функциональность реализуется в сопрограммах. Отличительной особенностью данного стиля является то, что программа имеет только одну нить управления. Данный стиль является реализацией идей структурного программирования. В качестве разновидности стиля программа-сопрограммы можно выделить архитектуры типа ведущий-ведомый (Master-Slave Architecture). Обычно такие архитектуры не выделяют в отдельный стиль и рассматривают как параллельную версию стиля программа-сопрограммы. Отличительной особенностью данных архитектур является то, что основная программа и сопрограммы работают одновременно (параллельно). В данном случае на основную программу (ведущий) возлагаются функции диспетчеризации процесса вычислений. Сопрограмма (ведомый) получает задание, выполняет его, а по завершению задания запрашивает ведущего о новом задании. Данная архитектура может реализовываться как в рамках многопроцессорных систем, так и в сетевой среде с произвольной топологией.
Клиент-серверные системы можно рассматривать как специальный случай стиля программа-сопрограммы. Основное различие состоит в том, что клиент и сервер находятся на разных хостах, хотя, в принципе, клиент и сервер могут работать на одном хосте. Клиент – это процесс, который формирует запрос на обслуживание. Сервер – это процесс, который реализует сервис. В простейшем случае клиент посылает серверу команды и ожидает окончания выполнения запроса.
Объектно-ориентированные системы также поддерживают механизмы наследования и/или делегирования.
Одна из проблем, возникающих в процессе функционирования объектно-ориентированных систем, состоит в том, что объект должен знать, где находится тот объект, с которым он хочет взаимодействовать и какими интерфейсами он обладает. Привязка к объекту может осуществляться либо в статике, либо в динамике. Основное достоинство объектно-ориентированных систем – возможность сокрытия данных от пользователя. Это позволяет изменять внутреннее представление объекта, не уведомляя об этом клиента. Другим достоинством объектно-ориентированных систем является то, что они естественным образом поддерживают процесс распараллеливания вычислений.
Объектно-ориентированная система может рассматриваться как коллекция взаимодействующих агентов. Каждый объект при этом может быть как клиентом, так и сервером. Объекты могут располагаться в одном процессе, храниться в библиотеках, находиться в разных процессах, работающих на одном хосте и, наконец, располагаться на разных хостах.
Системы, работающие по принципу независимых компонентов. К ним обычно относят системы взаимодействующих процессов и системы, управляемые событиями. Взаимодействующие процессы и системы, управляемые событиями, объединяет то, что в обоих случаях используется механизм неявного вызова оператора. Другими словами, вызывающий и вызываемый оператор могут существовать независимо и могут быть распределены по разным хостам. В самом общем виде идея взаимодействующих процессов состоит в том, что имеется множество независимых процессов, которые обмениваются сообщениями. Эта модель была предложена и разработана ещё в 1970-х гг. Хоаром и имеет множество вариантов реализаций, наиболее популярными из которых являются микроядерные архитектуры, параллельные системы, основанные на обмене сообщениями, а также мультиагентные системы.
Системы, работающие по принципу централизованных данных (репозитарии). К ним относят системы, основанные на использовании централизованной базы данных и системы, использующие принцип классной доски. Репозитарии иногда называют также системами с централизованным хранением данных (Data-centric systems).
Характерной особенностью архитектурных стилей, принадлежащих рассматриваемой группе, является наличие централизованного хранилища информации, содержимое которого общедоступно. Централизованное хранилище используется как для хранения данных, так и метаданных (знаний о данных). Централизованное хранилище обеспечивает удобный доступ к данным и метаданным.
Виртуальные машины
К системам, работающим по принципу виртуальной машины, относят интерпретаторы и системы, основанные на правилах.
Виртуальная машина представляет собой эмулятор, который работает поверх аппаратной и (или) программной настройки и обеспечивает программный интерфейс, в общем случае отличный от программного интерфейса той платформы, на которой он работает.
Если рассматривать ИТ-систему как многослойную структуру, то виртуальная машина образует внешний слой, отвечающий за взаимодействие с клиентскими приложениями. Можно выделить следующие типовые варианты использования интерпретаторов: отладка программного обеспечения, предназначенного для работы на других, например контроллерных платформах; запуск программ, написанных для одной операционной системы (ОС) под управлением другой ОС, например для запуска приложений для Linux на платформе Windows; интерпретаторы команд; интерпретаторы некоторого языка, в качестве которого может выступать либо скриптовый язык, либо язык высокого уровня, либо некоторый специальный (доменно-ориентированный) язык.
Использование интерпретаторов в составе систем разработки важно прежде всего для разработки ПО встроенных систем. В этом случае интерпретатор представляет собой программную модель целевой системы. Этот подход повсеместно используется при разработке и отладке программного обеспечения, как правило, для встроенных систем.
Дата добавления: 2015-11-10; просмотров: 10462;