es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo equilibrar la carga de un socket conectado?

Necesito ayuda con mi problema: estoy trabajando en un entorno de servidor de Windows 2019. Tengo una solución implementada que requiere un protocolo de conexión entre el cliente y el servidor: se abre un socket en TCP/IP y el cliente inicia una sesión, luego hay un diálogo entre el cliente y el servidor: el diálogo siempre es iniciado por el cliente. El cliente también actúa como servidor porque expone un servicio a través de internet que requiere abrir y cerrar el socket durante una sesión de verificación de PIN. Aquí hay una vista lógica actual de mi sistema en su lugar:

Como necesito tener un socket conectado entre mi cliente y mi servicio BE, estoy obligado a tener una afinidad en su lugar: estoy buscando una forma de hacer que cualquiera de mis dos clientes sea capaz de emitir comandos a mi servicio BE y recibir una respuesta como si estuvieran conectados a través de un socket persistente. Necesito una solución que no introduzca un SPOF: por ejemplo, estaba pensando en usar un HA PROXY pero si hay un problema con él, podría perder todos mis servicios BE. La pregunta es: ¿hay alguna manera de poner en marcha un mediador entre mis clientes y mis servicios BE para que cualquier cliente pueda emitir comandos y recibir respuestas en una sesión abierta existente y también preservar la alta disponibilidad de mi sistema?

La solución final sería algo así:

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola! Según su vista lógica actual del sistema, parece que está utilizando un modelo directo de servidor-cliente con un socket TCP/IP conectado para la comunicación. Sin embargo, está buscando implementar una solución que permita a cualquiera de sus clientes emitir comandos y recibir respuestas de su servicio BE, al mismo tiempo que mantiene una alta disponibilidad del sistema.

    Una solución potencial a este problema es utilizar un balanceador de carga frente a su servicio BE. HAProxy es una buena opción para ello, pero como mencionó, podría introducir un Punto Único de Fallo (SPOF). Para evitar esto, podría configurar múltiples instancias del balanceador de carga en una configuración activa-activa, permitiendo que cada instancia comparta la carga de solicitudes entrantes y responda a cualquier problema o falla.

    Además del balanceador de carga, también podría utilizar una cola de mensajes o un mediador similar entre sus clientes y el servicio BE. Esto permitiría que múltiples clientes se conecten a la misma cola y envíen y reciban mensajes a través de ella, preservando los requisitos de sesión conectada y permitiendo una fácil escalabilidad y alta disponibilidad. RabbitMQ, Apache Kafka y AWS SQS son todas opciones populares para soluciones de colas de mensajes.

    En resumen, una solución potencial a su problema podría involucrar el uso de un balanceador de carga y una cola de mensajes entre sus clientes y el servicio BE, permitiendo que múltiples clientes se conecten y envíen/reciban mensajes al mismo tiempo que se mantiene una alta disponibilidad y escalabilidad del sistema. ¡Buena suerte con su implementación!

Comments are closed.