Стили архитектуры

Стиль архитектуры — это семейство архитектур, которые имеют определенные характеристики. Например, N-уровень — это общий стиль архитектуры. В последнее время архитектуры микрослужб начинают получать пользу. Стили архитектуры не требуют использования конкретных технологий, но некоторые технологии лучше подходят для определенных архитектур. Например, контейнеры хорошо подходят для микрослужб.

Мы определили набор стилей архитектуры, которые обычно находятся в облачных приложениях. Статья для каждого стиля включает следующие компоненты:

  • Описание и логическая схема стиля
  • Рекомендации по выбору этого стиля
  • Преимущества, проблемы и рекомендации
  • Рекомендуемое развертывание, использующее соответствующие службы Azure

Краткий обзор стилей

В этом разделе приводится краткий обзор стилей архитектуры, которые мы определили, а также некоторые общие рекомендации по их использованию. Этот список не является исчерпывающим. Дополнительные сведения см. в связанных статьях.

N-уровень

Логическая схема стиля архитектуры N-уровней.

На схеме показана многоуровневая структура архитектуры N-уровня с четким разделением между компонентами. Клиентские запросы вступают через брандмауэр веб-приложения (WAF), который обеспечивает фильтрацию безопасности перед достижением веб-уровня. Веб-уровень служит слоем презентации. Он управляет взаимодействиями пользователей и маршрутизирует запросы в соответствующие компоненты бизнес-логики. Два разных пути обработки возникают из веб-уровня: один путь передается непосредственно на средний уровень один для синхронных операций, а другой путь использует инфраструктуру обмена сообщениями для взаимодействия со средним уровнем два для асинхронной обработки. Оба средних уровня представляют уровни бизнес-логики, которые обрабатывают запросы и взаимодействуют с уровнем данных с помощью механизмов кэширования для оптимизации производительности. Уровень данных служит основой. Он сохраняет и управляет данными приложения, поддерживая оба средних уровня с помощью шаблонов доступа к кэшируемым данным.

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

Архитектуры N-уровня хорошо подходят для переноса существующих приложений, которые уже используют многоуровневую архитектуру. Этот подход требует минимальных изменений при переходе на Azure и поддерживает смешанные среды как с локальными, так и облачными компонентами. Но горизонтальная слоистость может затруднить внесение изменений, не затрагивая несколько частей приложения, что ограничивает гибкость для частых обновлений.

Веб-Очередь-Рабочий

Логическая схема стиля архитектуры веб-Queue-Worker.

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

Web-Queue-Worker — это архитектура, состоящая из веб-интерфейса, очереди сообщений и серверной рабочей роли. Веб-фронтенд обрабатывает HTTP-запросы и взаимодействие с пользователем, в то время как воркер выполняет ресурсоемкие задачи, длительные рабочие процессы или пакетные операции. Взаимодействие между интерфейсом и рабочей ролью осуществляется через асинхронную очередь сообщений.

Эта архитектура идеально подходит для приложений с относительно простыми доменами, имеющими некоторые требования к обработке с большим объемом ресурсов. Легко понять и развернуть управляемые Azure службы, такие как служба приложений и Azure Functions. Вы можете масштабировать фронтенд и воркер независимо, чтобы обеспечить гибкость в выделении ресурсов. Но без тщательного проектирования оба компонента могут стать большими и монолитными.

Микрослужбы

Логическая схема стиля архитектуры микрослужб.

На схеме показана архитектура распределенных микрослужб, упорядоченная на отдельные функциональные слои. Слева клиентские приложения и внешние системы инициируют запросы, которые передаются через централизованный шлюз API, который служит в качестве единой точки входа и механизма маршрутизации для всей системы. Шлюз API направляет запросы на соответствующий уровень микрослужб, который содержит несколько типов служб: доменные службы, которые инкапсулируют определенные бизнес-возможности, службы композиции, которые оркестрируют взаимодействие между доменными службами и отдельными службами, обрабатывающими дискретные функции. Каждая микрослужба поддерживает автономию данных через собственную выделенную базу данных. На схеме показан подход к полиглотной персистентности с использованием баз данных SQL и NoSQL, ориентированных на конкретные требования к данным каждого сервиса. Микрослужбы взаимодействуют асинхронно с помощью промежуточного программного обеспечения, ориентированного на сообщения. Такой подход позволяет свободно взаимодействовать с помощью шаблонов публикации и подписок на события. Три базовых уровня инфраструктуры поддерживают эту распределенную архитектуру: системы наблюдения обеспечивают комплексный мониторинг, ведение журнала и распределенную трассировку по границам службы. Платформы управления и оркестрации обрабатывают автоматическое развертывание, масштабирование и обнаружение служб. Цепочка инструментов DevOps обеспечивает непрерывную интеграцию, тестирование и конвейеры доставки для независимых развертываний служб.

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

Микрослужбы позволяют командам работать автономно и поддерживать частые обновления с более высокой скоростью выпуска. Эта архитектура хорошо подходит для сложных доменов, требующих частых изменений и инноваций. Но она представляет значительную сложность в таких областях, как обнаружение служб, согласованность данных и распределенное управление системой. Успех требует зрелой разработки и практики DevOps, что делает его более подходящим для организаций, имеющих расширенные технические возможности.

Управляемая событиями архитектура

Схема событийно-ориентированной архитектуры.

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

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

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

Большие данные

Логическая схема стиля архитектуры больших данных.

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

