2009-02-20 9 views
2

Je suis en train de mettre en place un projet et l'une des questions principales est de savoir comment implémenter un système simple de mise en file d'attente de messages (quelque chose le long d'un système de chat). Je voudrais éviter d'interroger, mais il y aura probablement beaucoup de connexions simultanées (des dizaines de milliers). Ce seront des connexions HTTP + SSL, démarrées à partir d'une application et non d'un navigateur.Nombre élevé de connexions persistantes

Une solution que j'ai trouvée serait l'équilibrage de charge DNS: distribuez ces connexions persistantes sur un tas de serveurs Web nginx.

Qu'en pensez-vous? D'autres solutions possibles?

Répondre

0

L'équilibrage de charge DNS vous permet de distribuer des requêtes entre plusieurs adresses IP, qui peuvent être plusieurs serveurs. Gardez à l'esprit que vos clients peuvent obtenir différents serveurs d'une requête à l'autre, de sorte que votre application ne peut pas utiliser la gestion d'état locale. Votre application devra stocker son état dans un emplacement centralisé tel qu'une base de données.

0

Avez-vous envisagé de faire appel à d'égal à égal? L'état de l'art dans le passage des pare-feu est en fait très efficace, d'autant plus que vous exécutez votre propre logiciel client dans chaque instance, et que vous avez des serveurs pour démarrer la connexion.

Plus de travail, mais nettement moins de ressources serveur. Ecrivez également votre propre logiciel serveur - assurez-vous qu'il peut gérer un grand nombre de connexions et qu'il est extrêmement léger et que vous devriez pouvoir gérer des milliers de connexions par serveur avant de procéder à l'équilibrage de charge.

-Adam

3

Pour l'équilibrage de charge, en gardant les apatrides du serveur d'applications va ouvrir de façon significative le champ. Une fois que vous avez cela, vous êtes libre d'utiliser presque n'importe quel équilibreur de charge générique. De quelque chose de spécifique au protocole, comme les équilibreurs de charge HTTP, aux équilibreurs de charge de niveau TCP génériques. Gardez-le sans état, le reste sera sans importance en comparaison.

+0

Merci pour votre réponse Ryan. Ma question est la suivante: si j'utilise plusieurs bases de données à répartition de charge répartie, le modèle de «cohérence éventuelle» ne posera-t-il pas problème? Peut-être un algorithme de sharding qui pointe toujours mes demandes vers la même base de données? – idevelop

+0

J'essaie d'éviter les sondages, c'est pourquoi je voulais garder les connexions en vie. – idevelop

+0

Je pensais plutôt à quelque chose comme un équilibrage de charge de couche 4 en fonction de l'IP du client. Je peux être complètement sur mes hypothèses cependant. –

1

Si vous envisagez d'utiliser des services Web (passage de message XML), vous pouvez utiliser gsoap, qui inclut une application exemple de serveur Web incluse, qui utilise des pools d'unités d'exécution. J'ai couru un serveur using ceci et mysql (pour l'état persistant). Je suis d'accord avec Ryan sur la réduction ou l'élimination de l'état de la demande.

0

une solution bien conçue pour ce type de messagerie est xmpp. Il vous permet de passer à l'échelle pour avoir 10000 de connexions et avoir des messages qui vont et viennent avec une charge minimale sur le serveur et une interrogation minimale.

jetez un oeil à la publication suivante pour sélectionner un bon framework xmpp à utiliser. What XMPP framework for Java to choose

Questions connexes