Конструктивные шаблоны облачных решений

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

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

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

Улучшение процесса разработки в облаке

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

  • Сеть надежна.
  • Задержка равна нулю.
  • Пропускная способность бесконечна.
  • Сеть безопасна.
  • Топология не изменяется.
  • Есть один администратор.
  • Управление версиями компонентов просто.
  • Реализация наблюдаемости может быть отложена.

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

Рассмотрим, как использовать эти стандартные отраслевые шаблоны проектирования в качестве основных стандартных блоков для проектирования хорошо спроектированной рабочей нагрузки. Каждый шаблон конструктора в Azure Well-Architected Framework представляет один или несколько ее основных элементов. Некоторые шаблоны могут привести к компромиссам, которые влияют на цели других столпов.

Выбор шаблона

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

Каталог шаблонов

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

Расписание Итоги основы платформы Well-Architected
Посол Создайте службы поддержки, которые отправляют сетевые запросы от имени службы обслуживания клиентов или приложения. -Надёжность

-Безопасность
Уровень борьбы с коррупцией Реализуйте фасад или уровень адаптера между современным приложением и устаревшей системой. — операционное превосходство
Асинхронный запрос-ответ Отделить серверную обработку от внешнего узла. Этот шаблон полезен, если серверная обработка должна быть асинхронной, но интерфейс требует четкого и своевременного ответа. — эффективность производительности
Бэкенды для Фронтендов Создайте отдельные серверные службы для определенных внешних приложений или интерфейсов. -Надёжность

-Безопасность

— эффективность производительности
Распределительный блок Изолируйте элементы приложения в пулы, чтобы при сбое один из них продолжал функционировать. -Надёжность

-Безопасность

— эффективность производительности
Cache-Aside Загрузите данные по запросу в кэш из хранилища данных. -Надёжность

— эффективность производительности
Хореография Пусть отдельные службы решают, когда и как обрабатывается бизнес-операция, а не в зависимости от центрального оркестратора. — операционное превосходство

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

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

-Безопасность

- Оптимизация затрат

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

- Оптимизация затрат

— эффективность производительности
Консолидация вычислительных ресурсов Консолидация нескольких задач или операций в одном вычислительном модуле. - Оптимизация затрат

— операционное превосходство

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

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

— эффективность производительности
Внешнее хранилище конфигураций Перемещение сведений о конфигурации из пакета развертывания приложения в централизованное расположение. — операционное превосходство
Федеративная идентификация Делегирование проверки подлинности внешнему поставщику удостоверений. -Надёжность

-Безопасность

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

— эффективность производительности
Агрегация шлюзов Использование шлюза для объединения нескольких отдельных запросов в один общий. -Надёжность

-Безопасность

— операционное превосходство

— эффективность производительности
Разгрузка шлюза Перенесение общих или специализированных функций служб на прокси-сервер шлюза. -Надёжность

-Безопасность

- Оптимизация затрат

— операционное превосходство

— эффективность производительности
Маршрутизация шлюза Маршрутизация запросов к нескольким службам с помощью одной конечной точки. -Надёжность

— операционное превосходство

— эффективность производительности
Жеода Разверните внутренние службы на географически распределенных узлах. Каждый узел может обрабатывать клиентские запросы из любого региона. -Надёжность

— эффективность производительности
Мониторинг точек проверки состояния Внедрение в приложение функциональных проверок, к которым внешние средства могут регулярно получать доступ через предоставленные конечные точки. -Надёжность

— операционное превосходство

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

— эффективность производительности
Выборы лидера Координируйте действия в распределенном приложении, выбрав одну из копий в качестве лидера. Лидер управляет коллекцией экземпляров задач совместной работы. -Надёжность
Материализованное представление Создайте предварительно заполненные представления по данным в одном или нескольких хранилищах данных, если данные плохо отформатированы для необходимых операций запроса. — эффективность производительности
Мост обмена сообщениями Создайте посредника, чтобы обеспечить связь между системами обмена сообщениями, которые в противном случае несовместимы. - Оптимизация затрат

— операционное превосходство
Каналы и фильтры Задачу, которая требует сложной обработки, можно разбить на ряд отдельных элементов для повторного использования при необходимости. -Надёжность
Очередь приоритета Распределяйте приоритеты запросов, отправляемых службам, чтобы более важные запросы обрабатывались быстрее. -Надёжность

— эффективность производительности
Издатель-подписчик Разрешить приложению объявлять события нескольким потребителям асинхронно, не связывая отправителей с получателями. -Надёжность

-Безопасность

- Оптимизация затрат

— операционное превосходство

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

— операционное превосходство
Выравнивание нагрузки на основе очередей Используйте очередь, которая создает буфер между задачей и службой, чтобы сглаживать временные тяжелые нагрузки. -Надёжность

- Оптимизация затрат

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

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

- Оптимизация затрат
Коляска Разверните компоненты в отдельном процессе или контейнере, чтобы обеспечить изоляцию и инкапсуляцию. -Безопасность

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

- Оптимизация затрат

— операционное превосходство
Дросселирование Управление потреблением ресурсов из приложений, клиентов или служб. -Надёжность

-Безопасность

- Оптимизация затрат

— эффективность производительности
Ключ валета Используйте маркер или ключ для предоставления клиентам ограниченного прямого доступа к определенному ресурсу или службе. -Безопасность

- Оптимизация затрат

— эффективность производительности

Объединение шаблонов

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

Антишаблоны

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

Шаблоны оркестрации агентов ИИ

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

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

Дальнейшие действия

Просмотрите шаблоны проектирования с точки зрения основы Well-Architected Framework, которая направлена на оптимизацию шаблона.