Mensagens e conexões no Serviço Azure SignalR

O modelo de cobrança do Serviço Azure SignalR é baseado no número de conexões e no número de mensagens de saída do serviço. Este artigo explica como as mensagens e conexões são definidas e contadas para faturamento.

Formatos de mensagem

O Serviço Azure SignalR suporta os mesmos formatos que ASP.NET Core SignalR: JSON e MessagePack.

Tamanho da mensagem

Os seguintes limites se aplicam às mensagens do Serviço Azure SignalR:

  • Mensagens do cliente:
    • Para sondagem longa ou eventos do lado do servidor, o cliente não pode enviar mensagens maiores que 1 MB.
    • Não há limite de tamanho para WebSocket para serviço.
    • O servidor de aplicativos pode definir um limite para o tamanho da mensagem do cliente. O padrão é 32 KB. Para obter mais informações, consulte Considerações de segurança no ASP.NET Core SignalR.
    • Para serverless, o tamanho da mensagem é limitado pela implementação upstream, mas recomenda-se menos de 1 MB.
  • Mensagens do servidor:
    • Não há limite para o tamanho da mensagem do servidor, mas recomenda-se menos de 16 MB.
    • O servidor de aplicativos pode definir um limite para o tamanho da mensagem do cliente. O padrão é 32 KB. Para obter mais informações, consulte Considerações de segurança no ASP.NET Core SignalR.
    • Sem servidor:

Para clientes WebSocket, mensagens grandes são divididas em mensagens menores que não têm mais de 2 KB cada e transmitidas separadamente. Os SDKs lidam com a divisão e montagem de mensagens. Nenhum esforço do desenvolvedor é necessário.

Mensagens grandes afetam negativamente o desempenho das mensagens. Use mensagens menores sempre que possível e teste para determinar o tamanho ideal da mensagem para cada cenário de caso de uso.

Como as mensagens são contadas para faturamento

As mensagens enviadas para o serviço são mensagens de entrada e as mensagens enviadas para fora do serviço são mensagens de saída. Apenas as mensagens de saída do Serviço Azure SignalR são contabilizadas para faturação. As mensagens ping entre clientes e servidores são ignoradas.

Mensagens maiores que 2 KB são contadas como várias mensagens de 2 KB cada. O gráfico de contagem de mensagens no portal do Azure é atualizado a cada 100 mensagens por hub.

Por exemplo, imagine que você tenha um servidor de aplicativos e três clientes:

  • Quando o servidor de aplicativos transmite uma mensagem de 1 KB para todos os clientes conectados, a mensagem do servidor de aplicativos para o serviço é considerada uma mensagem de entrada gratuita. As três mensagens enviadas do serviço para cada um dos clientes são mensagens de saída e são cobradas.

  • Quando o cliente A envia uma mensagem de entrada de 1 KB para o cliente B, sem passar pelo servidor do aplicativo, a mensagem é uma mensagem de entrada gratuita. A mensagem roteada do serviço para o cliente B é cobrada como uma mensagem de saída.

  • Se você tiver três clientes e um servidor de aplicativos, quando um cliente enviar uma mensagem de 4 KB para a transmissão do servidor para todos os clientes, a contagem de mensagens cobradas será oito:

    • Uma mensagem do serviço para o servidor de aplicativos.
    • Três mensagens do serviço para os clientes. Cada mensagem é contada como duas mensagens de 2 KB.

Como as conexões são contadas

O Serviço Azure SignalR cria conexões de cliente e servidor de aplicativos. Por predefinição, cada servidor de aplicação começa com cinco ligações iniciais por hub e cada cliente tem uma ligação de cliente.

Por exemplo, suponha que você tenha dois servidores de aplicativos e defina cinco hubs no código. A contagem de conexões do servidor é 50: (2 servidores de aplicativos * 5 hubs * 5 conexões por hub).

A contagem de conexões mostrada no portal do Azure inclui conexões de servidor, cliente, diagnóstico e rastreamento em tempo real. Os tipos de conexão são definidos na lista a seguir:

  • Conexão com o servidor: conecta o Serviço Azure SignalR e o servidor do aplicativo.
  • Conexão de cliente: conecta o Serviço SignalR do Azure e o aplicativo cliente.
  • Conexão de diagnóstico: um tipo especial de conexão de cliente que pode produzir um log mais detalhado, o que pode afetar o desempenho. Esse tipo de cliente é projetado para solução de problemas.
  • Conexão de rastreamento ao vivo: conecta-se ao ponto de extremidade de rastreamento dinâmico e recebe rastreamentos em tempo real do Serviço SignalR do Azure.

Uma conexão de rastreamento em tempo real não é contada como uma conexão de cliente ou como uma conexão de servidor.

ASP.NET SignalR calcula as conexões do servidor de uma maneira diferente. Ele inclui um hub padrão, além dos hubs que você define. Por padrão, cada servidor de aplicativos precisa de mais cinco conexões iniciais de servidor. A contagem de conexão inicial para o hub padrão permanece consistente com outros hubs.

O serviço e o servidor de aplicativos continuam sincronizando o status da conexão e fazendo ajustes nas conexões do servidor para obter melhor desempenho e estabilidade do serviço. Portanto, você pode ver alterações no número de conexões de servidor em seu serviço em execução.