Guia de desempenho para o Serviço Azure Web PubSub

Um dos principais benefícios de usar o Serviço Azure Web PubSub é a facilidade de dimensionamento. Num cenário de grande escala, o desempenho é um fator importante.

Neste guia, apresentamos os fatores que afetam o desempenho do serviço Web PubSub. Descrevemos o desempenho típico em diferentes cenários de casos de uso.

Avaliação rápida usando métricas

Antes de analisar os fatores que afetam o desempenho, vamos primeiro apresentar uma maneira fácil de monitorar a pressão do seu serviço. Há uma métrica chamada Carga do Servidor no Portal.

Captura de ecrã da métrica Carregamento do Servidor do Azure Web PubSub no Portal. A métrica mostra que a carga do servidor está em cerca de 8% de uso.

Ele mostra a pressão de computação do seu serviço Azure Web PubSub. Você pode testar seu próprio cenário e verificar essa métrica para decidir se deseja aumentar a escala. A latência dentro do serviço Azure Web PubSub permaneceria baixa se a Carga do Servidor estiver abaixo de 70%.

Nota

Se você estiver usando a unidade 50 ou maior e seu cenário estiver enviando principalmente para grupos pequenos (tamanho do <grupo 20), você precisa verificar o envio para um grupo pequeno para referência. Nesses cenários, há um grande custo de roteamento que não está incluído na carga do servidor.

Abaixo estão conceitos detalhados para avaliar o desempenho.

Definições de termos

Entrada: A mensagem de entrada para o Serviço PubSub da Web do Azure.

Saída: A mensagem de saída do Serviço PubSub da Web do Azure.

Largura de banda: O tamanho total de todas as mensagens em 1 segundo.

Descrição geral

Este guia responde às seguintes perguntas:

  • Qual é o desempenho típico do Serviço Azure Web PubSub para cada tamanho de unidade?

  • O Serviço Azure Web PubSub atende aos meus requisitos de taxa de transferência de mensagens (por exemplo, enviar 100.000 mensagens por segundo)?

  • Para o meu cenário específico, como posso selecionar o tamanho de unidade adequado?

Para responder a essas perguntas, este guia primeiro fornece uma explicação de alto nível dos fatores que afetam o desempenho. Em seguida, ilustra o máximo de mensagens de entrada e saída para casos de uso típicos: Enviar para grupos por meio do subprotocolo Web PubSub, upstream e api rest.

Este guia não pode cobrir todos os cenários (e diferentes casos de uso, tamanhos de mensagens, padrões de envio de mensagens e assim por diante). Mas fornece algumas informações básicas para entender a limitação de desempenho.

Visão geral do desempenho

Esta seção descreve as metodologias de avaliação de desempenho e, em seguida, lista todos os fatores que afetam o desempenho. No final, ele fornece métodos para ajudá-lo a avaliar os requisitos de desempenho.

Metodologia

A taxa de transferência e a latência são dois aspetos típicos da verificação de desempenho. A taxa de transferência máxima (largura de banda de entrada e saída) é definida como a taxa de transferência máxima alcançada quando 99% das mensagens têm latência inferior a 1 segundo. Não é um limite difícil.

Fatores de desempenho

Teoricamente, a capacidade do Serviço Azure Web PubSub é limitada pelos recursos de computação: CPU, memória e rede. Por exemplo, mais conexões com o Serviço Web PubSub do Azure fazem com que o serviço use mais memória. Para um tráfego de mensagens maior (por exemplo, cada mensagem é maior que 2.048 bytes), o Serviço Web PubSub do Azure precisa gastar mais ciclos de CPU para processar o tráfego.

O custo de roteamento de mensagens também limita o desempenho. O Serviço Azure Web PubSub desempenha uma função como um agente de mensagens, que roteia a mensagem entre um conjunto de clientes. Um cenário ou API diferente requer uma política de roteamento diferente.

Para eco, o cliente envia uma mensagem para o upstream e o upstream ecoa a mensagem de volta para o cliente. Esse padrão tem o menor custo de roteamento. Mas para transmissão, envio para grupo e envio para conexão, o Serviço PubSub Web do Azure precisa procurar as conexões de destino por meio da estrutura de dados distribuída interna. Esse processamento extra usa mais CPU, memória e largura de banda de rede. Como resultado, o desempenho é mais lento.

Em resumo, os seguintes fatores afetam a capacidade de entrada e saída:

  • Tamanho da unidade (CPU/memória)

  • Número de conexões

  • Tamanho da mensagem

  • Taxa de envio de mensagens

  • Cenário de caso de uso (custo de roteamento)

