[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