Ho lavorato alla mia [prima] startup per un mese ora, e mentre è probabilmente almeno un mese più lontano da una versione alpha, voglio sapere come distribuirlo nel modo giusto. Il sito avrà una quantità iniziale elevata di carico (rete + CPU) per un nuovo utente, quindi sto pensando di avere un server/coda separato per questo processo iniziale, in modo che non rallenti il sito per gli utenti esistenti.Come distribuire un sito [Ruby on Rails] in modo scalabile?
Sulla base delle mie ricerche fino ad ora, attualmente mi sto appoggiando a nginx + haproxy + unicorn/thin + memcached + mysql e distribuendo su Linode. Tuttavia, non ho alcuna esperienza precedente in nessuno dei precedenti; quindi spero di sfruttare l'esperienza della comunità.
- L'architettura di cui sopra sembra ragionevole? Qualche suggerimento/articoli/libri che consiglieresti?
- Linode è una buona scelta? Heroku/EY sembrano troppo costosi per me (almeno fino a quando non ho entrate sufficienti), ma mi manca qualche altra opzione migliore? MediaTemple?
- Qualche buon suggerimento sull'architettura di bilanciamento del carico? Sto ancora leggendo su questo.
- È meglio disporre di 2 istanze del server Rails separate su 2 linodi separati oppure eseguire 1 istanza su un linodo di capacità doppia (in termini di RAM/spazio di archiviazione/larghezza di banda)? Quanti linodi dovrei iniziare?
- Quale distribuzione Linux devo scegliere? (Linode offre 8 diversi - http://www.linode.com/faq.cfm) Ci sono dei vantaggi/svantaggi relativi tra di loro per un sito di Rails?
Mi scuso se una delle mie domande è stupida o contraddittoria; per favore attribuiscilo alla mia inesperienza.
Grazie per la risposta dettagliata. Alcune domande di follow-up per voi: - (1) Sto usando Ruby 1.9.2. REE ha ancora un vantaggio in questo caso? (2) Quale vantaggio offre Passenger over Thin? –
Il passeggero gestisce automaticamente il proprio cluster di processi. Con thin, devi gestire ogni back-end manualmente. Passenger sfrutta inoltre la funzionalità di copia su scrittura di REE per condividere la memoria framework su istanze di backend, risparmiandovi RAM. È anche abbastanza semplice da installare e configurare. –