Comment construire un système distribué de l'application java?
Tout d'abord, j'ai conceptuels de la question, le mot "distribution" signifie seulement que l'application est exécutée sur plusieurs machines? ou il y a d'autres façons d'où une demande peut être considéré comme distribué (par exemple si il y a beaucoup de modules indépendants qui interagissent bois, mais sur la même machine, cela est-il distribué?).
Deuxième, je veux construire un système qui s'exécute quatre types de tâches, il y aura plusieurs clients et chacune aura de nombreuses tâches de chaque type à être exécuté périodiquement. Par exemple: customer1 aura task_type1 aujourd'hui , task_type2 après deux jours et ainsi de suite, il y a peut être customer2 qui a task_type1 être exécutées en même temps, comme customer1 de task_type1. c'est un besoin pour la concurrence. Configuration pour l'exécution des tâches qui seront stockées dans la bd et les résultats de ces tâches vont être stockés dans la bd. les clients pourront utiliser le système à partir d'un navigateur web (pages html) pour interagir avec le système (en gros, configurer des tâches et voir les résultats).
J'ai pensé à utiliser un reste webservice (à l'aide de JAX-RS) où les pages html de communiquer et sur le backend utiliser des threads pour une exécution simultanée.
Questions:
- Cela semble simple, Mais vais-je dans la bonne direction? ou, devrais-je utiliser d'autres technologies ou des concepts tels que Java Beans par exemple?
2.Si ma démarche est bonne, je dois utiliser un langage de script comme JSP ou je peux envoyer les formulaires html directement à l'url rest et obtenir le résultat (en utilisant JSON par exemple)?
- Si je veux faire de l'application distribuée, est-il possible avec mon idée? Si non, que dois-je utiliser?
Désolé pour avoir beaucoup de questions , mais je suis vraiment confus au sujet de cette.
task_type1
, task_type2
, etc. sont va être très gourmandes en temps PROCESSEUR? Avez-vous test pour confirmer? Y a t il vraiment va y avoir beaucoup d'utilisateurs utilisant l'application en même temps? Il se peut qu'un seul serveur peut gérer la charge très bien et que la distribution de l'application serait juste compliquer les choses avec aucun avantage supplémentaire. 2e, ne présumez pas que vous avez besoin de threads parce que "les tâches doivent être exécutées en même temps". Sauf si vous avez besoin pour tirer parti de plusieurs Processeurs, un seul thread tirant tâches en une file d'attente de travail sera probablement très bien.les tâches sont eux-mêmes pas de temps CPU, mais si je reçois beaucoup de clients avec de nombreuses tâches, cela peut être un problème dans le futur, j'envisage d'évolutivité pour l'avenir. Je suppose que l'un de serveur serait en mesure de gérer pour l'instant. Mais je voulais savoir comment faire distribués dans les cas où j'en aurais besoin. c'est à dire que je voulais comprendre les concepts de la distribution.
Concernant les fils, j'ai besoin de tâches à exécuter à des moments précis, par exemple, il pourrait y avoir task_type1 être exécuté à 10:00 du matin pour customer1 et un autre task_type1 de customer2 également à 10:00 am. J'ai besoin d'une sorte de simultanéité dans l'exécution. j'.e: le traitement de la deux tâches en parallèle.
le terme "distribution" est généralement utilisé dans le sens de "en cours d'exécution sur plusieurs machines"
"devrait être l'aide d'autres technologies ou des concepts tels que Java Beans par exemple" – si vous n'êtes pas certain de ce que "Java Beans" sont pour la, vous ne devriez pas être en train d'essayer d'écrire un système distribué. Cela sonne comme vous êtes juste en les écrasant à la technologie de mots à la mode ensemble au hasard.
OriginalL'auteur Sami | 2012-07-04
Vous devez vous connecter pour publier un commentaire.
Je veux juste ajouter un point à la déjà posté des réponses. Veuillez prendre mes propos avec un grain de sel, puisque toutes les applications web que j'ai jamais construite avez exécuté sur un seul serveur (mis à part les applications déployées à Heroku, qui peuvent "distribuer" de votre application pour vous).
Si vous sentez que vous devez distribuer votre application pour l'évolutivité, la première chose que vous devriez penser est pas services web et le multithreading et les files d'attente et les Enterprise JavaBeans et...
La première chose à penser est votre domaine d'application elle-même et ce que l'application sera en train de faire. D'où le CPU-intensive des pièces? Quelles sont les dépendances sont là, entre les parties? Les pièces du système de naturellement se décomposer en parallèle des processus? Si non, pouvez-vous la refonte du système à faire? IMPORTANT: les données doivent être partagées entre les threads/processus (s'ils sont en cours d'exécution sur la même ou de différentes machines)?
La situation idéale est parallèle où chaque thread/processus/serveur peut obtenir son propre bloc de données et le travail sur elle sans qu'il soit besoin pour le partage. Encore mieux, si certaines parties du système peuvent être de fait apatrides -- apatrides code est infiniment parallélisables (facilement et naturellement). La plus fréquente et plus fine de partage de données entre les processus en parallèle, est moins évolutive de l'application sera. Dans les cas extrêmes, vous pouvez même pas obtenir une augmentation au rendement de la distribution de l'application. (Vous pouvez le voir avec le code multithread -- si votre fils constamment lutter pour la même serrure(s), votre programme peut-être même plus lent avec plusieurs threads+Cpu qu'avec un fil+CPU.)
La conceptuel répartition du travail à faire est plus important que ce que les outils ou les techniques que vous utilisez réellement la distribution de l'application. Si votre conceptuel ventilation est bonne, il sera beaucoup plus facile de distribuer l'application, plus tard, si vous commencez avec un seul serveur.
OriginalL'auteur Alex D
Le terme "application distribuée" signifie que les pièces du système d'application de s'exécuter sur différents nœuds de calcul (qui peut être différente de l'UC/cœurs sur des machines différentes ou entre plusieurs processeurs/cœurs sur la même machine).
Il ya beaucoup de différentes solutions technologiques à la question de savoir comment le système pourrait être construit. Puisque vous posiez des questions sur les technologies Java, vous pouvez, par exemple, de construire l'application web à l'aide de Google Web Toolkit, qui vous donnera un navigateur riche client basé sur l'expérience utilisateur. Pour le serveur déployé parties de votre système, vous pouvez commencer à l'aide de simple servlet s'exécute dans un conteneur de servlet comme Tomcat. Vos servlets seront appelés à partir du navigateur à l'aide de HTTP à base d'appels de procédure distante.
Plus tard si vous rencontrez des problèmes d'évolutivité, vous pouvez commencer à migrer parties de la logique métier à EJB3 composants qui peuvent eux-mêmes avant d'être déployé sur de nombreux nœuds de calcul dans le contexte d'un serveur d'application, comme Glassfish, par exemple. Je ne pense que vous n'avez pas besoin de s'attaquer à ce problème jusqu'à ce que vous l'exécutez. Il est difficile de dire si vous serez sans en savoir plus sur la nature des tâches, le client sera en spectacle.
OriginalL'auteur CBass
Pour répondre à votre première question - vous pourrait obtenir le formulaire à envoyer directement à l'url rest. Évidemment, cela dépend exactement à vos exigences.
@AlexD mentionné dans les commentaires ci-dessus, vous n'avez pas toujours besoin de distribuer une application, cependant si vous souhaitez le faire, vous devriez probablement envisager de chercher à JMS, qui est une API de messagerie, ce qui peut vous permettre d'exécuter presque n'importe quel nombre de travailleurs de l'application des machines, la préparation de messages de la file d'attente de messages et de leur transformation.
Si vous voulait produire la dynamique d'une application distribuée, à exécuter sur le dire, plusieurs de faibles ressources VMs (comme Amazon EC2 instances Micro) ou du matériel physique, qui peuvent être ajoutés et supprimés à la volonté de faire face à la demande, alors vous pourriez envisager de l'intégrer avec Projet Shoal, qui est un framework Java qui permet le regroupement de l'application des nœuds, et de faire apparaître/disparaître à tout moment. Projet Banc utilise JXTA et JGroups que le protocole de communication sous-jacent.
Une autre voie pourrait être de distribuer votre application à l'aide de EJBs en cours d'exécution sur un serveur d'application.
OriginalL'auteur Crollster