Руководство по производительности службы Azure Web PubSub

Одним из ключевых преимуществ использования службы Azure Web PubSub является простота масштабирования. В крупномасштабном сценарии производительность является важным фактором.

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

Быстрая оценка с помощью метрик

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

Снимок экрана метрики Server Load на портале Azure Web PubSub. Метрика показывает, что загрузка сервера составляет около 8 процентов.

В нем отображается вычислительная нагрузка службы Azure Web PubSub. Вы можете протестировать собственный сценарий и проверить эту метрику, чтобы решить, следует ли масштабировать. Задержка в службе Azure Web PubSub останется низкой, если загрузка сервера ниже 70%.

Замечание

Если вы используете единицу 50 или больше, и ваш сценарий в основном отправляется в небольшие группы (размер <группы 20), необходимо проверить отправку в небольшую группу для справки. В этих сценариях существует большая стоимость маршрутизации, которая не включена в нагрузку сервера.

Ниже приведены подробные понятия для оценки производительности.

Определения терминов

Входящее: входящее сообщение в службу Azure Web PubSub Service.

Исходящий трафик: исходящее сообщение из службы Azure Web PubSub.

Пропускная способность: общий размер всех сообщений в 1 секунду.

Обзор

В этом руководстве приведены ответы на следующие вопросы:

  • Какова типичная производительность службы Azure Web PubSub для каждого размера единицы?

  • Соответствует ли служба Azure Web PubSub требованиям к пропускной способности сообщений (например, отправка 100 000 сообщений в секунду)?

  • Для моего конкретного сценария как можно выбрать правильный размер единицы?

Чтобы ответить на эти вопросы, в этом руководстве сначала приводится высокоуровневое объяснение факторов, влияющих на производительность. Затем он иллюстрирует максимальное количество входящих и исходящих сообщений для типичных вариантов использования: отправка в группы через подпротокол Web PubSub, восходящий и REST API.

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

Аналитические сведения о производительности

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

Методология

Пропускная способность и задержка являются двумя типичными аспектами проверки производительности. Максимальная пропускная способность (входящий и исходящий трафик) определяется как максимальная достигнутая пропускная способность, когда 99 процентов сообщений имеют задержку менее 1 секунды. Это не жесткий предел.

Факторы производительности

Теоретически емкость службы Azure Web PubSub ограничена вычислительными ресурсами: ЦП, памятью и сетью. Например, больше подключений к службе Azure Web PubSub приводит к тому, что служба будет использовать больше памяти. Для большего трафика сообщений (например, каждое сообщение больше 2048 байт), служба Azure Web PubSub должна тратить больше циклов ЦП для обработки трафика.

Стоимость маршрутизации сообщений также ограничивает производительность. Служба Azure Web PubSub играет роль брокера сообщений, который направляет сообщение между набором клиентов. Для другого сценария или API требуется другая политика маршрутизации.

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

В итоге следующие факторы влияют на входящий и исходящий объем:

  • Размер единицы (ЦП/память)

  • Количество подключений

  • Размер сообщения

  • Скорость отправки сообщений

  • Сценарий использования (стоимость маршрутизации)

Поиск правильного размера единицы

Как оценить входящий или исходящий объем или найти, какой размер единицы подходит для конкретного варианта использования?

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

  inboundBandwidth = inboundConnections * messageSize / sendInterval
  outboundBandwidth = outboundConnections * messageSize / sendInterval
  • inboundConnections: количество подключений, отправляемых сообщением.
  • outboundConnections: количество подключений, получающих сообщение.
  • messageSize: размер одного сообщения (среднее значение). Небольшое сообщение, которое меньше 1024 байтов, влияет на производительность, аналогичное 1024-байтового сообщения.
  • sendInterval: интервал отправки сообщений. Например, 1 секунда означает отправку одного сообщения каждую секунду. Меньший интервал означает отправку дополнительных сообщений за период времени. Например, 0,5 секунды означает отправку двух сообщений каждую секунду.
  • Подключения: максимальное пороговое значение для службы Azure Web PubSub для каждого размера единицы. Подключения, превышающие пороговое значение, ограничиваются.

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

Примеры

В следующих разделах рассматривается три типичных варианта использования: отправка в группы через подпротокол Web PubSub, активация CloudEvent, вызов rest API. В каждом сценарии в секции перечислены текущие входящие и исходящие емкости для Azure Web PubSub Service. Он также объясняет основные факторы, влияющие на производительность.

Во всех случаях использования размер сообщения по умолчанию составляет 2 048 байт, а интервал отправки сообщений составляет 1 секунду.

Отправка в группы с помощью подпротокола Web PubSub

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

Схема, показывающая рабочий процесс отправки в группу.

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

  • Большая группа: номер группы всегда равен 10. Число членов группы равно (максимальному количеству подключений) / 10. Например, для единицы 1, если имеется 1000 подключений, каждая группа имеет 1000 / 10 = 100 членов.
  • Небольшая группа: каждая группа имеет 10 подключений. Число группы равно (максимальному числу подключений) / 10. Например, для единицы 1, если имеется 1000 подключений, то у нас есть 1000 / 10 = 100 групп.

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

Большая группа

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