Encontrar um tamanho de unidade adequado

Como você pode avaliar a capacidade de entrada/saída ou encontrar qual tamanho de unidade é adequado para um caso de uso específico?

Cada tamanho de unidade tem sua própria largura de banda máxima de entrada e largura de banda de saída. Uma experiência de usuário suave não é garantida depois que o tráfego de entrada ou saída excede o limite.

  inboundBandwidth = inboundConnections * messageSize / sendInterval
  outboundBandwidth = outboundConnections * messageSize / sendInterval
  • inboundConnections: O número de conexões que enviam a mensagem.
  • outboundConnections: O número de conexões que recebem a mensagem.
  • messageSize: O tamanho de uma única mensagem (valor médio). Uma mensagem pequena com menos de 1.024 bytes tem um impacto no desempenho semelhante a uma mensagem de 1.024 bytes.
  • sendInterval: O intervalo para enviar mensagens. Por exemplo, 1 segundo significa enviar uma mensagem a cada segundo. Um intervalo menor significa enviar mais mensagens em um período de tempo. Por exemplo, 0,5 segundo significa enviar duas mensagens a cada segundo.
  • Conexões: o limite máximo confirmado para o Serviço Azure Web PubSub para cada tamanho de unidade. As conexões que excedem o limite são limitadas.

Suponha que o upstream é poderoso o suficiente e não é o gargalo de desempenho. Em seguida, verifique a largura de banda máxima de entrada e saída para cada tamanho de unidade.

Caso prático

As seções a seguir passam por três casos de uso típicos: enviar para grupos por meio do subprotocolo Web PubSub, acionar o CloudEvent, chamar a api rest. Para cada cenário, a seção lista a capacidade atual de entrada e saída do Serviço PubSub da Web do Azure. Também explica os principais fatores que afetam o desempenho.

Em todos os casos de uso, o tamanho padrão da mensagem é de 2.048 bytes e o intervalo de envio da mensagem é de 1 segundo.

Enviar para grupos através do subprotocolo Web PubSub

O serviço suporta um subprotocolo específico chamado json.webpubsub.azure.v1, que permite que os clientes publiquem/assinem diretamente, em vez de uma viagem de ida e volta para o servidor upstream. Esse cenário é eficiente, pois nenhum servidor está envolvido e todo o tráfego passa pela conexão WebSocket cliente-serviço.

Diagrama mostrando o fluxo de trabalho enviar para o grupo.

A contagem de membros e grupos do grupo são dois fatores que afetam o desempenho. Para simplificar a análise, definimos dois tipos de grupos:

  • Grupo grande: O número do grupo é sempre 10. A contagem de membros do grupo é igual a (contagem máxima de conexão) / 10. Por exemplo, para a Unidade 1, se houver 1.000 contagens de conexão, cada grupo terá 1000 / 10 = 100 membros.
  • Grupo pequeno: Cada grupo tem 10 conexões. O número do grupo é igual a (contagem máxima de conexão) / 10. Por exemplo, para a Unidade 1, se houver 1.000 contagens de conexão, então temos 1000 / 10 = 100 grupos.

Enviar para o grupo traz um custo de roteamento para o Serviço PubSub da Web do Azure porque ele precisa localizar as conexões de destino por meio de uma estrutura de dados distribuída. À medida que as conexões de envio aumentam, o custo aumenta.

Grande grupo

Para enviar para grupo grande, a largura de banda de saída torna-se o gargalo antes de atingir o limite de custo de roteamento. A tabela a seguir lista a largura de banda máxima de saída.

Enviar para grupo grande Unidade 1 Unidade 2 Unidade 10 Unidade 50 Unidade 100 Unidade 200 Unidade 500 Unidade 1000
Ligações 1,000 2.000 10.000 50 000 100.000 200,000 500.000 1.000.000
Contagem de membros do grupo 100 200 1,000 5.000 10.000 5.000 10.000 20.000
Contagem de grupos 10 10 10 10 10 10 10 10
Mensagens de entrada por segundo 30 30 30 30 30 30 30 30
Largura de banda de entrada 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps 60 KBps
Mensagens de saída por segundo 3,000 6000 30 000 150,000 300,000 600,000 1,500,000 3,000,000
Largura de banda de saída 6 MBps 12 MBps 60 MBps 300 MBps 600 MBps 1.200 MBps 3.000 MBps 6.000 MBps
Grupo pequeno

