2014-11-24 26 views
5

Va bene, quindi ho una domanda di Primavera che prende in una rappresentazione di rete e stivali macchine virtuali per rappresentare la rete che è stata approvata in.Qual è il modo migliore per "ripristinare" le modifiche?

Esso utilizza un'API di basso livello per far apparire le macchine virtuali, non esiste un database coinvolti.

Quello che devo capire come fare è gestire la situazione in cui un utente invia un modello di rete a 10 nodi (o qualsiasi numero) e l'applicazione passa e crea la rete (avviando VM), se un nodo fallisce all'avvio voglio essere in grado di reagire a questo. Mi piacerebbe essere in grado di ripristinare le mie modifiche (cioè distruggere tutti i nodi che sono stati creati).

Mi è stato detto che ho bisogno di esaminare "Transazioni" ma non sono sicuro che si applichi o meno a questo scenario quando non sto usando un database.

Come nota a margine, ho la logica per eliminare i nodi se un utente invia quella richiesta.

La mia domanda è: come gestirlo?

Inoltre, si tratta del migliore overflow di stack per questa domanda?

+0

c'è solo uno Stack * Overflow *, e sì, questo sembra lo Stack appropriato * Exchenge * per questa domanda :) È una buona cosa, a proposito. Il mio istinto sarebbe quello di utilizzare anche l'esistente framework 'Transaction' - perché, come suggerite, è progettato per fare esattamente quello di cui state parlando qui, ma per quanto riguarda le operazioni del database. Sospetto che tu possa adattarlo per farlo funzionare anche per te qui. – drewmoore

+1

Forse [Computer Science StackExchange] (http://cs.stackexchange.com/) è una scelta migliore. – hfontanez

+0

Whoops! Le mie scuse, volevo dire "StackExchange" :) – envinyater

risposta

4

Sembra che si stia cercando un comportamento transazionale e, in particolare, per l'atomicità ("tutto o niente"). Ma di solito "transazione" connota certe garanzie (in particolare intorno alle proprietà ACID) che saranno difficili o impossibili da ottenere laddove sono coinvolte scale temporali a livello umano dell'ordine dei minuti.

Probabilmente "il flusso di lavoro con compensazione per errori" è più quello che vorresti cercare qui.

Lo implementerei manualmente, forse con il supporto degli strumenti (ad esempio i motori del flusso di lavoro). Avvia un processo per spawnare la tua rete e tieni traccia dei progressi attuali, come le macchine virtuali create, le macchine virtuali in corso, ecc. Se ci sono errori che richiedono un rollback, allora hai un altro processo che esegue una pulizia. Il comportamento del processo di pulitura stesso potrebbe non riuscire, quindi potrebbe ritentare i vari passaggi un paio di volte prima di generare un rapporto che dice "questo passaggio di pulitura non è riuscito".

Se sono coinvolte risorse condivise, è necessario implementare anche una sorta di meccanismo di isolamento. A volte questo è abbastanza facile - ad esempio, DHCP ti aiuta a evitare IP duplicati. Se stai aggiornando un file di zona DNS, ti consigliamo di sincronizzare l'accesso a tale file per evitare scritture simultanee. Etc.

+0

Penso di essere d'accordo con te, Willie Wheeler. – hfontanez