Domanda

non ho trovato nulla su questo argomento.

Ho un Windows TCP C ++ applicazione server che voglio aggiornare di volta in volta.


Come si capisce questo, ovviamente, introduce un problema - il server dovrebbe essere 24/7 dal punto di vista degli utenti
. Durante l'aggiornamento, è anche desidera mantenere le connessioni TCP in corso con gli utenti.


Ho pensato a un modulo simile sistema in modo, ad esempio il modulo di gestione di presa sarebbe risiedere "sockets.dll", la logica del server che risiedono in "logic.dll".
Andando per questo approccio sembra come la scatola di apertura di Pandora;
 - Come faccio a fare il vero e proprio "scambio" dei moduli? Immaginate che X thread di lavoro mantengono l'invio di dati da un modulo all'altro - quando scambiando avrò bisogno di un modo (luce e veloce) per arresto / metterli in pausa; segnali forse?
 - Protocol versione, o funzioni anche la firma potrebbe cambiare quando l'aggiornamento. Come gestire questo?
 -. Altri problemi, come gli insetti logica inosservato
 -. Chi sa sorta di altri problemi sorgeranno


Oltre a quanto sopra ho preoccupazioni come come posso aggiornare dico 10 server? Voglio dire, sono tutti collegati tra loro, comunicare.
Se l'aggiornamento introduce una modifica del protocollo potrebbe causare problemi enormi, e in tal caso avrò bisogno di aggiornare l'intero cluster (di server) nel suo complesso; arresto l'intera operazione? Non mi sembra giusto, a tutti! Come lo faccio? Quale concetto di (s) mi manca qui e come faccio a sapere che / loro?


C'è qualcosa che posso fare?
Cosa faresti? Avete fatto una cosa simile?
Sapete di qualsiasi meccanismo / article / progetto / source-esempio / etc' che risolve il problema?

Qualche consiglio prezioso è altamente appriciated !!

È stato utile?

Soluzione

In termini di cambiamenti di protocollo, vi consiglio la versione il protocollo. All'inizio di un collegamento tra i server partecipanti, hanno o l'iniziatore o il ricevitore (in realtà non importa quale, credo) annunciare la più recente versione del protocollo capisce, e poi l'altro risponde laterali in natura. Cadono torna alla versione più recente che sia a capire.

Sì, questo significa mantenere il codice per entrambe le versioni del protocollo per un po ', ma si può andare in pensione il vecchio codice una volta che sai tutti dei server vengono aggiornati e di lavoro con il nuovo protocollo.

Supponendo di avere il controllo su tutte le possibili software client, così, si può fare lo stesso con i vostri clienti. Naturalmente, questo può comportare il mantenimento di vecchio codice di protocollo più a lungo, se non si ha il controllo su quando aggiornare gli utenti.

Altri suggerimenti

Ecco un'idea:

  • vecchia versione download l'aggiornamento e lo avvia.
  • Vecchia versione ferma accettare nuove connessioni da loro trasmissione alla versione aggiornata (in ascolto su una porta diversa).
  • versione vecchia, si chiude quando finisce con le sue connessioni.
  • Nuove Rileva versione quando i vecchi si chiude la versione e gli interruttori porte.

In sostanza, l'idea è quella di avere entrambe le versioni in esecuzione allo stesso tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top