# Rails & High Availability

**URL:** <https://www.ruby-forum.com/t/rails-high-availability/90288>\
**Category:** IT\
**Created:** [March 27, 2007, 12:18pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288 "2007-03-27T12:18:36Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 12:18pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/1 "2007-03-27T12:18:36Z")

</div>

Ciao,

a livello d’indagine sto vedendo possibili soluzioni per rendere high  
available e scalabile un’applicazione Rails. La soluzione (a mio  
avviso) migliore è quella di usare Mongrel Cluster (e Apache davanti  
che fa da load balancer).

Se non si vuole usare un load balancer “Session Affinity” questo tipo  
di soluzione obbliga comunque a rendere persistente la sessione sul  
DBMS (con evidente costo di recupero -eventuale- della sessione ad  
ogni request).

Ho cercato in giro soluzioni di Session Replication in Rails ma non ho  
trovato nulla (robe tipo JavaGroups per intenderci). Esiste qualcosa  
che conoscete?

Grazie  
Piero

---

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 12:25pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/2 "2007-03-27T12:25:36Z")

</div>

Il giorno mar, 27/03/2007 alle 12.17 +0200, Piero C. ha scritto:

> ogni request).
> 
> Ho cercato in giro soluzioni di Session Replication in Rails ma non ho  
> trovato nulla (robe tipo JavaGroups per intenderci). Esiste qualcosa  
> che conoscete?

Io ho usato spesso memcached (anche fuori da rails):

[http://railsexpress.de/blog/articles/2006/01/24/using-memcached-for-ruby-on-rails-session-storage](http://railsexpress.de/blog/articles/2006/01/24/using-memcached-for-ruby-on-rails-session-storage)

Anche la replica sui vari nodi e’ molto semplice da implementare

---

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 2:07pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/3 "2007-03-27T14:07:12Z")

</div>

Piero C. wrote:

> Se non si vuole usare un load balancer “Session Affinity” questo tipo  
> di soluzione obbliga comunque a rendere persistente la sessione sul  
> DBMS (con evidente costo di recupero -eventuale- della sessione ad  
> ogni request).

il recupero dei dati di sessione ha un costo _in ogni caso_, non importa  
dove vengono memorizzati, nel caso di session replication il costo e’  
nella replicazione delle sessioni e nella complessita degli application  
server.

Inoltre in una architettura “shared nothing” (come quella usata da Rails  
e da tutti gli stack LAMP) il punto di “condivisione” e’ _dietro_ gli  
application server. Infine nel caso di una gestione con SessionAffinity  
la difficolta’ e’ nel corretto bilanciamento del traffico poiche  
richieste multiple di poche sessioni possono rallentare l’app. server su  
cui sono dirette.

La strategia migliore in questo caso, ed in tutti quelli in cui vuoi  
ottenere alta affidabilita e scalabilita, e’ minimizzare le informazioni  
mantenute in sessione ed affidarti ad un meccanismo fuori  
dall’application server, come appunto il database.

L’impatto del recupero della sessione rispetto al resto delle attivita  
di database e’ minimale nella maggior parte dei casi di applicazioni web  
(ovvero ovunque ci sia altra attivita sul database), ma eventualmente  
(i.e. se il carico diventa troppo alto per il tuo server) puoi pensare  
ad uno storage dedicato alle sessioni separato dal database principale  
(sql o di tipo memcached).

## HTH Luca

## Web: [http://spazidigitali.com](http://spazidigitali.com) - [http://thetyper.com](http://thetyper.com) Email mailto://removed\_email\_address@domain.invalid Skype callto://l.mearelli

---

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 2:10pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/4 "2007-03-27T14:10:46Z")

</div>

Roberto De Ioris wrote:

> Il giorno mar, 27/03/2007 alle 12.17 +0200, Piero C. ha scritto:
> 
> > ogni request).
> > 
> > Ho cercato in giro soluzioni di Session Replication in Rails ma non ho  
> > trovato nulla (robe tipo JavaGroups per intenderci). Esiste qualcosa  
> > che conoscete?
> 
> Io ho usato spesso memcached (anche fuori da rails):
> 
> [Using memcached for Ruby on Rails session storage](http://railsexpress.de/blog/articles/2006/01/24/using-memcached-for-ruby-on-rails-session-storage)
> 
> Anche la replica sui vari nodi e’ molto semplice da implementare

Memcached Ã¨ un’ottima alternativa ma se vuoi un’alternativa integrata in  
Rails puoi provare ad usare la DRbSession (per incrementare del 10%  
circa le “request per second” rispetto alla sessione persistente sul DB)

---

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 2:45pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/5 "2007-03-27T14:45:16Z")

</div>

Il giorno mar, 27/03/2007 alle 14.23 +0200, Luca M. ha scritto:

> Luca M. wrote:
> 
> > ad uno storage dedicato alle sessioni separato dal database principale  
> > (sql o di tipo memcached).
> 
> Aggiungo solo una considerazione visto che parli di HA: in tutte le  
> soluzioni tipo memcached (come qualsiasi altra soluzione “memory-only”),  
> lo storage delle sessioni _puo_ diventare un punto debole: se il  
> processo viene riavviato tutte le sessioni sono resettate.

Beh stiamo parlando di HA, si presuppone che ci siano almeno 2 nodi  
memcached con dati consistenti (attenzione la replica non la fa  
memcached ci vuole un’applicazione ad-hoc)

In effetti non scelgo memcached perche’ e’ piu’ performante ma solo  
perche’ e’ piu’ semplice avere una replica consistente rispetto a  
qualsiasi scelta (in ambito opensource) su database.

---

<div class="post-metadata">

**Author:** ![Piero\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Piero\_C](https://www.ruby-forum.com/u/Piero_C)\
**Post date:** [March 27, 2007, 2:24pm UTC](https://www.ruby-forum.com/t/rails-high-availability/90288/6 "2007-03-27T14:24:13Z")

</div>

Luca M. wrote:

> ad uno storage dedicato alle sessioni separato dal database principale  
> (sql o di tipo memcached).

Aggiungo solo una considerazione visto che parli di HA: in tutte le  
soluzioni tipo memcached (come qualsiasi altra soluzione “memory-only”),  
lo storage delle sessioni _puo_ diventare un punto debole: se il  
processo viene riavviato tutte le sessioni sono resettate.

## Luca

## Web: [http://spazidigitali.com](http://spazidigitali.com) - [http://thetyper.com](http://thetyper.com) Email mailto://removed\_email\_address@domain.invalid Skype callto://l.mearelli
