Рекомендации по оптимизации масштабирования и секционирования

Применяется к этой рекомендации по повышению эффективности производительности Azure Well-Architected Framework:

PE:05 Оптимизируйте масштабирование и секционирование. Внедрение надежного и управляемого масштабирования и секционирования. Схема единицы масштабирования рабочей нагрузки является основой стратегии масштабирования и секционирования.

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

Определения

Термин Определение
Автомасштабирование Функция, которая автоматически корректирует ограничения емкости службы на основе предопределенных конфигураций, позволяя ей увеличивать или уменьшать масштаб по мере необходимости.
Capacity Верхний предел или максимальная емкость данной службы или функции.
Сходство клиентов (сходство сеансов) Преднамеренная маршрутизация запросов от одного клиента к одному экземпляру сервера для обеспечения согласованного управления сеансами.
Согласованность (распределенная база данных) Единообразие данных на нескольких узлах распределенной базы данных, гарантирующее, что все реплики имеют одинаковые данные в определенный момент времени.
Согласованность (реляционная база данных) Свойство транзакции, приведшей базу данных из одного допустимого состояния в другое, сохраняя целостность данных.
Уровень согласованности Конфигурация, которая определяет, как и когда реплицируются данные в распределенной системе баз данных, определяя компромисс между согласованностью и производительностью.
Блокировка данных Механизм, используемый для предотвращения одновременного обновления одних и того же данных.
Горизонтальное масштабирование Подход к масштабированию, который добавляет экземпляры ресурса заданного типа.
Оптимистическая блокировка Подход к обновлению баз данных, который использует моментальные снимки для внесения обновлений вместо традиционных механизмов блокировки.
Секционирование Процесс физического разделения данных на отдельные хранилища данных.
Масштабируемость Возможность рабочей нагрузки динамически изменять ограничения емкости в соответствии с различными уровнями спроса.
Единица масштабирования Группа ресурсов, масштабируемых пропорционально вместе.
Сходство состояний Хранение данных сеанса клиента на одном сервере, чтобы тот же сервер обрабатывал последующие запросы от того же клиента.
Вертикальное масштабирование Подход к масштабированию, который добавляет вычислительные ресурсы к существующим ресурсам.

Ключевые стратегии проектирования

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

Оптимизация масштабирования

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

Выбор стратегии масштабирования

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

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

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

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

  • Требования. Ознакомьтесь с конкретными требованиями рабочей нагрузки, учитывая такие факторы, как потребность в ресурсах, потребности в масштабируемости и ограничения рабочей нагрузки.

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

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

Проектирование инфраструктуры для масштабирования

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

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

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

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

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

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

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

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

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

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

  • Микрослужбы. Рассмотрите возможность реализации микрослужб, которые представляют собой небольшие независимые службы, ориентированные на конкретные бизнес-функции. Каждую микрослужбу можно разрабатывать, развертывать и масштабировать независимо друг от друга, обеспечивая большую гибкость и масштабируемость.

Разработка приложения для масштабирования

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

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

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

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

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

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

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

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

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

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

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

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

  2. Проектируйте приложение для поддержки фоновых задач. Отделяйте интенсивные задачи от логики приложения main и предоставляйте механизм для запуска фоновых задач и управления ими.

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

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

Настройка масштабирования

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

Используйте службы с автомасштабированием. Функция автомасштабирования автоматически масштабирует инфраструктуру в соответствии с потребностями. Используйте предложения "платформа как услуга" (PaaS) со встроенными функциями автомасштабирования. Простота масштабирования в PaaS является одним из основных преимуществ. Например, для горизонтального масштабирования виртуальных машин требуется отдельная подсистема балансировки нагрузки, обработка клиентских запросов и внешне сохраненное состояние. Большинство этих задач выполняют предложения PaaS.

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

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

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

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

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

Используйте значимые метрики нагрузки. Масштабирование должно использовать значимые метрики нагрузки в качестве триггеров масштабирования. Значимые метрики нагрузки включают простые метрики, такие как ЦП или память. Они также включают более сложные метрики, такие как глубина очереди, SQL-запросы, пользовательские запросы метрик и длина очереди HTTP. Рассмотрите возможность использования сочетания простых и расширенных метрик нагрузки в качестве триггера масштабирования.

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

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

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

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

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

Тестирование масштабирования

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

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

  • Определите сценарии рабочей нагрузки. Определите ключевые сценарии рабочей нагрузки, которые необходимо протестировать, например увеличение пользовательского трафика, параллельные запросы, объем данных или использование ресурсов.

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

  • Настройка метрик производительности. Определите метрики производительности для измерения, например время отклика, пропускную способность, использование ЦП и памяти, а также частоту ошибок.

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

  • Выполнение и мониторинг тестов. Запустите тесты, используя определенные тестовые случаи, и соберите данные о производительности на каждом уровне нагрузки. Отслеживайте поведение рабочей нагрузки, потребление ресурсов и снижение производительности.

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

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

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

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

Рабочая нагрузка секционирования

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

Общие сведения о секционированиях

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

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

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

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

Планирование секционирования

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

Реализация секционирования

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

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

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

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

Тестирование и оптимизация секционирования

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

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

Риск. Секционирование сопряжено с некоторыми потенциальными проблемами, которые необходимо рассмотреть и решить, в том числе:

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

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

Упрощение поддержки Azure

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

Azure Monitor позволяет отслеживать различные метрики и условия в приложениях и инфраструктуре. Монитор можно использовать для запуска действий автоматического масштабирования на основе предопределенных правил. Например, в Служба Azure Kubernetes (AKS) можно использовать Monitor для включения горизонтального автоматического масштабирования pod (HPA) и автоматического масштабирования кластера. Используя возможности мониторинга и оповещений Monitor, вы можете эффективно упростить масштабирование в Azure и обеспечить динамическое изменение приложений и инфраструктуры в соответствии с потребностями.

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

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

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

  • Использование фоновых задач. Azure предлагает службы и рекомендации по реализации фоновых заданий. Дополнительные сведения см. в разделе Фоновые задания.

  • Реализация балансировки нагрузки. Azure предоставляет подсистемы балансировки нагрузки, для которых не требуется сопоставление клиентов. Эти подсистемы балансировки нагрузки включают Azure Front Door, Шлюз приложений Azure и Azure Load Balancer.

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

Контрольный список для оптимизации производительности

См. полный набор рекомендаций.