Mehrere JVMs vs single app server
Bin ich den Umgang mit einem system, das läuft, eine Java-Anwendung pro Kunde in seiner eigenen JVM. Wir haben etwa ein halbes Dutzend dedizierte Server, auf denen fast 100 JVMs insgesamt jetzt und sets von benutzerdefinierten Skripts für die Verwaltung von JVMs. Dieses setup ist wirklich mit deren Alter zu diesem Zeitpunkt: die Verwaltung, dass viele JVMs ist immer eine überwachungs - /management-nightmare und wir sind ständig Umgang mit heap Größenanpassung Probleme. Wir möchten den Wechsel zu einem moderneren Ansatz und führen Sie einfach eine Reihe von Anwendungen in einer einzigen app-server pro physische Maschine. Allerdings halten die Anwendungen getrennt hat deutliche Vorteile in Sachen isolation (z.B. out of memory-Fehler wirken sich nur auf einen Kunden). Jeder Kunde ist software-stack-Speicher-Anforderungen stark variieren.
Meine Frage: gibt es eine Möglichkeit, das beste aus beiden Welten hier und führen Sie mehrere Anwendungen in einer JVM (app-server) und die immer noch halten einige Grad von isolation? Oder ist es nur eine moderne Tatsache des Lebens, dass Sie brauchen, um Speicher zu verwalten Anforderungen einer Reihe von Anwendungen, die in diesen Tagen? Gibt es andere Lösungen, die hier neben einem app-server oder Java-EE-container (z.B. Wildfly oder Frühjahr), dass ich hier fehlen? Wie es scheint, dieses system ist eine Zurückhaltung, die aus einer anderen ära!
Ähnlich chrylis' Kommentar, der moderne Ansatz ist NICHT zu verwenden app-Server. Multi-tenancy ist auch tot, weil warum haben die den ärger, dass, wenn Sie verwenden können, VMs oder Containern wie Docker, um Ihnen eine echte Trennung?
Ich denke, man konzentriert sich auf das falsche problem: warum sind Sie ständig mit heap-Größe Fragen? Sind Ihre apps ein Speicherleck? Sie haben unbegrenzten Verbrauch von Speicher? Bietet Ihre app nicht sesshaft zu einer stetigen Verwendung von Speicher für eine bestimmte Arbeitsauslastung?
können Sie fügen Sie einige details, was genau sind diese management-Einschränkungen. Nur interessiert es zu wissen, was es braucht, um zu verwalten 100 JVMs !
InformationsquelleAutor Noky | 2014-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kasse 'multi-tenant' JVM.
IBM JRE hat es schon: http://www.ibm.com/developerworks/library/j-multitenant-java/
Waratek umgesetzt hat, die es auf die Oracle-JRE, und Sie haben ElastiCat, Tomcat Gabel, isoliert für verschiedene Anwendungen in den gleichen container: http://www.elasticat.com/faq/
Multi-tenancy Gerüchte in die offizielle Oracle Java 9 JVM auch.
=======================================================
Update: Java 9 ist out, aber kein Wort von Oracle über multi-tenancy.
Es scheint, dass Sie lieber mehrere JVM ' s in diesen Tagen, auch mehrere Behälter (z.B. docker).
InformationsquelleAutor greyfairer
Gibt es vor-und Nachteile der beiden Ansätze:
Shared JVM
Separaten JVM
Insgesamt würde ich nicht von einer Decke-Politik. Suchen Sie nach kleinen /micro-services oder anderen low-usage apps, die möglicherweise gute Kandidaten zu teilen, der erste und erweitern von dort aus.
Ich würde vorschlagen, bewegen, etwas geeignetes zu einer modernen application-server (JBoss oder Glassfish), je nachdem, ob Sie hauptsächlich web-Anwendungen oder wenn Sie müssten etwas überarbeitet werden. Ein app-server nimmt viel von dem Schmerz zu verwalten und zu überwachen, so dass es sich lohnen könnte, den Schmerz des übergangs.
Glassfish ist nicht tot - ich würde nicht empfehlen, jemand bewegt.
InformationsquelleAutor Michael
Haben Sie einen Blick Spring Boot oder Fabric8 für ein modernes nehmen auf die Ausführung von Java-in einer überschaubaren Weise
Ich vermute, das zentrale problem ist nicht das management der apps und Ihrer Erinnerung, aber warum ist die app so instabil, dass es braucht ständige tweeking Speicher?
Guter Punkt SteveD. Das Problem ist nicht, dass die app instabil ist. Dies ist keine webapp, sondern eine Recht große Anwendung mit vielen verschiedenen benutzerdefinierten Optionen und add-ons, die variieren basierend auf die Bedürfnisse des Kunden und der Größe. Also, es gibt keine "one-size-fits-all" Art und Weise der Aufteilung Speicher für die app. Während die app in der Regel Recht stabil, es ist eine Tatsache des Lebens, dass manchmal gibt es Probleme, dass die apps isoliert wurde es ein großer Gewinn, wenn etwas schief geht. Widmen konnte chunks Speicher pro Kunde ist somit sowohl ein Segen und ein Fluch.
Ich fürchte, Ihre leiden vermindert Erwartungen. Wenn sehr variable Arbeitslasten sind eine Besonderheit/Einschränkung von Ihrem system, die Entwickler benötigen, um eine Architektur zu behandeln und nicht werfen das problem auf der ops Jungs. Ihr system kann nicht wieder Druck und nur schlägt mit OOMs, wenn die Arbeitsbelastung höher ist als der aktuelle max-Speicher erlaubt?
InformationsquelleAutor SteveD
Einem anderen wichtigen Grund zu haben, mehrere JVM anstelle eines ist beim Blick auf die numa-Gruppen. Sie können nicht verteilen Ihre threads innerhalb einer JVM entsprechende über numa-Gruppen, wie Sie können mit mehreren jvm-Prozessen. Zumindest habe ich nie einen Weg gefunden, dies zu tun.
Wir haben hier Maschinen, die mit zwei cpu ' s, jede mit 18 Kernen, Das gibt zwei numa-Gruppen, und wir können nicht erzwingen, 34 Threads verteilt werden, auf die sowohl die cpu, wenn nur eine JVM verwendet wird. Dies ist offensichtlich, denn es wird davon ausgegangen, dass alle threads der gleichen JVM-Prozess benötigen schnellen Zugriff auf den gleichen Speicher, das ist nicht der Fall.
Mit 34 Prozesse, die das system davon aus, Sie haben keine Notwendigkeit für shared memory und damit breitete Sie über die beiden cpus.
Wenn jemand weiß, einen besseren Weg, dies zu tun, wäre ich sehr froh, es zu hören.
InformationsquelleAutor A User