backplane c# asp.net .net real-time signalr

c# - signalr backplane sql



Cómo resolver las limitaciones de SignalR en el escalado para backplane (1)

Un backplane introducirá retrasos en la entrega de mensajes, que no funcionarán bien para trabajos de baja latencia. Si es absolutamente necesario tener múltiples servidores para manejar a sus clientes, y debe tener una latencia mínima, entonces es probable que un backplane no funcione para usted.

Sin embargo, echa un vistazo a esta conversación en los foros de ASP. El cartel ve latencias promedio de alrededor de 25 ms para 60,000 mensajes por segundo a 3,000 clientes conectados en un servidor .

Como suele ser el caso, la compensación aquí es entre latencia y complejidad. La solución óptima es que los mensajes se enruten solo a los servidores que contienen los clientes de destino. Para lograrlo, necesita una forma de rastrear cada conexión de cliente, lidiar con las reconexiones a diferentes servidores, etc. Probablemente pueda resolver esto con unas pocas decenas de horas de programación de trabajos forzados, pero al hacerlo, va a romper la mayor parte de Lo que hace que SignalR sea útil.

Para alternativas, lo primero que viene a la mente es ZeroMQ . Un poco más de trabajo, especialmente si sus clientes están basados ​​en el navegador, pero la baja latencia y el alto rendimiento son objetivos del proyecto para ZeroMQ. Sin embargo, deberá manejar la ampliación de escala usted mismo ... y volverá a rastrear los puntos de conexión a través de múltiples servidores y reconectarse.

Si ninguno de estos resuelve sus problemas, es posible que tenga que buscar cambiar su arquitectura. Un método común para los MMO es que los clientes relacionados se conecten a los mismos servidores para reducir los requisitos de comunicación entre servidores. Los clientes que legítimamente necesitan comunicar datos en tiempo real se reúnen en un solo servidor, lo que no tiene que preocuparse por los problemas del plano posterior. Luego, este servidor se comunica con el servidor ''Maestro'' solo lo que se requiere para mantener el estado mundial y así sucesivamente.

Planifique su arquitectura para reducir los problemas antes de que empiecen ... pero no pase semanas trabajando en algo que podría no ser necesario. Haga algunas pruebas en SignalR y vea qué efecto tiene el backplane en la latencia antes de sumergirse en el abismo.

Utilizo ASP.NET MVC y C #. Encontré SignalR para transferir datos en tiempo real, pero signalR tiene algunos límites.

De acuerdo con el tema para esto :

Al usar un backplane, el rendimiento máximo de mensajes es menor que cuando los clientes hablan directamente a un solo nodo de servidor. Esto se debe a que el plano posterior reenvía cada mensaje a cada nodo, por lo que el plano posterior puede convertirse en un cuello de botella. Si esta limitación es un problema depende de la aplicación. Por ejemplo, aquí hay algunos escenarios típicos de SignalR:

  • Difusión del servidor (p. Ej., Indicador de cotización): los backplanes funcionan bien en este escenario, porque el servidor controla la velocidad a la que se envían los mensajes.
  • Cliente-a-cliente (por ejemplo, chat): en este escenario, el backplane podría ser un cuello de botella si la cantidad de mensajes aumenta con la cantidad de clientes; es decir, si la tasa de mensajes aumenta proporcionalmente a medida que más clientes se unen.
  • Tiempo real de alta frecuencia (por ejemplo, juegos en tiempo real): No se recomienda un plano posterior para este escenario.

Mi proyecto necesita alta frecuencia en tiempo real (por ejemplo, juegos en tiempo real).

También necesito video chat en tiempo real

Mi escenario:

Tengo un servidor maestro y varios servidores esclavos, los clientes se conectan a los servidores esclavos y los servidores esclavos se conectan al servidor maestro.

Ejemplo: Servidor Slave-1 y servidor Slave-2 conectados al servidor Maestro, cliente-A y cliente-B conectados a Esclavo-1 un cliente-C y cliente-D conectados a Esclavo-2,

cliente-A enviar mensaje o datos o en chat en vivo con cliente-D

¿Cómo puedo implementar este escenario?

[Actualización-1]

Si no uso signalR para ese problema, entonces, ¿qué debo usar?

[Actualización-2]

En mi caso, el servidor maestro actúa como un enrutador y el servidor esclavo actúa como un conmutador. Los clientes conectados al conmutador y el conmutador conectados al enrutador. Si el cliente A envía un paquete de datos al cliente C, el paquete de datos debe enviarse al enrutador y el enrutador maneja el paquete de datos. Más de 2000 posibles servidores esclavos y el número de usuarios para cada servidor es más de 10.000.

Gracias.