Архитектура больших данных обрабатывает прием, обработку и анализ данных, которые слишком большие или сложные для традиционных систем баз данных. Эти архитектуры обычно включают компоненты для хранилища данных (например, озера данных), пакетную обработку для исторического анализа, потоковую обработку для аналитики в режиме реального времени и аналитические хранилища данных для создания отчетов и визуализации.

Архитектура больших данных важна для организаций, которые должны извлекать аналитические сведения из массовых наборов данных, поддерживать прогнозную аналитику с помощью машинного обучения или обрабатывать потоковые данные в режиме реального времени с устройств Интернета вещей. Современные реализации часто используют управляемые службы, такие как Microsoft Fabric, чтобы упростить создание и обслуживание решений больших данных.

Большие вычисления

Схема, демонстрирующая стиль архитектуры больших вычислений.

На схеме показана сложная система распределения заданий и операционной системы, предназначенная для высокопроизводительных вычислительных рабочих нагрузок. На точке входа клиентские приложения передают вычислительные задания с помощью интерфейса очереди заданий, который выступает в качестве механизма буфера и приема входящих рабочих запросов. Задания направляются в централизованный диспетчер или координационный компонент, который служит интеллектуальным мозгом системы, отвечающим за анализ характеристик заданий, требований к ресурсам и вычислительные зависимости. Планировщик выполняет критически важные функции, включая декомпозицию заданий, планирование выделения ресурсов и оптимизацию рабочей нагрузки на основе доступных вычислительных ресурсов и взаимозависимостей задач. С этой центральной точки координации планировщик интеллектуально направляет работу по двум отдельным путям операций на основе вычислительных характеристик каждого задания. Первый путь направляет работу в параллельные среды обработки задач, предназначенные для неловко параллельных рабочих нагрузок, где отдельные задачи могут выполняться независимо, не требуя обмена данными между единицами обработки. Эти параллельные задачи распределяются по сотням или тысячам ядер одновременно, причем каждое ядро обрабатывает дискретные единицы работы в изоляции. Второй путь обрабатывает тесно связанные задачи, требующие частого взаимодействия между процессами, доступа к общей памяти или синхронизированных операций. Эти тесно связанные рабочие нагрузки обычно используют высокоскоростные соединения, такие как InfiniBand или удаленный прямой доступ к памяти (RDMA), чтобы обеспечить быстрый обмен данными между узлами обработки. Планировщик постоянно отслеживает обе операционные среды, управляет выделением ресурсов, обрабатывает отказоустойчивость и оптимизирует производительность путем динамической настройки распределения работы на основе емкости системы, приоритетов заданий и требований к завершению. Двуфункциональный подход позволяет архитектуре эффективно обрабатывать различные вычислительные рабочие нагрузки, максимизируя использование ресурсов во всей вычислительной инфраструктуре.

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

Большие вычислительные ресурсы необходимы для моделирования, моделирования финансовых рисков, научных вычислений, инженерного анализа стресса и трехмерной отрисовки. Azure предоставляет такие варианты, как Azure Batch для управляемых больших вычислительных рабочих нагрузок или пакета HPC для более традиционного управления кластерами. Эти архитектуры могут увеличивать емкость по требованию и масштабировать до тысяч ядер при необходимости.

Стили архитектуры в виде ограничений

Стиль архитектуры накладывает ограничения на дизайн, включая набор элементов, которые могут отображаться, и допустимые связи между этими элементами. Ограничения управляют "формой" архитектуры путем ограничения вселенной выбора. Когда архитектура соответствует ограничениям определенного стиля, возникают определенные желательные свойства.

Например, ограничения в микрослужбах включают:

  • Служба представляет одну ответственность.
  • Каждая служба не зависит от других.
  • Данные являются частными для службы, которая владеет ею. Службы не делятся данными.

При выполнении этих ограничений вы получаете систему, которая позволяет выполнять следующие действия:

  • Независимое развертывание служб.
  • Локализовать неисправности.
  • Отправка более частых обновлений.
  • Упрощение внедрения новых технологий в приложение.

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

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

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

Стиль архитектуры Управление зависимостями Тип домена
N-уровень Горизонтальные уровни, разделенные подсетью Традиционный бизнес-домен. Частота обновлений низка.
Веб-Очередь-Рабочий Внешние и внутренние задания, разделенные асинхронным обменом сообщениями. Относительно простой домен с некоторыми ресурсоемкими задачами.
Микрослужбы Вертикально (функционально) разложенные службы, которые вызывают друг друга через API. Сложный домен. Частые обновления.
Архитектура на основе событий Производитель или потребитель. Независимое представление для каждой подсистемы. Интернет вещей (IoT) и системы в режиме реального времени.
Большие данные Разделите огромный набор данных на небольшие блоки. Параллельная обработка локальных наборов данных. Анализ пакетных данных и данных в режиме реального времени. Прогнозный анализ с помощью машинного обучения.
Большие вычислительные ресурсы Распределение данных по тысячам ядер. Вычислительные интенсивные домены, такие как моделирование.

Рассмотрите проблемы и преимущества

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

При выборе стиля архитектуры рассмотрите следующие типы проблем:

  • Сложность: Сложность архитектуры должна соответствовать домену. Если это слишком упрощенно, это может привести к большому шару грязи, где зависимости не хорошо управляемы и структура разбивается.

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

  • Взаимодействие между службами: Разложение приложения на отдельные службы может увеличить затраты на обмен данными. В архитектурах микрослужб эта нагрузка часто приводит к проблемам задержки или перегрузке сети.

  • Управляемость: Управление приложением включает такие задачи, как мониторинг, развертывание обновлений и поддержание работоспособности операций.

Дальнейшие шаги