2011-08-25 10 views
20

Sto sviluppando un'applicazione SMS in Java. I miei clienti inviano richieste via SMS che verranno inoltrate al mio server sotto forma di richieste HTTP tramite SMS Gateway. Ora la mia app elabora le richieste e invia nuovamente le risposte ai client tramite SMS Gateway. Massimo 300 caratteri vengono inviati come risposta. Mi aspetto un traffico molto elevato (2000 richieste al secondo). Volevo ospitare la mia applicazione con una compagnia di web hosting (considerando mochahost). Quali fattori dovrei considerare prima di ospitare (interms di RAM, CPU, ecc.) E quali saranno i principali colli di bottiglia? Un server tomcat dedicato può gestire un traffico così intenso se sintonizzato correttamente? Quali sono i tuoi suggerimenti?come gestire 2000+ richieste/sec su tomcat?

Nessuna interazione di database (utilizzo solo memoria heap Java). Ho eseguito un test con JMeter (100 richieste al secondo). L'utilizzo della memoria del mio heap era di 35 MB e il tempo di risposta medio era 532 ms. Inoltre, non utilizzo alcuna variabile di sessione.

+0

Che tipo di elaborazione è necessario eseguire su ciascuna richiesta? Qualsiasi interazione con il database? –

+0

@Mike Non c'è alcuna interazione con il database. Sto usando solo la memoria java. – ravi

+0

Ho eseguito un test con jmeter (100 richieste al secondo). Il mio utilizzo della memoria heap era 35 MB e il tempo medio di risposta era 532 ms. – ravi

risposta

23

È difficile rispondere alla domanda senza sapere cosa si sta facendo nel proprio servlet. Ma la risposta breve è che in realtà non ha nulla a che fare con Tomcat.

Attualmente utilizziamo Dell R410s (dual quad core, 32G ram) per i nostri server Tomcat. Per un servizio REST che dialoga con un cluster di membrane sul back-end, è possibile elaborare facilmente ~ 15k req/secondo su un singolo server (si sta utilizzando l'implementazione Jersey JAX-RS). Attualmente ne abbiamo 4 dietro un sistema di bilanciamento del carico F5. Ciascuna di queste richieste viene servita mediamente in circa 10ms.

Ciò che in realtà è la concorrenza; Quanto tempo impiega il tuo servlet a fare ciò che deve fare con una richiesta. Hai una discussione per ogni richiesta simultanea, quindi se stai provando a 2000 req/sec e una singola richiesta richiede 500ms per elaborare ... avrai bisogno di un po 'di hardware. Il problema non è tomcat, ma una delle risorse disponibili per il tuo servlet.

+1

Ho iniziato questa discussione per quanto riguarda il tuo post: http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs sperando che tu possa suonare in. – codecompleting

+0

hai modificato qualcosa a livello os per TIME_WAIT? per quanto riguarda le impostazioni di configurazione di tomcat per: connectionTimeout, keepAliveTimeout, maxKeepAliveRequests. Avere una app simile con 2K richieste al secondo, ma Tomcat è lento dopo un po '. – codecompleting

+0

Mi piace questa risposta – thonnor

1

Sembra che potrebbe essere necessario implementare un approccio cluster/bilanciamento del carico. Dai un'occhiata a this per un esempio.

6

Un singolo server Tomcat con impostazioni predefinite su hardware modesto dovrebbe gestire facilmente 2k richieste/secondo, presupponendo che non abbia troppo lavoro da fare per richiesta. Se l'elaborazione di una richiesta richiede più di 500 ms, probabilmente dovrai aumentare il numero di thread nel pool di thread e potresti iniziare a spingere i limiti. In alternativa, se è possibile scaricare parte del lavoro su altri thread, velocizzerà i tempi di risposta e si potrebbero mantenere i 200 thread predefiniti. Quindi è solo una questione di sapere se i tuoi thread di lavoro possono tenere il passo con le richieste in arrivo. Ciò dipenderà dal fatto che il carico sia costante o instabile e da quanto ritardo si possa accettare nell'elaborazione. Questo non riguarda nemmeno l'HA, il DR, e quali sono i tempi di fermo accettabili. È tutto un grande equilibrio, e ci sono troppe variabili per dare una risposta secca.

Problemi correlati