O custo de roteamento é significativo para enviar mensagens para muitos grupos pequenos. Atualmente, a implementação do Serviço Azure Web PubSub atinge o limite de custo de roteamento na Unidade 50. Adicionar mais CPU e memória não ajuda, então a Unidade 100 não pode melhorar ainda mais por design. Se você precisar de mais largura de banda de entrada, precisará aumentar a escala para usar Premium_P2(unidade >100).

Enviar para um pequeno grupo Unidade 1 Unidade 2 Unidade 10 Unidade 50 Unidade 100 Unidade 200 Unidade 500 Unidade 1000
Ligações 1,000 2.000 10.000 50 000 100.000 200,000 500.000 1.000.000
Contagem de membros do grupo 10 10 10 10 10 10 10 10
Contagem de grupos 100 200 1,000 5.000 10.000 20.000 50 000 100.000
Mensagens de entrada por segundo 200 400 2.000 10.000 10.000 20.000 50 000 100.000
Largura de banda de entrada 400 KBps 800 KBps 4 MBps 20 MBps 20 MBps 40 MBps 100 MBps 200 MBps
Mensagens de saída por segundo 2.000 4,000 20.000 100.000 100.000 200,000 500.000 1.000.000
Largura de banda de saída 4 MBps 8 MBps 40 MBps 200 MBps 200 MBps 400 MBps 1.000 MBps 2.000 MBps

Nota

A contagem de grupos, a contagem de membros do grupo listados na tabela não são limites rígidos. Esses valores de parâmetro são selecionados para estabelecer um cenário de referência estável.

Acionando o evento na nuvem

O serviço fornece eventos do cliente para o webhook upstream usando o protocolo HTTP CloudEvents.

O Webhook Upstream

Para cada evento, ele formula uma solicitação HTTP POST para o upstream registrado e espera uma resposta HTTP.

Nota

Web PubSub também suporta HTTP 2.0 para entrega de eventos upstream. O resultado abaixo é testado usando HTTP 1.1. Se o servidor de aplicativos oferecer suporte a HTTP 2.0, o desempenho será melhor.

Eco

Nesse caso, o servidor do aplicativo grava a mensagem original novamente na resposta http. O comportamento do echo determina que a largura de banda máxima de entrada é igual à largura de banda máxima de saída. Para obter detalhes, consulte a tabela a seguir.

Eco Unidade 1 Unidade 2 Unidade 10 Unidade 50 Unidade 100 Unidade 200 Unidade 500 Unidade 1000
Ligações 1,000 2.000 10.000 50 000 100.000 200,000 500.000 1.000.000
Mensagens de entrada/saída por segundo 500 1,000 5.000 25.000 50 000 100.000 250 000 500.000
Largura de banda de entrada/saída 1 MBps 2 MBps 10 MBps 50 MBps 100 MBps 200 MBps 500 MBps 1.000 MBps

API REST

O Azure Web PubSub fornece APIs poderosas para gerenciar clientes e entregar mensagens em tempo real.

Diagrama mostrando o fluxo de trabalho geral do serviço Web PubSub usando APIs REST.

Enviar para o usuário através da API REST

O benchmark atribui nomes de usuário a todos os clientes antes que eles comecem a se conectar ao Serviço Web PubSub do Azure.

Enviar para o usuário através da API REST Unidade 1 Unidade 2 Unidade 10 Unidade 50 Unidade 100 Unidade 200 Unidade 500 Unidade 1000
Ligações 1,000 2.000 10.000 50 000 100.000 200,000 500.000 1.000.000
Mensagens de entrada/saída por segundo 180 360 1800 9,000 18 000 36,000 90,000 180,000
Largura de banda de entrada/saída 360 KBps 720 KBps 3,6 MBps 18 MBps 36 MBps 72 MBps 180 MBps 360 MBps

Transmissão através da API REST

A largura de banda é a mesma que para enviar para grupo grande.

Transmissão através da API REST Unidade 1 Unidade 2 Unidade 10 Unidade 50 Unidade 100 Unidade 200 Unidade 500 Unidade 1000
Ligações 1,000 2.000 10.000 50 000 100.000 200,000 500.000 1.000.000
Mensagens de entrada por segundo 3 3 3 3 3 3 3 3
Mensagens de saída por segundo 3,000 6000 30 000 150,000 300,000 600,000 1,500,000 3,000,000
Largura de banda de entrada 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps 6 KBps
Largura de banda de saída 6 MBps 12 MBps 60 MBps 300 MBps 600 MBps 1.200 MBps 3.000 MB 6.000MB

Próximos passos

Use estes recursos para começar a criar seu próprio aplicativo: