Progettazione dell'architettura per un'applicazione Web che esegue connessioni SSH a server remoti

1

Questo è un seguito alla mia domanda qui .

Devo creare una GUI web per una libreria che gestisce i cluster remoti tramite SSH.

Il punto principale è che questa libreria genera thread e sottoprocessi (Popen) internamente (per le connessioni SSH), quindi penso di essere I / O vincolato da queste connessioni SSH. Voglio impedire che il mio server scenda non appena ricevo 20-50 richieste simultanee.

Non ho idea di come procedere con l'architettura. Non so se riuscirò a risolverlo a livello di server con un server più potente (gevent ??) o se dovrei fare qualcosa di simile usando thread in background (reattore torto ??)

Alcune considerazioni:

  • Lavoro con Django in modo che il server (se finalmente ne abbia uno solo) deve essere WSGI.
  • Ho bisogno di entrambe le chiamate bloccanti e non bloccanti via SSH.
  • Probabilmente avrò bisogno anche di uno stato condiviso tra richieste successive.
posta Adrián 29.09.2013 - 16:29
fonte

1 risposta

3

Vorresti davvero essere attento a separare le preoccupazioni qui - fare in modo che la tua app web effettui richieste a una coda di messaggi, fare in modo che i componenti di esecuzione elaborino i messaggi dalla coda. Questo rende anche la sicurezza molto meno da incubo perché puoi spingere le cose a gestire le attività SSH al di fuori del livello web.

La risposta originale [sopra] era un po 'concisa e non rispondeva ad alcune domande.

  • In che modo questo evita i thread di connessione SSH che esauriscono il server? Lo eviterà perché puoi facilmente limitare la maggior parte delle code di messaggi per evitarlo. E puoi facilmente inserire i dipendenti di back-end se stai esaurendo la configurazione iniziale senza modifiche sostanziali nella tua applicazione.

  • Come posso avere uno stato condiviso tra le richieste? Nello stesso modo in cui si farebbe normalmente: si invia la richiesta alla coda, essa completa e riporta i dati che possono essere passati alla successiva richiesta.

  • Come apparirebbe agli utenti? Potrebbero esserci aggiornamenti di stato? Nella maggior parte dei casi è possibile estrarre i dati dal sistema di accodamento o almeno disporre di aggiornamenti di stato per il completamento dell'attività. La maggior parte delle code di messaggi può facilmente dare l'indicazione di errori o guasti da avviare.

  • Dovrei bloccare il processo quando la comunicazione tra il mio server web nella coda dei messaggi sta bloccando? No, a meno che non l'abbia scritto in quel modo. È possibile impostare facilmente una richiesta Ajax per solleticare la coda ogni pochi secondi per lo stato di un messaggio per aggiornare l'interfaccia utente.

  • Questa sovrastruttura? No, a meno che non decidi di caricare la tua coda di messaggi.

risposta data 29.09.2013 - 17:38
fonte

Leggi altre domande sui tag