[ruby-it] applicazione rails con tre database
Luca Guidi
guidi.luca a gmail.com
Dom 7 Giu 2009 11:50:19 CEST
Il rapporto applicazione -> mongrel è 1-n.
Quindi si parte da un'istanza di mongrel per un'applicazione, se questa
dovesse rivelarsi insufficiente si aggiungono altre istanze.
Di default un'applicazione Rails è single-threaded, il che significa
che, nel suo contesto (un mongrel) riesce a soddisfare una richiesta per
volta. Dalla versione 2.2 è possibile cambiare questa configurazione.
Quindi se hai 10 utenti che fanno simultaneamente una richiesta ad una
risorsa, che ha una latenza di un secondo ed un solo mongrel, l'ultimo
utente servito vedrà la risposta dopo 10 secondi.
Ovviamente, all'aumentare dei nodi, aumentano le request al secondo che
riesce a soddisfare il tuo servizio, cioè l'insieme di istanze di mongrel.
Se nell'esempio di prima il throughput era 1 req/s, aggiungendo un nodo,
diventa di 2 req/s e così via.. Ovviamente questo è un esempio
semplificato e non vale all'infinito (cerca i tradeoffs della
scalabilità orizzontale).
Tutta questa configurazione deve essere trasparente agli occhi
dell'utente finale, il quale vuole solo digitare www.example.com sul suo
browser ed utilizzare il tuo servizio.
Per questo si utilizza un web server che faccia da balancer verso il tuo
cluster di nodi. Il suo compito è di ascoltare sulla porta 80 e di
forwardare le richieste all'applicazione e al path giusto.
Questo ci permette anche di avere più applicazioni (quindi più cluster)
su una sola macchina, il web server sarà incaricato di decidere non solo
quale applicazione è responsabile per una determinata request, ma anche
nodo dovrà soddisfarla.
Quando compri un servizio di hosting, generalmente si inizia con un VPS,
hai a disposizione una macchina virtuale, che ti permette di agire solo
sui tuoi clusters e web server.
Quindi un server fisico ha tante macchine virtuali, le quali hanno un
web server ed una o più applicazioni, ciascuna delle quali ha un cluster
di application servers.
Per un'applicazione che ha un carico medio di 20 persone un cluster di
tre nodi dovrebbe andare bene.
Consigli:
- application server: passenger, mongrel o thin
- web server: apache o nginx
Passenger, a differenza degli ultimi due, ha una sola istanza e provvede
di creare più processi per soddisfare un carico di richieste maggiore.
Ti consiglio di leggere Deploying Rails Applications
http://www.pragprog.com/titles/fr_deploy/deploying-rails-applications
Luca
--
blog: www.lucaguidi.com
More information about the Ml
mailing list