2011-04-26 8 views
2

Je suis actuellement sur la scène pour commencer à développer un chat (en fait, le portage d'une ancienne version de serveur unique) en utilisant plusieurs serveurs (machines).java architecture de chat multi-serveurs

Je veux utiliser la bibliothèque java NIO.

La raison pour laquelle je fais cela est parce que l'implémentation actuelle fonctionne très lentement quand un grand nombre de clients sont connectés (environ 10k), aussi l'implémentation actuelle est basée sur la bibliothèque de socket IO. J'estime également que dans un an pour avoir environ 40-50k clients en direct.

donc .. J'ai quelques questions:

  1. Combien de clients pensez-vous/NIO estimation peut gérer que j'ai entendu est beaucoup mieux que l'ancienne implémentation de socket?
  2. Avez-vous des idées ou vous pouvez me diriger vers une architecture déjà mise en œuvre d'utiliser le chat multi-serveur.
  3. Quels sont les principaux problèmes que je pourrais rencontrer lors de l'utilisation d'une architecture multi-serveur?

Merci à l'avance

+0

Le courtier JBoss HornetQ JMS pourrait-il être une option? Sous Linux, ils fournissent un AIO pour la persistance des messages qu'ils prétendent être très rapide: http://community.jboss.org/wiki/HornetQFeatures - en utilisant le modèle de communication Publish/Subscribe, un chat pourrait être implémenté facilement. Et il peut être regroupé. – mjn

Répondre

3

Je ne pense pas qu'il y ait une limitation du point de vue de la bibliothèque NIO. À la fin de la journée, les performances dépendent de la configuration de votre serveur et de votre réseau.


Vous voudrez peut-être jeter un coup d'œil à Apache MINA Project pour le framework NIO. Apache MINA est un framework d'application réseau qui aide les utilisateurs à développer facilement des applications réseau haute performance et haute évolutivité. Il fournit une API asynchrone · événementielle abstraite sur divers transports tels que TCP/IP et UDP/IP via Java NIO.

Apache MINA est souvent appelé:
. Bibliothèque du cadre NIO,
. client · server framework · library, ou
. une bibliothèque de socket réseau.

2

Les estimations sont difficiles à obtenir sans test de performance; le nombre de clients que vous pouvez prendre en charge dépend de la mémoire, de la vitesse/charge du processeur, de la bande passante/du volume, des exigences de latence, des exigences de stockage ...

Vous pouvez utiliser plusieurs méthodes pour partager des données entre serveurs; J'irais entre UDP broadcast/multicast entre eux, car c'est l'approche la plus évolutive.

Le plus gros problème auquel vous risquez de faire face est de faire face aux pannes de serveur et de gérer correctement l'équilibrage de charge.

EDIT Si vous n'êtes pas lié à NIO pour le serveur à serveur, JMS dans le pub/sous-mode peut être une bonne solution.