Шаблоны облачного проектирования, поддерживающие эффективность производительности

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

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

Конструктивные шаблоны для повышения уровня производительности

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

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

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

Ознакомьтесь с шаблонами облачного проектирования, поддерживающими другие основные аспекты Azure Well-Architected Framework: