mecanismo de actualización en línea para un servidor de aplicaciones C ++

StackOverflow https://stackoverflow.com/questions/3693279

  •  02-10-2019
  •  | 
  •  

Pregunta

No se pudo encontrar nada sobre este tema.

Tengo una aplicación de servidor TCP de Windows C ++ que quiero actualización de vez en cuando.


Como es obvio entender esto introduce un problema - el servidor debe ser 24/7 desde la perspectiva de los usuarios
. Cuando la actualización, también se desea mantener las conexiones TCP actuales con los usuarios.


He estado pensando acerca de un sistema de módulos, al igual que, por ejemplo, el módulo de manipulación toma residiría en "sockets.dll", la lógica del servidor residiría en "logic.dll".
El ir para este enfoque parece como abrir la caja de Pandora;
 - ¿Cómo voy a hacer que el real "de intercambio" de los módulos? Imaginar que X subprocesos de trabajo siguen enviando datos desde un módulo a otro - al intercambiar Voy a necesitar una forma (la luz y rápido) para detener / pausar ellos; señales
tal vez?  - Versión de Protocolo, o incluso funciones de la firma podría cambiar cuando se actualiza. Cómo manejar eso?
 -. Otros problemas tales como errores lógicos inadvertidas
 -. ¿Quién sabe tipo de otros problemas surgirán


Además de lo anterior tengo preocupaciones como ¿cómo actualizo dicen que 10 servidores? Es decir, todo lo que están conectados entre sí, comunicarse.
Si la actualización introduce una modificación del protocolo que podría causar grandes problemas, y en tal caso voy a tener que actualizar todo el conjunto (de servidores) en su conjunto; parada de la toda la operación? Eso no suena bien, en absoluto! ¿Cómo puedo hacer eso? ¿Qué concepto (s) me estoy perdiendo aquí y cómo puedo aprender / ellos?


¿Hay algo que pueda hacer al respecto?
¿Qué harías? ¿Ha hecho algo así?
¿Sabe usted de cualquier mecanismo / artículo / proyecto / fuente-ejemplo de / etc' que resuelve el problema?

Cualquier consejo valioso es muy appriciated !!

¿Fue útil?

Solución

En cuanto a los cambios de protocolo, te recomendamos la versión de su protocolo. Al comienzo de una conexión entre los servidores participantes, o bien tener el iniciador o el receptor (no importa qué, creo) anunciar la nueva versión del protocolo que entiende, y luego el otro responde secundarios en especie. Se caen de nuevo a la versión más reciente que ambos entender.

Sí, esto significa mantener código para ambas versiones del protocolo por un tiempo, pero se puede retirar el viejo código una vez que sabes todos de sus servidores se actualizan y trabajar con el nuevo protocolo.

Asumiendo que tiene el control sobre todas las posibles software de cliente, así, se puede hacer lo mismo con sus clientes. Por supuesto, esto puede implicar el mantenimiento de código de protocolo de edad más, si usted no tiene control sobre cuándo actualizar los usuarios.

Otros consejos

He aquí una idea:

  • Antiguo actualización de descargas de la versión y empieza a él.
  • Versión antigua deja de aceptar nuevas conexiones mediante el envío de ellas a la versión actualizada (que escucha en un puerto diferente).
  • versión antigua se apaga cuando termina con sus conexiones.
  • de la nueva versión detecta cuando se cierra versión antigua e interruptores puertos.

Básicamente, la idea es tener las dos versiones que funcionan al mismo tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top