Конструктивные шаблоны облачных решений
Эти конструктивные шаблоны полезны для создания надежных, масштабируемых, безопасных приложений в облаке.
В каждом из шаблонов описывается проблема, которую он устраняет, приведены рекомендации для применения шаблона и пример, основанный на Microsoft Azure. Большинство шаблонов включают примеры кода или фрагменты кода, показывающие, как реализовать шаблон в Azure. Однако большинство шаблонов относятся к любой распределенной системе, размещенной в Azure или на других облачных платформах.
Проблемы, возникающие при разработке облачных приложений
Управление даннымиУправление данными является ключевым элементом облачных приложений и влияет на большинство атрибутов качества. Данные обычно размещаются в разных расположениях и на нескольких серверах для повышения производительности, масштабируемости или доступности. Это может представлять различные проблемы. Например, необходимо поддерживать согласованность данных, то есть синхронизировать их в разных расположениях. |
|
Проектирование и реализацияХороший дизайн включает согласованность и согласованность при проектировании и развертывании компонентов, удобство обслуживания для упрощения администрирования и разработки, а также возможность повторного использования для использования компонентов и подсистем в других приложениях и сценариях. Решения, принятые на этапе проектирования и реализации, значительно влияют на качество и общую стоимость владения облачными приложениями и службами. |
|
Обмен сообщениямиРаспределенный характер облачных приложений требует инфраструктуры обмена сообщениями, которая соединяет компоненты и службы, в идеале слабо связанные для максимальной масштабируемости. Асинхронный обмен сообщениями широко используется и предоставляет множество преимуществ, но он также сопряжен с такими проблемами, как упорядочение сообщений, управление подозрительными сообщениями, идемпотентность и многое другое. |
Каталог шаблонов
Модель | Сводка | Категория |
---|---|---|
Посредник | Создайте службы поддержки, которые отправляют сетевые запросы от имени службы обслуживания клиентов или приложения. | Проектирование и реализация Эффективность операционных процессов |
Уровень защиты от повреждений | Реализуйте интерфейс или уровень адаптера между современным приложением и устаревшей системой. | Проектирование и реализация Эффективность операционных процессов |
Асинхронные запросы и ответы | Выполняйте серверную обработку не на внешнем узле, где серверная обработка должна быть асинхронной и когда интерфейс требует четкого ответа. | Обмен сообщениями |
Отдельные серверные части для каждого интерфейса | Создайте отдельные серверные службы, которые будут использоваться конкретными внешними приложениями или интерфейсами. | Проектирование и реализация |
Распределительный блок | Изоляция элементов приложения в пулах, чтобы в случае сбоя одного элемента остальные продолжали функционировать. | Надежность |
Отдельно от кэша | Загрузка данных по запросу из хранилища данных в кэш. | Управление данными Уровень производительности |
Хореография | Позвольте каждой службе самостоятельно определять, когда и как обрабатывать бизнес-операцию, не создавая зависимостей от центрального оркестратора. | Обмен сообщениями Уровень производительности |
Автоматическое выключение | Обработка ошибок при подключении к удаленной службе или ресурсу, устранение которых может занять непредсказуемое количество времени. | Надежность |
Проверка утверждений | Разделение большого сообщения на схему проверки утверждений и полезную нагрузку, чтобы избежать перегрузки в канале сообщений. | Обмен сообщениями |
Компенсирующие транзакции | Отмена работы с выполнением серии шагов, которые вместе определяют согласованную в конечном счете операцию. | Надежность |
Конкурирующие потребители | Несколько конкурирующих потребителей обрабатывают сообщения, полученные в одном канале обмена сообщениями. | Обмен сообщениями |
Консолидация вычислительных ресурсов | Объединение нескольких задач и операций в единый вычислительный блок | Проектирование и реализация |
CQRS | Вы можете разделить интерфейсы для операций считывания и записи данных. | Управление данными Проектирование и реализация Уровень производительности |
Метки развертывания | Развертывание нескольких независимых копий компонентов приложения, включая хранилища данных. | Надежность Уровень производительности |
Конфигурация пограничной рабочей нагрузки | Большое разнообразие систем и устройств в цехе может сделать конфигурацию рабочей нагрузки сложной проблемой. | Проектирование и реализация |
Источник событий | Использование инкрементируемого хранилища для сохранения всей последовательности событий, то есть всех действий с данными в домене. | Управление данными Уровень производительности |
Внешнее хранилище конфигурации | Переместите сведения о конфигурации из пакета развертывания приложения в централизованное расположение. | Проектирование и реализация Эффективность операционных процессов |
Федеративная идентификация | Делегирование проверки подлинности внешнему поставщику удостоверений. | Безопасность |
Привратник | Защита приложений и служб с помощью выделенного экземпляра узла, который выполняет роль брокера между клиентами и приложением или службой, проверяет и очищает запросы, а также передает запросы и данные между ними. | Безопасность |
Агрегирование на шлюзе | Использование шлюза для объединения нескольких отдельных запросов в один общий. | Проектирование и реализация Эффективность операционных процессов |
Перенесение в шлюз | Перенесение общих или специализированных функций служб на прокси-сервер шлюза. | Проектирование и реализация Эффективность операционных процессов |
Маршрутизация шлюза | Используйте одну конечную точку при маршрутизации запросов к нескольким службам. | Проектирование и реализация Эффективность операционных процессов |
Geode | Развертывайте серверные службы в нескольких географических узлах, каждый из которых может обслуживать любой клиентский запрос в любом регионе. | Надежность Эффективность операционных процессов |
Мониторинг конечных точек работоспособности | Внедрение в приложение функциональных проверок, к которым внешние средства могут регулярно получать доступ через предоставленные конечные точки. | Надежность Эффективность операционных процессов |
Таблица индексов | Создание в хранилище данных индексов по полям, которые часто используются в запросах. | Управление данными Уровень производительности |
Выбор лидера | Метод координации действий для коллекции экземпляров, объединенных совместной задачей в распределенном приложении: один экземпляр выбирается в качестве лидера, который отвечает за управление другими экземплярами. | Проектирование и реализация Надежность |
Материализованное представление | Создание предварительно заполненных представлений на основе данных из одного или нескольких хранилищ данных, когда данные не отформатированы для требуемых операций запросов. | Управление данными Эффективность работы, Уровень производительности |
Каналы и фильтры | Задачу, которая требует сложной обработки, можно разбить на ряд отдельных элементов для повторного использования при необходимости. | Проектирование и реализация Обмен сообщениями |
Очередь с приоритетом | Запросы, отправляемые в службу, получают разные приоритеты. При этом запросы с высоким приоритетом принимаются и обрабатываются быстрее, чем запросы с низким приоритетом. | Обмен сообщениями Уровень производительности |
Издатель/Подписчик | Настройка в приложении возможности асинхронно объявлять событие для нескольких объектов-получателей без взаимозависимости между отправителями и получателями. | Обмен сообщениями |
Выравнивание нагрузки на основе очередей | Очередь выполняет роль буфера между задачей и службой, которую она вызывает, позволяя сгладить кратковременные всплески нагрузки. | Надежность Обмен сообщениями Устойчивость Уровень производительности |
Шаблон ограничения скорости | Ограничение шаблона для предотвращения или минимизации ошибок регулирования, связанных с этими ограничениями регулирования, а также для более точного прогнозирования пропускной способности. | Надежность |
Повторные попытки | Механизм обработки ожидаемых временных сбоев, при котором приложение повторно подключается к службе или сетевому ресурсу, обращение к которым завершилось сбоем, не прерывая потока событий. | Надежность |
Saga | Управление согласованностью данных в микрослужбах в сценариях распределенных транзакций. Сага — это последовательность транзакций, которая обновляет каждую службу и публикует сообщение или событие для активации следующего шага транзакции. | Обмен сообщениями |
Планировщик, агент, контролер | Координируйте ряд действий в распределенном наборе служб и других удаленных ресурсов. | Обмен сообщениями Надежность |
Последовательная передача | Обработка набора связанных сообщений в определенном порядке без блокирования обработки других групп сообщений. | Обмен сообщениями |
Сегментирование | Вы можете разделить хранилище данных на несколько горизонтальных секций, которые называются сегментами. | Управление данными Уровень производительности |
Расширение | Чтобы обеспечить изоляцию и инкапсуляцию, развертывайте компоненты приложения в отдельном процессе или контейнере. | Проектирование и реализация Эффективность операционных процессов |
Размещение статического содержимого | Разверните статическое содержимое в облачной службе хранения для предоставления непосредственно клиенту. | Проектирование и реализация Управление данными Уровень производительности |
Подавление | Пошаговая миграция устаревшей системы с постепенной заменой определенных компонентов новыми приложениями и службами. | Проектирование и реализация Эффективность операционных процессов |
Регулирование | Контролируйте потребление ресурсов, используемых экземпляром приложения, отдельным клиентом или всей службой. | Надежность Уровень производительности |
Ключ камердинера | Использование токена или ключа, который предоставляет клиентам ограниченный доступ к определенному ресурсу или службе. | Управление данными Безопасность |