Compartilhar via


Testes de densidade de conexão do SignalR com Crank

por Tom FitzMacken

Aviso

Esta documentação não é para a versão mais recente do SignalR. Dê uma olhada em ASP.NET Core SignalR.

Este artigo descreve como usar a ferramenta Crank para testar um aplicativo com vários clientes simulados.

Depois que o aplicativo estiver em execução em seu ambiente de hospedagem (uma função Web do Azure, IIS ou auto-hospedada usando o Owin), você poderá testar a resposta do aplicativo a um alto nível de densidade de conexão usando a ferramenta Crank. O ambiente de hospedagem pode ser um servidor dos Serviços de Informações da Internet (IIS), um host Owin ou uma função Web do Azure. (Observação: os contadores de desempenho não estão disponíveis no Serviço de Aplicativo do Azure Aplicativos Web, portanto, você não poderá obter dados de desempenho de um teste de densidade de conexão.)

Densidade de Conexão refere-se ao número de conexões TCP simultâneas que podem ser estabelecidas em um servidor. Cada conexão TCP incorre em sua própria sobrecarga e abrir um grande número de conexões ociosas eventualmente criará um gargalo de memória.

A base de código do SignalR inclui uma ferramenta de teste de carga chamada Crank. A versão mais recente do Crank pode ser encontrada no branch de desenvolvimento no GitHub. Você pode baixar um arquivo zip da ramificação de desenvolvimento da base de código do SignalR aqui.

O Crank pode ser usado para saturar totalmente a memória do servidor para calcular o número total de conexões ociosas possíveis no hardware do servidor. Como alternativa, você também pode usar o Crank para carregar o servidor sob uma determinada quantidade de pressão de memória, aumentando as conexões até que uma contagem específica ou um limite de memória específico seja atingido.

Ao testar, é importante usar clientes remotos para evitar qualquer concorrência por recursos (ou seja, conexões TCP e memória). Monitore os clientes para garantir que eles não estejam atingindo gargalos que possam impedir que o servidor atinja sua capacidade total (memória ou CPU). Talvez seja necessário aumentar o número de clientes para carregar totalmente o servidor.

Executando um teste de densidade de conexão

Esta seção descreve as etapas necessárias para executar um teste de densidade de conexão em um aplicativo SignalR.

  1. Baixe e compile o branch de desenvolvimento da base de código do SignalR. Em um prompt de comando, navegue até <diretório> do projeto\src\Microsoft.AspNet.SignalR.Crank\bin\debug.
  2. Implante seu aplicativo no ambiente de hospedagem pretendido. Anote o ponto de extremidade que seu aplicativo usa; por exemplo, no aplicativo criado no tutorial Introdução, o ponto de extremidade é http://<yourhost>:8080/signalr.
  3. Instale contadores de desempenho do SignalR no servidor. Se o aplicativo estiver em execução no Azure, consulte Usando contadores de desempenho do SignalR em uma função Web do Azure.

Depois de baixar e criar a base de código e instalar contadores de desempenho no host, a ferramenta de linha de comando Crank pode ser encontrada na src\Microsoft.AspNet.SignalR.Crank\bin\Debug pasta .

As opções disponíveis para a ferramenta Crank incluem:

  • /?: Mostra a tela de ajuda. As opções disponíveis também serão exibidas se o parâmetro url for omitido.
  • /URL: a URL para conexões do SignalR. Este parâmetro é necessário. Para um aplicativo SignalR usando o mapeamento padrão, o caminho terminará em "/signalr".
  • /Transport: o nome do transporte usado. O padrão é auto, que selecionará o melhor protocolo disponível. As opções incluem WebSockets, ServerSentEventse LongPolling (ForeverFrame não é uma opção para o Crank, já que o cliente .NET em vez da Internet Explorer é usado). Para obter mais informações sobre como o SignalR seleciona transportes, consulte Transportes e fallbacks.
  • /BatchSize: o número de clientes adicionados em cada lote. O padrão é 50.
  • /ConnectInterval: o intervalo em milissegundos entre a adição de conexões. O padrão é 500.
  • /Connections: o número de conexões usadas para testar a carga do aplicativo. O padrão é 100 mil.
  • /ConnectTimeout: o tempo limite em segundos antes de anular o teste. O padrão é 300.
  • MinServerMBytes: os megabytes mínimos de servidor a serem alcançados. O padrão é 500.
  • SendBytes: o tamanho do conteúdo enviado ao servidor em bytes. O padrão é 0.
  • SendInterval: o atraso em milissegundos entre as mensagens para o servidor. O padrão é 500.
  • SendTimeout: o tempo limite em milissegundos para mensagens para o servidor. O padrão é 300.
  • ControllerUrl: a URL em que um cliente hospedará um hub do controlador. O padrão é nulo (sem hub do controlador). O hub do controlador é iniciado quando a sessão do Crank é iniciada; nenhum contato adicional entre o hub do controlador e o Crank é feito.
  • NumClients: o número de clientes simulados para se conectar ao aplicativo. O padrão é um.
  • Logfile: o nome do arquivo de log para a execução de teste. O padrão é crank.csv.
  • SampleInterval: o tempo em milissegundos entre exemplos de contador de desempenho. O padrão é 1000.
  • SignalRInstance: o nome da instância para os contadores de desempenho no servidor. O padrão é usar o estado de conexão do cliente.

Exemplo

O comando a seguir testará um site chamado pfsignalr no Azure que hospeda um aplicativo na porta 8080 com um hub chamado "ControllerHub", usando 100 conexões.

crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr