в облаке
Попробовать

Варианты архитектурных стилей

11.02.2010 11:08

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

 

  • Пакетная обработка данных
    • Каждый из компонентов генерирует некий результат работы, который передается на последующую обработку другим компонентам решения
    • Примеры: старые приложения, транзакционная обработка в финансовых приложениях.
  • Объектно-ориентированный стиль
    • Все компоненты решения представляют собой объекты, которые могут взаимодействовать друг с другом и размещаться в различных участках сети организации.
    • Преимущества: удобное объектное представление компонентов системы, инкапсуляция деталей реализации объектов внутри каждого объекта.
    • Примеры: COM, CORBA.
  • Организация по слоям
    • Функциональность и структура приложения разложена по слоям, у каждого слоя есть своя зона ответственности и API, через который осуществляется взаимодействие. Каждый слой полностью инкапсулирует некоторую подсистему, доступ верхних слоев к нижележащим подсистемам осуществляется исключительно через API.
    • Преимущества: хороший уровень абстракции, различные реализации слоев, унификация доступа через API.
    • Примеры: операционные системы, виртуальные машины.
  • Клиент-сервер
    • Общая функциональность приложения вынесена на единый сервер, множество клиентов знают о способе подключения к серверу и используют общие ресурсы или алгоритмы.
    • Преимущества: клиенты могут использовать мощности и ресурсы сервера, требуется обновление и обслуживание только одного центрального компонента.
    • Примеры: приложения использующие RDBMS
  • Конвейерная обработка данных (pipe and filters)
    • Вся функциональность решения разделена между несколькими компонентами, обрабатывающими общий поток данных: трубы (pipes) перенаправляют потоки данных, выполняют роль коннекторов, фильтры (filters) преобразуют поток данных.
    • Преимущества: повторное использование компонентов и изменение функциональности простой перекомпоновкой.
    • Примеры: UNIX shell и большинство программ для UNIX, например, файл загружается с FTP и перенаправляется в архиватор, в итоге получаем загрузку файла с FTP сразу в архив.
  • Системы основанные на правилах
    • Приложение состоит из пользовательского интерфейса, подсистемы принятия решений и базы знаний с фактами и правилами
    • Преимущества: помимо решения специфических задач, подобные системы поддаются легкому изменению поведения путем добавления или изменения фактов и правил.
  • Публикация и подписка
    • Одни компоненты приложения позволяют подписываться на свои события, другие - подписываются на эти события и выполняют необходимые действия.
    • Преимущества: низкая связность компонентов приложения, хорошие возможности по масштабированию решения.
  • Основанные на обмене сообщениями
    • Взаимодействие между компонентами осуществляется исключительно посредством обмена сообщениями, отправляемыми в общую шину. Компоненты приложения не обязаны явно указывать адресатов, это ответственность шины.
    • Преимущества: крайне низкая связность компонентов приложения, высокие показатели масштабируемости, соблюдение контрактов.
    • Примеры: service oriented architecture (SOA)
  • Одноранговые компоненты (peer-to-peer)
    • Каждый компонент приложения выполняет общие функции и может передавать свое состояние другим компонентам. Полностью децентрализованное решение.
    • Преимущества: высоконадежное решение в смысле бесперебойной работы, хорошо масштабируется, высокая степень утилизации ресурсов.
    • Примеры: распределенные файловые хранилища
  • Интерпретаторы
    • Поведение приложения описано на некотором языке программирования, поведение программы интерпретируется во время исполнения.
    • Преимущества: простая и быстрая модификация поведения, описание поведения через исходный код программы.
    • Примеры: PHP и др.
  • Распределенные вычисления
    • Компоненты приложения умеют распределять между собой общую вычислительную задачу и обмениваться промежуточными результатами.
    • Преимущества: низкая стоимость владения решением, реализующим сложную вычислительную задачу.
    • Примеры: расшифровка геномов, поиск внеземных цивилизаций.

Конечно, это довольно условная классификация и вы можете предложить свои варианты, оставив их к комментариях. Чаще всего крупные приложения реализуют смешанный (гетерогенный) архитектурный стиль.

 

Еще интересные статьи на эту тему: