web-dev-qa-db-fra.com

comment gérer plus de 2000 requêtes / sec sur tomcat?

Je développe une application SMS en Java. Mes clients envoient des requêtes via SMS qui seront transmises à mon serveur sous forme de requêtes http via SMS Gateway. Maintenant, mon application traite les demandes et renvoie à nouveau les réponses aux clients via SMS Gateway. Un maximum de 300 caractères sont envoyés comme réponse. Je m'attends à des résultats très élevés). trafic (2000 requêtes/sec). Je voulais héberger mon application avec une société d'hébergement Web (considérant mochahost). Quels facteurs dois-je prendre en compte avant d'héberger (intervalles de RAM, CPU, etc.) et quels seront les principaux goulots d'étranglement? Le serveur Tomcat gère un trafic aussi élevé s'il est réglé correctement? Quelles sont vos suggestions?

Il n'y a pas d'interaction avec la base de données (j'utilise uniquement Java mémoire de tas). J'ai effectué un test avec JMeter (100 requêtes/sec). Mon utilisation de la mémoire de tas était de 35 Mo et le temps de réponse moyen était de 532 ms Et je n'utilise pas non plus de variables de session.

23
ravi

Il est difficile de répondre à votre question sans savoir ce que vous faites dans votre servlet. Mais la réponse courte est que cela n'a vraiment rien à voir avec Tomcat.

Nous utilisons actuellement Dell R410s (double quad core, 32G ram) pour nos serveurs Tomcat. Pour un service REST qui parle à un cluster membase à l'arrière, nous pouvons facilement traiter ~ 15 000 requêtes/seconde sur un seul serveur (ceci utilise l'implémentation Jersey JAX-RS). Nous avons actuellement en avoir 4 derrière un équilibreur de charge F5. Chacune de ces demandes est traitée en 10 ms en moyenne.

Ce qui se résume vraiment à la concurrence; Combien de temps faut-il à votre servlet pour faire ce qu'il doit faire avec une demande. Vous avez un thread pour chaque demande simultanée, donc si vous essayez de 2000 req/sec et qu'une seule demande prend 500 ms à traiter ... vous allez avoir besoin d'un peu de matériel. Le problème n'est pas Tomcat, mais l'une des ressources disponibles pour votre servlet.

28
Brian Roach

Un seul serveur Tomcat avec des paramètres par défaut sur un matériel modeste devrait facilement gérer 2 000 requêtes/seconde, en supposant qu'il n'a pas trop de travail à faire par requête. Si le traitement d'une demande prend plus de 500 ms, vous devrez probablement augmenter le nombre de threads dans le pool de threads, et vous pourriez commencer à repousser les limites. Alternativement, si vous pouvez décharger une partie de ce travail sur un ou plusieurs autres threads, cela accélérera les temps de réponse et vous pourrez conserver les 200 threads par défaut. Ensuite, il s'agit simplement de savoir si vos threads de travail peuvent suivre les demandes entrantes. Cela dépendrait de la constance ou de l'éclatement de votre charge et du délai que vous pouvez accepter lors du traitement. Cela ne concerne même pas HA, DR et quel est votre temps d'arrêt acceptable. C'est tout un grand équilibre, et il y a beaucoup trop de variables pour juste donner une réponse coupée et séchée.

7
Ryan Stewart

Il semble que vous ayez à implémenter une approche cluster/équilibrage de charge. Jetez un oeil à this pour un exemple.

1
Otávio Décio