2009-07-21 5 views
3

Je construis une application web qui, dès le premier jour, sera à la limite de ce qu'un seul serveur peut gérer. J'envisage donc d'adopter une architecture distribuée avec plusieurs nœuds identiques. L'objectif est de fournir l'évolutivité (ajouter des serveurs pour accueillir plus d'utilisateurs) et la tolérance aux pannes. Les nœuds doivent partager un certain état entre eux, par conséquent une certaine communication entre eux est nécessaire. Je crois que j'ai les alternatives suivantes pour implémenter cette communication en Java:À quel niveau dois-je mettre en œuvre la communication entre les nœuds sur un système distribué?

  • Implémentez-le en utilisant des sockets et un protocole personnalisé.
  • Utiliser RMI
  • Utiliser les services Web (chaque noeud peut envoyer et recevoir/analyser une requête HTTP).
  • Utilisez JMS
  • Utilisez un autre cadre de haut niveau comme Terracotta ou hazelcast

Je voudrais savoir comment ces technologies se comparent les uns aux autres:

  • Lorsque le nombre de nœuds augmente
  • Lorsque la quantité de communication entre les nœuds augmente (1000s de messages par seconde et/ou messages jusqu'à 100KB, etc.)
  • Sur le plan pratique (facilité de mise en œuvre, documentation disponible, problèmes de licence, etc.)
  • Je suis également intéressé de savoir quelles technologies utilisent les gens dans des projets de production réels (par opposition aux projets expérimentaux ou académiques).

Répondre

1

N'oubliez pas Jini. Il vous offre la découverte automatique de service, le leasing de services et les proxies téléchargeables, de sorte que le protocole de communication client/serveur réel vous appartient et non imposé par le framework (par exemple vous pouvez choisir HTTP/RMI/any). La structure est construite autour de l'accusé de réception 8 Fallacies of Distributed Computing et recovery-oriented computing. c'est-à-dire aura avoir des problèmes de réseau, et l'architecture est construite pour vous aider à récupérer et maintenir un service.

Si vous utilisez également Javaspaces, il est trivial d'implémenter des workflows et des architectures grand public. Les producteurs écriront dans les Javaspaces, et un ou plusieurs consommateurs prendront ce travail de l'espace (dans le cadre d'une transaction) et travailleront avec. Donc, vous l'échelle simplement en fournissant plus de consommateurs.

Questions connexes