Mensagens e conexões no Serviço do Azure SignalR

O modelo de cobrança do Serviço SignalR do Azure é 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 cobrança.

Formatos de mensagem

O Serviço do Azure SignalR dá suporte aos mesmos formatos que o ASP.NET Core SignalR: JSON e MessagePack.

Tamanho da mensagem

Os seguintes limites se aplicam a mensagens do Serviço do 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 menos de 1 MB é recomendado.
  • Mensagens do servidor:
    • Não há limite para o tamanho da mensagem do servidor, mas menos de 16 MB é recomendado.
    • 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 manipulam a divisão e a montagem de mensagens. Não é necessário nenhum esforço por parte do desenvolvedor.

Mensagens grandes afetam negativamente o desempenho do sistema de 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 cobrança

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. Somente as mensagens de saída do Serviço SignalR do Azure são contadas para cobrança. Mensagens ping entre clientes e servidores são ignoradas.

Mensagens maiores do 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ê tem 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 de aplicativos, 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 SignalR do Azure cria conexões de servidor de aplicativos e cliente. Por padrão, cada servidor de aplicativos começa com cinco conexões iniciais por hub e cada cliente tem uma conexã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 do servidor: conecta o Serviço do Azure SignalR e o servidor de aplicativos.
  • Conexão de cliente: conecta o Serviço do Azure SignalR 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 foi projetado para solução de problemas.
  • Conexão de rastreamento dinâmico: conecta-se ao ponto de extremidade de rastreamento dinâmico e recebe rastreamentos dinâmicos do Serviço do Azure SignalR.

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

O ASP.NET SignalR calcula conexões de servidor de maneira diferente. Ele inclui um hub padrão, além dos hubs que você definir. Por padrão, cada servidor de aplicativos precisa de mais cinco conexões de servidor iniciais. A contagem de conexões iniciais do hub padrão se mantém consistente com a dos 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. Assim, você pode ver alterações no número de conexões de servidor em seu serviço em execução.