2010-09-16 4 views
5

Sono interessato a conoscere come le persone eseguono le distribuzioni e gli aggiornamenti di app Webapp Lisp (soprattutto gli aggiornamenti) nella produzione.Feedback desiderato: strategie di distribuzione senza interruzioni per la produzione di applicazioni web Lisp

In Ruby molti, me compreso, usano Capistrano per le implementazioni. Fornisce una buona indiretta e la possibilità di eseguire comandi in remoto e, soprattutto (a mio avviso) la possibilità di eseguire il rollback su una base di codice funzionante.

So che l'idea di un lungo processo Lisp connesso tramite Swank attraverso un tunnel SSH e modificato sul posto è un'idea popolare che è stata respinta, ma non ho bevuto Koolaid, soprattutto a causa del problema di aggiornare un processo di stato (che sembra chiedere problemi se qualcosa va storto, come imprevisti mancati accoppiamenti tra lo stato corrente in memoria e le definizioni di nuovi oggetti che saranno presto in memoria).

Dato che è possibile creare applicazioni web quasi senza stato (o completamente) utilizzando hunchentoot (o inserire qui il proprio server di app Lisp preferito), sembra che usare qualcosa come Capistrano possa essere usato per aggiornamenti non distruttivi al codice Lisp anche se il I processi Lisp si nascondono dietro nginx nel suo canale upstream e se è possibile coreografare correttamente rimuovendo i processi hunchentoot e ruotarli di nuovo dopo un aggiornamento al codice, ad esempio, riportarli indietro lasciando almeno un processo hunchentoot in esecuzione nel cluster in un dato momento (CGI o mod_lisp potrebbero essere usati, ma non sono particolarmente interessato a questo approccio - anche se questo approccio ti piace, per favore almeno dì qualcosa, voglio imparare). Ad esempio, utilizzando Passenger (che confronta arance con mele dato che avvia i processi su richiesta), tmp/restart.txt viene toccato e il server delle app viene riavviato con codice appena aggiornato, senza interruzioni dal punto di vista dell'utente.

Bene, questo è un po 'un diverbio, e in realtà sto per provare tutto questo, ma mi piacerebbe avere un feedback su queste idee dagli altri. Forse hai un'idea migliore.

Grazie

+1

Questa domanda potrebbe funzionare meglio con i programmatori? – blueberryfields

+0

@blue: Probabilmente no. È una questione abbastanza localizzata, e non propriamente soggettiva. –

risposta

1

È possibile eseguire senza interruzioni (zero downtime) implementazioni scrivendo script Capistrano per un compensatore di front-end/carico intelligente come HAProxy che tira app server fuori turno, li riavvia con il codice appena distribuito e li rimette nel mix.

Arrotolando in modo incrementale i server delle app mentre sono fuori dalla rotazione in tempo reale durante la produzione, è possibile ottenere distribuzioni uniformi.

Ciò non teme di avere loop di server delle applicazioni persistenti con uno stato specifico, che sembra spaventoso per esattamente i motivi che hai menzionato. REPL sono utili per il debugging e il tweaking, ma il tuo istinto di eseguire il codice su disco sembra fondato.

+0

Winfield, grazie per l'input premuroso. Apprezzato. – m7d