Pruebas de densidad de la conexión de SignalR con Crank

por Tom FitzMacken

Advertencia

Esta documentación no es para la última versión de SignalR. Eche un vistazo a ASP.NET Core SignalR.

Este artículo describe cómo usar la herramienta Crank para probar una aplicación con varios clientes simulados.

Una vez que su aplicación esté funcionando en su entorno de hospedaje (ya sea un rol web de Azure, IIS o autohospedado usando Owin), puede probar la respuesta de la aplicación a un nivel general de densidad de conexión usando la herramienta Crank. El entorno de hospedaje puede ser un servidor de Internet Information Services (IIS), un host de Owin o un rol web de Azure. (Nota: Los contadores de rendimiento no están disponibles en Azure App Service Web Apps, por lo que no podrá obtener datos de rendimiento de una prueba de densidad de conexión).

La densidad de conexión se refiere al número de conexiones TCP simultáneas que pueden establecerse en un servidor. Cada conexión TCP incurre en su propia sobrecarga, y la apertura de un gran número de conexiones inactivas acabará creando un cuello de botella de memoria.

El código base de SignalR incluye una herramienta de prueba de carga llamada Crank. La versión más reciente de Crank se puede encontrar en la rama de desarrollo en GitHub. Puede descargar un archivo Zip de la rama de desarrollo de la base de código de SignalR aquí.

Use esta opción para saturar completamente la memoria del servidor y calcular así el número total de conexiones inactivas posibles en el hardware del servidor. Alternativamente, también puede usar Crank para probar la carga del servidor bajo cierta presión de memoria, aumentando las conexiones hasta alcanzar un recuento específico o un umbral de memoria determinado.

Al realizar las pruebas, es importante usar clientes remotos para evitar cualquier competencia por los recursos (es decir, conexiones TCP y memoria). Supervise los clientes para asegurarse de que no se producen cuellos de botella que impidan que el servidor alcance su plena capacidad (memoria o CPU). Es posible que tenga que aumentar el número de clientes para cargar completamente el servidor.

Ejecución de una prueba de densidad de conexión

Esta sección describe los pasos necesarios para ejecutar una prueba de densidad de conexión en una aplicación de SignalR.

  1. Descargue y compile la rama de desarrollo de la base de código de SignalR. En un símbolo del sistema, navegue hasta <directorio del proyecto>\src\Microsoft.AspNet.SignalR.Crank\bin\debug.
  2. Implemente su aplicación en el entorno de hospedaje previsto. Anote el punto de conexión que usa su aplicación; por ejemplo, en la aplicación creada en el Tutorial de introducción, el punto de conexión es http://<yourhost>:8080/signalr.
  3. Instale los contadores de rendimiento de SignalR en el servidor. Si su aplicación se ejecuta en Azure, consulte Usar contadores de rendimiento de SignalR en un rol web de Azure.

Una vez que haya descargado y compilado el código base, e instalado los contadores de rendimiento en su host, podrá encontrar la herramienta de línea de comandos de Crank en la carpeta src\Microsoft.AspNet.SignalR.Crank\bin\Debug.

Las opciones disponibles para la herramienta Crank incluyen:

  • /?: muestra la pantalla de ayuda. Las opciones disponibles también se muestran si se omite el parámetro Url.
  • /Url: la dirección URL de las conexiones de SignalR. Este parámetro es obligatorio. Para una aplicación de SignalR usando la asignación predeterminada, la ruta terminará en "/signalr".
  • /Transport: nombre del transporte utilizado. El predeterminado es auto, que seleccionará el mejor protocolo disponible. Las opciones incluyen WebSockets, ServerSentEvents y LongPolling (ForeverFrame no es una opción para Crank, ya que se usa el cliente .NET en lugar de Internet Explorer). Para más información sobre cómo selecciona SignalR los transportes, consulte Transportes y reservas.
  • /BatchSize: el número de clientes agregados en cada lote. El valor predeterminado es 50.
  • /ConnectInterval: intervalo en milisegundos entre la adición de conexiones. El valor predeterminado es 500.
  • /Connections: el número de conexiones que se usan para probar la aplicación. El valor predeterminado es 100 000.
  • /ConnectTimeout: tiempo de espera en segundos antes de anular la prueba. El valor predeterminado es 300.
  • MinServerMBytes: los megabytes de servidor mínimos que se van a alcanzar. El valor predeterminado es 500.
  • SendBytes: tamaño de la carga enviada al servidor en bytes. El valor predeterminado es 0.
  • SendInterval: retraso en milisegundos entre mensajes al servidor. El valor predeterminado es 500.
  • SendTimeout: tiempo de espera en milisegundos para los mensajes en el servidor. El valor predeterminado es 300.
  • ControllerUrl: la dirección URL donde un cliente hospedará un hub de controlador. De manera predeterminada es null (sin hub de controlador). El hub del controlador se pone en marcha cuando se inicia la sesión de Crank; no se produce ningún otro contacto entre el hub del controlador y Crank.
  • NumClients: el número de clientes simulados para conectar a la aplicación. El valor predeterminado es uno.
  • Logfile: el nombre del archivo de registro para la ejecución de pruebas. El valor predeterminado es crank.csv.
  • SampleInterval: el tiempo en milisegundos entre ejemplos de contadores de rendimiento. El valor predeterminado es 1000.
  • SignalRInstance: el nombre de instancia de los contadores de rendimiento en el servidor. El valor predeterminado es usar el estado de conexión del cliente.

Ejemplo

El siguiente comando probará un sitio llamado pfsignalr en Azure que hospeda una aplicación en el puerto 8080 con un hub llamado "ControllerHub", usando 100 conexiones.

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