AWS Lambda und Webanwendung mit Sitzungen und Datenbanken

9

Wir befinden uns in der Anfangsphase der Entwicklung einer neuen Webanwendung und möchten die Amazon Cloud-Plattform nutzen. Wir haben jedoch die Wahl, Webanwendungen mit Java spring framework oder einer anderen Programmiersprache / Framework zu entwickeln. Die mehrseitige Anwendung ist nicht zustandslos, d. H. Die Anwendung muss die Benutzersitzung nach einmal eingeloggten Transaktionen verfolgen. Sobald alle erforderlichen Informationen vom Benutzer über mehrere Seiten erfasst sind, wird die Transaktion an die Datenbank übergeben.

Es besteht jedoch die Möglichkeit, dass wir für diese Anwendung AWS lambda -Dienste verwenden. Wäre es eine richtige Entscheidung, eine Webanwendung mit den oben genannten Anforderungen mit AWS Lambda zu entwickeln (in der Gewissheit, dass der Lambda-Service sessionless ist)?

    
Krishna Kuntala 22.12.2017, 13:52
quelle

3 Antworten

3

Ihre Frage ist nicht spezifisch für Lambda. Der einzige Fall, in dem die Sitzungsverwaltung einfach ist (z. B. kann durch einen Speicher oder einen dateibasierten Speicher gelöst werden), ist in einer Einzelserverumgebung. Das ist wahrscheinlich, wo du herkommst.

Sobald Sie anfangen horizontal zu skalieren (setzen Sie mehr Server in den Mix, anstatt einfach mehr RAM / CPU in den Server zu packen), benötigen Sie einen zentralen Speicher für Sitzungen (und auch Cache). Dies gilt auch, wenn Sie Andocker oder EC2- oder sogar Metallserver hinter einem Load Balancer auswählen.

Dies liegt daran, dass Sie nie erkennen können, ob die nächste Anfrage von demselben Benutzer in derselben Umgebung landen wird. Das gilt natürlich auch für Lambda. Es gibt jedoch eine Problemumgehung: Wenn Sie einen Loadbalancer verwenden, um "sticky sessions" zu verwenden, werden alle Anfragen desselben Benutzers an dieselbe Maschine weitergeleitet, siehe dieses AWS-Dokument zur Sitzungsverwaltung . Aber sticky Sitzung ist immer suboptimal (z. B. würde das Herunterskalieren bedeuten, Sitzungen zu zerstören) und für Lambda sind sticky Sitzungen nicht möglich afaik.

Die wirkliche Lösung, wie die anderen Antworten hier andeuten, beinhaltet den zentralen Sitzungsspeicher über Elasticache. Ein Zitat aus dem obigen Link:

  

Um die Skalierbarkeit zu erreichen und einen gemeinsamen Datenspeicher für Sitzungen bereitzustellen, auf die von jedem einzelnen Webserver aus zugegriffen werden kann, können Sie die HTTP-Sitzungen von den Webservern selbst abstrahieren. Eine gängige Lösung hierfür ist die Verwendung eines speicherinternen Schlüssel / Wertspeichers wie Redis und Memcached.

    
hansaplast 08.01.2018 19:44
quelle
1

Möglicherweise haben Sie eine statusbehaftete Anwendung, die auf Lambda ausgeführt wird, wenn Sie einen externen permanenten Speicher für Ihre Sitzungsdaten verwenden können.

Sie können DynamoDB oder Elasticache zum Beispiel als temporären Speicher für Ihre Sitzungsdaten verwenden und sobald alle erforderlichen Daten bereit sind, können Sie sie dauerhaft in Ihren Datenbankabfragen persistieren.

    
dashmug 22.12.2017 19:13
quelle
1

Bei der Entscheidung, ob eine serverlose Architektur für Ihre Anwendung geeignet ist, ist eine Menge zu beachten. Ich glaube nicht, dass es eine "one size fits all" Antwort auf diese Frage gibt.

Die Verwendung von Lambda anstelle von beispielsweise einem Servlet-Container führt tatsächlich zu einem gewissen Entwicklungsaufwand in Bezug auf die Sitzungspersistenz. Ich denke jedoch nicht, dass dies unbedingt eine primäre Überlegung sein sollte, wenn Sie sich fragen, ob eine serverlose Architektur für Ihre Anwendung geeignet ist. Bevor ich mir Gedanken darüber mache, wie die Sitzung funktionieren wird, frage ich mich:

  • Bin ich willens und in der Lage, die Anwendung als eine Sammlung von Microservices zu schreiben, und akzeptiere die zusätzlichen operativen und Entwicklungskomplexitäten, die mit diesem Ansatz einhergehen?
  • Bin ich bereit, einen Client-seitigen Rendering-Ansatz für meine Benutzeroberfläche zu verwenden? Wenn nicht, lässt sich die von mir gewählte serverseitige Rendering-Technologie problemlos in Lambda integrieren?
  • Wie viel Geschäftslogik kann ich (sicher) auf der Client-Seite einbetten?
  • Was sind meine Datenverkehrsmuster (und damit die Skalierbarkeitsanforderungen)? Ist mein Verkehr stabil? Stachelig? Habe ich lange Ruhezeiten?
  • Hat Serverless wahrscheinlich einen Kostenvorteil gegenüber EC2?
  • Wie schädlich wird Lambda Cold für Ihre UX sein?
  • Schließlich, in Bezug auf die Sitzung, wie empfindlich sind die Daten in der Sitzung? Ist eine "zustandslose" Sitzung mit JWT eine Option?

Wenn Ihre Anwendung wirklich für eine serverlose Architektur geeignet ist, ist der Aufwand, herauszufinden, wie eine Sitzung wahrscheinlich beibehalten wird, nicht so kostspielig, um ein Deal Breaker zu sein.

Nach meiner Erfahrung haben Entwickler (einschließlich mir selbst) viel mehr mit Paradigmenwechsel zu Microservices und (oft) clientseitigem Rendering zu tun, als mit den Besonderheiten, wie die Session implementiert oder fortgeführt wird.

    
Mike Patrick 08.01.2018 01:01
quelle

Tags und Links