/ / Überlegungen zum Design von J2EE-Webapps auf Tomcat in Amazon WebServices - Java, Tomcat, Amazon-Web-Services, Java-Ee, Elastic-Beanstalk

Entwurfsüberlegungen für J2EE-Webapp auf Tomcat in Amazon WebServices - Java, Tomcat, Amazon-Web-Services, Java-Ee, Elastic-Bean-Stalk

Mein Projekt möchte einen neuen j2ee bereitstellenAnwendung in der Cloud von Amazon. ElasticBeanstalk unterstützt Tomcat-Apps, was perfekt erscheint. Gibt es bestimmte Überlegungen zum Design, die beim Schreiben der genannten App zu berücksichtigen sind, die sich von einem alleinstehenden Kater auf einem Server unterscheiden können?

Zum Beispiel verstehe ich, dass der Server istsoll automatisch skaliert werden. Ist das wie ein Cluster? Unser Anwendungs-Framework neigt dazu, den Status in der HttpSession beizubehalten. Ist das ein Problem? Oder bedeutet es, wenn es automatisch skaliert, Speicher und CPU?

Antworten:

1 für die Antwort № 1

Die automatische Skalierung in AWS erfolgt durch Hinzufügen von mehrServer, nicht mehr CPU / RAM hinzufügen. Sie können manuell mehr CPU / RAM hinzufügen, der Server muss jedoch für eine Minute heruntergefahren werden, um die Änderung vorzunehmen, und anschließend müssen Sie die auf dem Server ausgeführte Software so konfigurieren, dass der hinzugefügte RAM-Speicher genutzt wird erledigt.

Elastic Beanstalk ist im Grunde ein ManagementSchnittstelle für Amazon EC2-Server, Elastic Load Balancer und Auto Scaling Groups. Es stellt all das für Sie bereit und bietet eine komfortable Möglichkeit, neue Versionen Ihrer Anwendung auf einfache Weise bereitzustellen. Elastic Beanstalk erstellt EC2-Server hinter einem Elastic Load Balancer und verwendet eine Auto Scaling-Konfiguration, um mit zunehmender Anwendungslast mehr Server hinzuzufügen. Er übernimmt das Hinzufügen der Server zum Load Balancer, wenn sie bereit sind, Datenverkehr zu empfangen, und entfernt sie vom Load Balancer und löscht die zusätzlichen Server, wenn sie nicht mehr benötigt werden.

Für Ihre Java-Anwendung, die auf Tomcat ausgeführt wirdhaben einige Optionen, um die horizontale Skalierung gut zu handhaben. Sie können permanente Sitzungen auf dem Load Balancer aktivieren, sodass alle Anforderungen eines bestimmten Benutzers an denselben Server gehen und die HttpSession somit an den Benutzer gebunden bleibt. Das Hauptproblem dabei ist, dass beim Entfernen eines Servers aus dem Pool möglicherweise einige HttpSessions verloren gehen und alle Benutzer, die an diesem Server "hängen geblieben" sind, von Ihrer Anwendung abgemeldet werden. Die Lösung hierfür besteht darin, Ihre Tomcat-Instanzen so zu konfigurieren, dass Sitzungen an einem freigegebenen Speicherort gespeichert werden. Es gibt Tomcat-Sitzungsspeicherimplementierungen, die mit AWS-Services wie ElastiCache arbeiten (Redis) und DynamoDB. Ich würde empfehlen, eine davon zu verwenden, wahrscheinlich die Redis-Implementierung, wenn Sie DynamoDB noch nicht kennen.


Eine weitere Überlegung zum Verschieben von JavaAnwendung auf AWS ist, dass Sie keine Tools oder Bibliotheken verwenden können, die auf Multicast basieren. Sie verwenden Multi-Cast möglicherweise nicht für irgendetwas, aber meiner Erfahrung nach musste jede Java-App, die ich zu AWS migrieren musste, für das Clustering auf Multi-Cast angewiesen sein, und ich musste sie für eine andere Clustering-Methode ändern.

Für eine erfolgreiche Migration zu AWS empfehle ich auchSie lesen ein wenig über VPCs, private IPs und öffentliche IPs sowie Sicherheitsgruppen. Ein solides Verständnis dieser Themen ist der Schlüssel zum Einrichten Ihres Netzwerks, damit Ihre Webserver auf sichere und performante Weise mit Ihren DB- und Cache-Servern kommunizieren können.