Отправить в большую группу Единица 1 Единица 2 Единица 10 Единица 50 Единица 100 Единица 200 Единица 500 Единица 1000
Connections 1 000 2 000 10 000 50,000 100,000 200,000 500,000 1,000,000
Число участников группы 100 200 1 000 5,000 10 000 5,000 10 000 20,000
Количество групп 10 10 10 10 10 10 10 10
Входящие сообщения в секунду 30 30 30 30 30 30 30 30
Пропускная способность для входящего трафика 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps
Исходящие сообщения в секунду 3,000 6,000 30 000 150,000 300 000 600,000 1,500,000 3 000 000
Исходящая пропускная способность 6 МБИТ/с 12 МБИТ/с 60 МБИТ/с 300 МБИТ/с 600 МБИТ/с 1200 МБИТ/с 3000 МБИТ/с 6 000 МБИТ/с
Небольшая группа

Стоимость маршрутизации значительна для отправки сообщений многим небольшим группам. В настоящее время реализация службы Azure Web PubSub достигает предельной стоимости маршрутизации в единице 50. Добавление дополнительных ресурсов ЦП и памяти не помогает, поэтому модуль 100 не может улучшиться дальше по проектированию. Если вам требуется больший объем входящей пропускной способности, вы можете увеличить масштаб до Premium_P2(блок >100).

Отправить в небольшую группу Единица 1 Единица 2 Единица 10 Единица 50 Единица 100 Единица 200 Единица 500 Единица 1000
Connections 1 000 2 000 10 000 50,000 100,000 200,000 500,000 1,000,000
Число участников группы 10 10 10 10 10 10 10 10
Количество групп 100 200 1 000 5,000 10 000 20,000 50,000 100,000
Входящие сообщения в секунду 200 400 2 000 10 000 10 000 20,000 50,000 100,000
Пропускная способность для входящего трафика 400 KBps 800 KBps 4 МБИТ/с 20 МБИТ/с 20 МБИТ/с 40 Мбит/с 100 МБИТ/с 200 Мбит/с
Исходящие сообщения в секунду 2 000 4,000 20,000 100,000 100,000 200,000 500,000 1,000,000
Исходящая пропускная способность 4 МБИТ/с 8 МБИТ/с 40 МБИТ/с 200 MBps 200 МБИТ/с 400 МБИТ/с 1000 МБИТ/с 2000 МБИТ/с

Замечание

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

Активация облачного события

Служба доставляет клиентские события в веб-перехватчик верхнего уровня с помощью протокола HTTP CloudEvents.

Исходящий вебхук

Для каждого события он сформирует HTTP POST-запрос к зарегистрированному вышестоящему серверу и ожидает HTTP-ответ.

Замечание

Web PubSub также поддерживает HTTP 2.0 для доставки исходящих событий. Приведенный ниже результат проверяется с помощью HTTP 1.1. Если сервер приложений поддерживает HTTP 2.0, производительность будет лучше.

Эхо

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

Эхо Единица 1 Единица 2 Единица 10 Единица 50 Единица 100 Единица 200 Единица 500 Единица 1000
Connections 1 000 2 000 10 000 50,000 100,000 200,000 500,000 1,000,000
Входящие и исходящие сообщения в секунду 500 1 000 5,000 25,000 50,000 100,000 250 000 500,000
Пропускная способность для входящего и исходящего трафика 1 МБИТ/с 2 МБИТ/с 10 МБИТ/с 50 МБИТ/с 100 МБИТ/с 200 МБИТ/с 500 МБИТ/с 1000 МБИТ/с

REST API

Azure Web PubSub предоставляет мощные API для управления клиентами и доставки сообщений в режиме реального времени.

Схема, на которой показан общий рабочий процесс службы Web PubSub с помощью REST API.

Отправка пользователю через REST API

Этот тест назначает имена пользователей всем клиентам перед началом подключения к службе Azure Web PubSub.

Отправка пользователю через REST API Единица 1 Единица 2 Единица 10 Единица 50 Единица 100 Единица 200 Единица 500 Единица 1000
Connections 1 000 2 000 10 000 50,000 100,000 200,000 500,000 1,000,000
Входящие и исходящие сообщения в секунду 180 360 1800 9,000 18,000 36 000 90 000 180 000
Пропускная способность для входящего и исходящего трафика 360 KBps 720 KBps 3,6 мб/с 18 МБИТ/с 36 МБИТ/с 72 МБИТ/с 180 МБИТ/с 360 МБИТ/с

Трансляция через REST API

Пропускная способность совпадает с пропускной способностью для отправки в большую группу.

Трансляция через REST API Единица 1 Единица 2 Единица 10 Единица 50 Единица 100 Единица 200 Единица 500 Единица 1000
Connections 1 000 2 000 10 000 50,000 100,000 200,000 500,000 1,000,000
Входящие сообщения в секунду 3 3 3 3 3 3 3 3
Исходящие сообщения в секунду 3,000 6,000 30 000 150,000 300 000 600,000 1,500,000 3 000 000
Пропускная способность для входящего трафика 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps
Исходящая пропускная способность 6 МБИТ/с 12 МБИТ/с 60 МБИТ/с 300 МБИТ/с 600 МБИТ/с 1200 МБИТ/с 3000 МБ 6000 МБ

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

Используйте эти ресурсы для начала создания собственного приложения: