2011-08-25 8 views
20

Zajmuję się tworzeniem aplikacji SMS w Javie. Moi klienci wysyłają zapytania za pośrednictwem wiadomości SMS, które zostaną przekazane na mój serwer w formie żądań http za pośrednictwem bramki SMS. Teraz moja aplikacja ponownie przetwarza żądania i odsyła odpowiedzi do klientów za pośrednictwem bramki SMS. Maksymalnie tylko 300 znaków jest wysyłanych jako odpowiedź. Spodziewam się bardzo dużego ruchu (2000 żądań/s). Chciałem udostępnić moją aplikację firmie hostingowej (biorąc pod uwagę mochahost). Jakie czynniki powinienem wziąć pod uwagę przed hostingiem (intermsami RAM, CPU itp.) Oraz jakie będą główne wąskie gardła? Czy dedykowany serwer Tomcat może obsługiwać tak duży ruch, jeśli jest odpowiednio ustawiony? Jakie są twoje sugestie?jak obsługiwać 2000+ żądań/sek na tomcat?

Brak interakcji z bazą danych (używam tylko pamięci sterty Java). Przeprowadziłem test z JMeter (100 żądań/sek). Moje zużycie pamięci sterty wynosiło 35 MB, a średni czas odpowiedzi to 532 ms. I nie używam żadnych zmiennych sesji.

+0

Jakie przetwarzanie należy wykonać w przypadku każdego żądania? Wszelka interakcja z bazą danych? –

+0

@Mike Nie ma żadnej interakcji z bazą danych. Używam tylko pamięci Java. – ravi

+0

Uruchomiłem test z jmeterem (100 żądań/s). Moje użycie pamięci sterty wyniosło 35 MB, a średni czas odpowiedzi to 532 ms. – ravi

Odpowiedz

23

Trudno odpowiedzieć na pytanie, nie wiedząc, co robisz , robiąc w swoim serwletu. Ale krótka odpowiedź brzmi, że tak naprawdę nie ma to nic wspólnego z tomcat.

Obecnie używamy Dell R410s (dual quad core, 32G RAM) dla naszych serwerów Tomcat. W przypadku usługi REST, która komunikuje się z klastrem z klastra na zapleczu, możemy łatwo przetworzyć ~ 15k ponownie na sekundę na jednym serwerze (jest to implementacja JAX-RS w sieci Jersey). Obecnie mamy 4 z nich za układem równoważenia obciążenia F5. Każda z tych próśb jest obsługiwana średnio w około 10ms.

Co tak naprawdę sprowadza się do współbieżności; Ile czasu zajmuje serwletowi zrobić to, co musi zrobić z żądaniem. Masz wątek dla każdej równoczesnej prośby, więc jeśli próbujesz 2000 sekw./sek i pojedyncze żądanie zajmuje 500 ms do przetworzenia ... będziesz potrzebował trochę sprzętu. Problem nie jest tomcat, ale jeden z dostępnych zasobów dla twojego serwletu.

+1

Zacząłem ten wątek dotyczący Twojego wpisu: http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs mając nadzieję, że możesz zadzwonić w. – codecompleting

+0

czy dostrajasz coś na poziomie OS dla TIME_WAIT? co z ustawieniami konfiguracyjnymi tomcat dla: connectionTimeout, keepAliveTimeout, maxKeepAliveRequests. Miej podobną aplikację z 2K żądań na sekundę, ale tomcat po chwili jest powolny. – codecompleting

+0

Podoba mi się ta odpowiedź – thonnor

1

Wygląda na to, że konieczne może być wdrożenie metody klastra/równoważenia obciążenia. Spójrzmy na przykład na this.

6

Pojedynczy serwer Tomcat z domyślnymi ustawieniami na skromnym sprzęcie powinien z łatwością obsłużyć 2k żądań na sekundę, przy założeniu, że nie ma zbyt wiele pracy do wykonania na żądanie. Jeśli przetwarzanie jednego żądania trwa 500+ ms, prawdopodobnie będziesz musiał podnieść liczbę wątków w puli wątków i możesz rozpocząć przesuwanie limitów. Alternatywnie, jeśli możesz odciążyć niektóre z tych prac do innych wątków, przyspieszy to czas odpowiedzi i możesz zachować domyślne 200 wątków. Wtedy chodzi tylko o to, czy wątki robocze mogą nadążyć za przychodzącymi żądaniami. Zależy to od tego, czy twój ładunek jest stały, czy też wabiący i ile opóźnień można zaakceptować podczas przetwarzania. Nie dotyczy to nawet HA, DR i jakie są dopuszczalne przestoje. To wszystko jest dużym balansowaniem, a jest zbyt wiele zmiennych, by podać tylko wytrawioną odpowiedź.