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.
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.
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.
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.
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: