2010-05-12 5 views
0

J'ai une application de chat (xmpp/muc) qui va être servie par apache (nous pourrions changer pour nginx plus tard mais maintenant ce n'est pas facile à faire). Si un utilisateur est dans 2 pièces, il aura entre 2 et 4 connexions actives au serveur (connexions à interrogation longue), donc si nous avons 200 utilisateurs par pièce et que nous avons 5 chambres, quelle devrait être la valeur de ServerLimit, MaxClients? à? Par exemple, ce sont les valeurs par défaut:Recommandations sur le réglage d'apache pour l'application de chat

ServerLimit 256

MaxClients 256

MaxRequestsPerChild 4000

Merci,

+0

Vous pouvez consulter le mpm_event_module. C'est expérimental dans Apache 2.2, mais il peut certainement vous aider. Je ne suis pas sûr que cela prenne en charge SSL. – Boris

Répondre

-1

Je devine que ce un Apache pré-fourchette ...

Si vous avez 1000 connexions de chat simultanées, alors vous avez besoin d'au moins 1000 serveurs web (probablement vous servira stati C contenu aussi, et vous dites que chaque présence résulte en 2 connexions - donc vous pouvez doubler le 1000) - un ServerLimit/MaxClients de 256 ne va pas le couper, vous avez probablement besoin d'environ 2200 pour le supporter (mais sans mesures difficile de donner un chiffre exact).

Ceci est une quantité ridiculement grande. Pour soutenir ceci, je chercherais 3 boîtes, chacune avec environ 2 Go de mémoire libre avant le démarrage du serveur web.

MaxRequestsPerChild n'est pas vraiment pertinent si ce n'est le fait que vous voulez un certain renouvellement des processus, en particulier si vous utilisez une interrogation longue.

C'est une des raisons pour lesquelles COMET n'est pas une bonne idée. L'utilisation de l'interrogation AJAX serait beaucoup plus efficace. À supposer que ce ne soit pas quelque chose que vous pouvez changer, vous pouvez jeter un oeil à l'aide d'un serveur web Apache fileté qui est légèrement plus efficace de la mémoire,

C.

+0

Je suis désolé, juste parce que Apache ne peut pas gérer efficacement Comet, ne fait pas une mauvaise idée. Cela ne rend pas AJAX Polling plus souhaitable car il va produire beaucoup plus de charge de base de données. Il est de loin plus efficace d'avoir 1000 clients qui piquent pendant 2 minutes que de devoir traiter 1000 requêtes par seconde (si vous voulez en temps réel). aussi si vous calculez qu'ils ne viennent que toutes les 5 secondes, vous aurez toujours 200 RPS pour RIEN! Cela vous donne horriblement charge DB pour littéralement rien! –

+0

Juste parce que ça ne marchera pas ne fait pas une mauvaise idée? Vraiment? Wwill produira BEAUCOUP plus de charge de base de données "Non - quel genre de personne essaie de relayer le chat via une base de données? – symcbean

0

Chaque utilisateur ne doit avoir qu'une seule connexion au XMPP serveur si vous utilisez quelque chose comme BOSH pour faire la connexion Web-> XMPP. Chaque activité de salle MUC sera envoyée au serveur XMPP avec le JID de l'utilisateur comme cible et le serveur l'enverra à la connexion BOSH appropriée. Pareil pour la présence. Les informations dont vous avez besoin pour équilibrer la charge de l'installation d'Apache sont les mêmes que pour l'équilibrage de charge d'une connexion à longue interrogation - XMPP n'ajoute rien d'exotique au mixage. Une connexion BOSH XMPP est une connexion à interrogation longue de votre serveur Web qui est ensuite envoyée à une connexion permanente au serveur XMPP, ce qui entraîne l'ouverture de deux sockets par connexion utilisateur.

Questions connexes