Поделиться через


Разделение вокруг ограничений

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

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

Существует множество способов секционирования системы, например:

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

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

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

База данных может быть секционирована по горизонтали, по вертикали или функционально.

  • В горизонтальном секционировании, также называемом шардингом, каждый раздел содержит данные для части общего объема данных. Разделы используют одну и ту же схему данных. Например, клиенты, имена которых начинаются с A–M, переходят в одну секцию, N–Z в другую секцию.

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

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

Дополнительные сведения см. в разделе "Секционирование данных".

Рекомендации

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

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

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

Разделение на разных уровнях. Рассмотрим сервер базы данных, развернутый на виртуальной машине. У виртуальной машины есть виртуальный жесткий диск, поддерживаемый службой хранилища Azure. Учетная запись хранения принадлежит подписке Azure. Обратите внимание, что каждый шаг в иерархии имеет ограничения. Сервер базы данных может иметь ограничение пула подключений. Виртуальные машины имеют ограничения ЦП и сети. Хранилище имеет ограничения на IOPS. Подписка имеет ограничения на количество ядер виртуальных машин. Как правило, проще разделять на нижних уровнях иерархии. Необходимо секционировать только крупные приложения на уровне подписки.