2017-07-26 5 views
0

Ich habe eine spring boot application, die embedded tomcat verwendet. Die App wird auf mehreren Instanzen des Typs EC2 gehostet, die bei Bedarf automatisch skaliert werden und von denen einige möglicherweise beendet oder neu gestartet werden. Effektiv gibt es 3 Instanzen der App, die ausgeführt werden, und Anforderungen werden vom Load Balancer an alle diese Instanzen weitergeleitet.AWS, Spring Boot, Tomcat: Sitzungsreplikation

Ich versuche track user sessions auf meiner App. Ich begann mit der Implementierung von Container-Level-Session-Management mit Tomcat HttpSession. Es ist jedoch nicht in der Lage, Sitzungen über Instanzen hinweg zu verfolgen. Auf der Suche nach etwas, ich habe gelernt, dass ich etwas wie Session-Replikation brauche.

Meine App läuft keinen Tomcat-Cluster, es hat 3 unabhängige Instanzen der API, die sowieso nicht miteinander kommunizieren. Ich plane nicht, das zu ändern und nicht sicher, ob es mit AWS möglich ist, da es Multicast-Kommunikation für diesen Zweck nicht fördert.

Auch ich möchte nicht eine separate DB (wie) nur für diesen Zweck einrichten/verwalten, weil ich nur session Ids für die Protokollierung benötigen, und ich muss das in einer leichten Art und Weise tun.

Gibt es eine andere Möglichkeit, Sitzungen über Instanzen hinweg zu verwalten? oder für meinen Zweck, wäre es besser, nur etwas benutzerdefinierten Code zu implementieren, der nach Sitzungs-ID/Token suchen kann, die zwischen Frontend und Backend hin- und hergeschickt werden.

Antwort

1

Das Ziel besteht darin, die Sitzungen von Ihrem Anwendungsserver zu externalisieren, damit Sie automatisch skalieren, neu starten, Lastenausgleich durchführen können, ohne sich Gedanken darüber zu machen, die Sitzung eines Benutzers zu unterbrechen.

Ehrlich gesagt auf AWS mit dem Spring-Stack, würde ich Spring Session + Redis empfehlen. Ich habe es unzählige Male benutzt und es ist sehr einfach zu implementieren. Sie können AWS Elasticache nutzen, das den Redis-Cluster für Sie verwaltet (wie RDS für relationale DBs tut).

Sie könnten Ihre eigene benutzerdefinierte Implementierung von Spring Session mit einem Backing Store von S3, Dynamo usw. schreiben. Aber ist das wirklich besser als die Redis-Implementierung? Ich würde den Weg des geringsten Widerstands empfehlen.

+0

Wie wäre es mit Tomcat-Clustering, die kosteneffektiv ist? – Navin