Session Management in Microservices

10

Wir haben folgendes Setup.

  1. STM (Stingrey Traffic Manager) lädt den Load Balancing + Session Stickiness
  2. Weblogic 'Cluster'
  3. Auth wird von einem Drittanbieter-Tool behandelt

Daher muss ich mir keine Gedanken über die horizontale Skalierung / das Ausführen mehrerer Instanzen der Anwendung machen. Der STM / Weblogic-Cluster stellt sicher, dass die nachfolgende Anfrage zum selben verwalteten Server kommt.

Was wir derzeit haben, ist eine monolithische Anwendung und wir versuchen, zu Microservices zu wechseln. Außerdem möchten wir nicht aus der aktuellen Infrastruktur aussteigen (d. H. STM / Weblogic-Cluster / Auth-Tool). Was wir geplant haben, ist:

  1. Ein Gateway-WAR, der Anfragen an andere Microservices weiterleitet
  2. N x Microservices (WAR) für jede funktionale Subdomäne
  3. Nur das API-Gateway empfängt Benutzeranforderungen und andere Microservices sind von außen nicht zugänglich

Also meine Frage ist

  1. Sollte das API-Gateway voll sein, während andere Mikroeinheiten zustandslos sind?
  2. Wenn ja, wie sollten die Benutzersitzungsdaten zwischen API Gateway und Microservices ausgetauscht werden?

Bitte schlagen Sie auch bessere Alternativen und Ressourcen / Links vor. Danke.

    
Fahim Farook 23.09.2015, 13:43
quelle

1 Antwort

12

Lassen Sie mich meine Meinung teilen.

Vor allem, wenn Sie Ihre Anwendung statuslos halten können, tun Sie es auf alle Fälle :) Es wird die beste Lösung in Bezug auf Leistung und Skalierbarkeit sein.

Wenn dies nicht möglich ist, sollten Sie eine verteilte Sitzungsverwaltungsschicht verwalten.

Das für die Authentifizierung verantwortliche Gateway könnte eine eindeutige Sitzungskennung erzeugen, die später als Schlüssel verwendet werden kann. Dieser Schlüssel könnte an alle Microservices weitergegeben werden und ein Teil der API oder etwas sein.

Um auf die Sitzung zugreifen zu können, kann der Microservice einen Wert per Schlüssel erhalten und damit arbeiten.

Im Hinblick auf die Implementierung: Ich würde auf NoSQL-Lösungen schauen. Einige von ihnen, die Ihrem Bedarf entsprechen können, sind:

  1. Redis . Schau dir '' hset '' dort an
  2. Hazelcast . Es ist mehr ein In-Memory-Grid, aber wenn die Lösung nur Java ist, können Sie auch die erforderliche Funktionalität implementieren
  3. Memcache.d . Es wird dir eine alte gute Karte geben, einfach verteilt:)

Es gibt auch andere Lösungen, glaube ich.

Jetzt ist die Leistung entscheidend, sonst wird die ganze Lösung einfach zu langsam sein. In meinem Verständnis wäre die Verwendung eines RDBMS hier nicht gut, außerdem wäre es möglicherweise schwieriger, es zu skalieren.

Hoffe, das hilft

    
Mark Bramnik 23.09.2015, 15:02
quelle