JVM multiples par rapport à un seul serveur d'applications
Je fais face à un système qui exécute une application Java par le client dans son propre JVM. Nous avons une demi-douzaine de serveurs dédiés, qui sont en cours d'exécution de près de 100 machines virtuelles total et des ensembles de scripts personnalisés pour la gestion de ces machines virtuelles. Cette configuration est vraiment à montrer son âge à ce point: la gestion que de nombreux Jvm est en train de devenir un suivi/gestion de cauchemar et nous sommes constamment à traiter avec des tas de problèmes de dimensionnement. Nous aimerions passer à une approche plus moderne, et il suffit d'exécuter un tas d'applications dans une seule application serveur par machine physique. Toutefois, en gardant les applications distinctes ne présentent de nets avantages en termes d'isolement (par exemple de la mémoire des erreurs n'affectent qu'un seul client). Chaque client logiciel de pile a la mémoire des exigences qui varient largement.
Ma question: est-il un moyen d'avoir le meilleur des deux mondes d'ici et d'exécuter plusieurs applications en une seule JVM (serveur d'application) et de toujours maintenir un certain niveau d'isolement? Ou est-ce juste un moderne fait de la vie que vous avez besoin pour gérer les besoins en mémoire d'un ensemble d'applications de ces jours? Il existe d'autres solutions en dehors d'un serveur d'application ou Java EE conteneur (par exemple, Wildfly ou de Printemps) que je suis en manque ici? Il semble que ce système est une exclusion d'une autre époque!
source d'informationauteur Noky
Vous devez vous connecter pour publier un commentaire.
Passer à la caisse "multi-tenant" de la JVM.
IBM JRE a déjà: http://www.ibm.com/developerworks/library/j-multitenant-java/
Waratek a mis en place sur le dessus de l'Oracle JRE, et ils ont créé ElastiCat, un Tomcat fourche qui isole les différentes applications dans le même conteneur: http://www.elasticat.com/faq/
Multi-tenancy la rumeur dit qu'apparaissent dans la langue officielle d'Oracle Java 9 JVM, trop.
=======================================================
Mise à jour: Java 9 est sorti, mais pas un mot à partir d'Oracle à propos de multi-location.
Il semble qu'ils préfèrent avoir plusieurs JVM de ces jours, même plusieurs Conteneurs (par exemple, menu fixe).
Il y a des avantages et des inconvénients de l'une ou l'autre approche:
Partagé JVM
Séparée de la JVM
Dans l'ensemble, je ne serait pas définir une politique globale. Regardez pour les petites et micro-services ou d'autres bas-utilisation des applications qui peuvent être de bons candidats pour partager la première et de développer à partir de là.
Ont un look Printemps De Démarrage ou Fabric8 pour une prise moderne sur l'exécution de Java dans un administrable
Une autre raison importante pour plusieurs JVM au lieu de on est face à numa groupes. Vous ne pouvez pas distribuer votre fils dans une JVM approprié numa groupes que vous pouvez avec plusieurs jvm processus. Au moins je n'ai jamais trouvé un moyen de le faire.
Nous avons ici les machines à deux processeurs, chacun ayant 18 cœurs, Ce qui donne deux numa groupes et nous ne pouvons pas appliquer 34 Threads à se répandre sur les deux cpu si une seule JVM est utilisé. C'est évidemment parce qu'il suppose que tous les threads d'un même processus de JVM besoin d'avoir un accès rapide à la même mémoire qui n'est pas le cas.
Avoir 34 Processus, le système suppose qu'ils n'ont pas besoin de la mémoire partagée et donc de les étaler sur les deux processeurs.
Si quelqu'un connaît une meilleure façon de le faire, je serais très heureux d'entendre ça.