2011-11-16 12 views
6

Prefazione: non iniziare una discussione sull'ottimizzazione prematura o su qualsiasi argomento correlato. Sto solo cercando di capire che tipo di prestazioni posso ottenere da un singolo server con rail.Sono 100 o meno richieste al secondo (per pagine non memorizzate nella cache) cosa ci si può aspettare da Rails?

Sono stato benchmarking ruby ​​su rails 3 e sembra che il più alto tasso di richieste al secondo che posso ottenere è di circa 100 richieste al secondo.

Ho utilizzato il passeggero di phusion con nginx e Ruby 1.8.7.

Questo è su un'istanza EC2 m1.large:

7.5 GB memory 
4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each) 
850 GB instance storage 
64-bit platform 
I/O Performance: High 
API name: m1.large 

la pagina è stata una semplice azione che ha scritto una sola riga in mysql.

user = User.new 
user.name = "test" 
user.save 

Io parto dal presupposto senza il caching (memcache, ecc), voglio solo per ottenere un tatto per i numeri grezzi.

Ho utilizzato il banco apache sulla stessa istanza di ec2 e ho utilizzato diversi livelli di # di richieste (da 1000 a 10000 e numero variabile di richieste simultanee 1/5/10/25/50/100).

+1

Bene, se hai già eseguito i test e non sei interessato alle ottimizzazioni, qual è la domanda effettiva? – deviousdodo

+2

Su un server dedicato (Ubuntu 11.04, Dual Xeon E5620, 12GB RAM) che esegue Unicorn (8 worker) dietro nginx, ottengo circa 1.200 richieste/sec (su una pagina senza hit del database). –

+1

@Dylan grazie !, so che il passeggero di Phusion scala automaticamente a più operai dietro le quinte, forse non ha dato il calcio d'inizio per qualche motivo? – codecompleting

risposta

3

L'istanza EC2 m1.large non è davvero così veloce, quindi questi numeri non sono sorprendenti. Se si desidera ottenere prestazioni, è possibile scegliere un'istanza più ampia, poiché ora ce ne sono alcune con 80 ECU o provare un provider diverso.

Ho trovato che Linode offre generalmente prestazioni più elevate allo stesso prezzo, ma non è così flessibile e non è scalabile anche a un numero molto elevato di server. È molto più adatto se ti trovi nella fase di "under 20 servers" di roll out.

Inoltre, non pensare che MySQL sia un'operazione senza costi.

+0

grazie per il consiglio, sullo stesso tipo di istanza stavo superando 1K con java (facendo lo stesso inserendo 1 riga su mysql) – codecompleting

+0

Perché non provare il benchmarking usando JRuby invece, allora? È facile da installare usando [rvm] (https://rvm.beginrescueend.com/). Hai anche altre opzioni oltre a Rails rigidi, che è un framework facile da programmare, come Sinatra o Plain Rack, che è un framework favorevole alle prestazioni. – tadman

+0

questo era più per capire il potenziale con le rotaie, so che ovviamente ci sono soluzioni più veloci che volevano solo avere un'idea di cosa aspettarsi e cosa hanno vissuto gli altri (nel caso stavo facendo qualcosa di sbagliato nel mio benchmark). – codecompleting

Problemi correlati