/ / AWS Lambda und Webanwendung mit Sitzungen und Datenbanken - Webanwendungen, aws-lambda

AWS Lambda und Webanwendung mit Sitzungen und Datenbanken - Webanwendungen, aws-lambda

Wir befinden uns in der Anfangsphase der Entwicklung eines neuen Internetanwendung und möchten die Amazon Cloud-Plattform nutzen. Wir haben jedoch die Wahl, Webanwendungen mit zu entwickeln Java spring Framework oder eine andere ProgrammierungSprache / Rahmen. Die mehrseitige Anwendung ist nicht zustandslos, d. H. Die Anwendung muss die Benutzersitzung für Transaktionen nach dem Anmelden verfolgen. Sobald alle erforderlichen Informationen vom Benutzer über mehrere Seiten erfasst wurden, wird die Transaktion in die Datenbank übernommen.

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

Antworten:

4 für die Antwort № 1

Ihre Frage ist nicht spezifisch für Lambda.Der einzige Fall, in dem die Sitzungsverwaltung einfach ist (z. B. im Speicher oder im dateibasierten Speicher gelöst werden kann), ist in einer einzelnen Serverumgebung. Das ist wahrscheinlich, woher du kommst.

In dem Moment, in dem Sie mit der horizontalen Skalierung beginnen (setzenmehr Server in den Mix anstatt nur mehr RAM / CPU in den Server zu stecken) Sie benötigen einen zentralen Speicher für Sitzungen (und auch Cache). Dies ist auch dann der Fall, wenn Sie Docker oder EC2- oder sogar Metallserver hinter einem Load Balancer auswählen.

Dies liegt daran, dass Sie nie sagen können, ob der nächsteDie Anfrage desselben Benutzers landet in derselben Umgebung. Dies gilt natürlich auch für Lambda. Es gibt jedoch eine Problemumgehung: Wenn Sie einen Loadbalancer verwenden, um "Sticky Sessions" zu verwenden, wird jede Anforderung desselben Benutzers an denselben Computer weitergeleitet (siehe) Dieses AWS-Dokument zur Sitzungsverwaltung. Eine Sticky-Sitzung ist jedoch immer suboptimal (z. B. würde eine Verkleinerung die Zerstörung von Sitzungen bedeuten), und für Lambda sind Sticky-Sitzungen afaik nicht möglich.

Die eigentliche Lösung besteht, wie die anderen Antworten hier nahelegen, in der zentralen Sitzungsspeicherung über Elasticache. Ein Zitat aus dem obigen Link:

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


2 für die Antwort № 2

Möglicherweise wird auf Lambda eine Stateful-Anwendung ausgeführt, wenn Sie einen externen persistenten Speicher für Ihre Sitzungsdaten verwenden können.

Sie können beispielsweise DynamoDB oder Elasticache als temporären Speicher für Ihre Sitzungsdaten verwenden. Sobald alle erforderlichen Daten bereit sind, können Sie sie dauerhaft in Ihren Datenbankabfragen beibehalten.


2 für die Antwort № 3

Bei der Entscheidung, ob eine Architektur ohne Server für Ihre Anwendung geeignet ist, ist viel zu beachten. Ich glaube nicht, dass es eine "Einheitsgröße" -Antwort auf diese Frage gibt.

Die Verwendung von Lambda anstelle von beispielsweise einem Servlet-Container führt in der Tat zu einem gewissen Entwicklungsaufwand in Bezug auf die Sitzungspersistenz. Ich denke jedoch nicht, dass dies unbedingt ein sein sollte primär Überlegen Sie, ob eine Architektur ohne Server für Ihre Anwendung geeignet ist. Bevor ich mir Gedanken darüber mache, wie die Sitzung ablaufen wird, würde ich mich fragen:

  • Bin ich bereit und in der Lage, die Anwendung als Sammlung von Microservices zu schreiben und die zusätzlichen Betriebs- und Entwicklungskomplexitäten zu akzeptieren, die mit diesem Ansatz verbunden sind?
  • Bin ich bereit, einen clientseitigen 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 Verkehrsmuster (und damit auch die Anforderungen an die Skalierbarkeit)? Ist mein Verkehr stabil? Stachelig? Habe ich lange Ruhezeiten?
  • Ist serverlos wahrscheinlich eine Kostenvorteil über EC2?
  • Wie schädlich wird Lambda-Kaltstart für Ihre UX sein?
  • Wie sensibel sind die Daten in der Sitzung in Bezug auf die Sitzung? Ist eine "zustandslose" Sitzung mit JWT eine Option?

Wenn Ihre Anwendung wirklich gut zu einer Architektur ohne Server passt, ist der Aufwand für das Fortbestehen einer Sitzung wahrscheinlich nicht so hoch, dass sie einen Deal Breaker darstellt.

Nach meiner Erfahrung haben Entwickler (einschließlich ich)Kämpfen Sie viel mehr mit dem Paradigmenwechsel zu Microservices und (oft) clientseitigem Rendering als mit den Besonderheiten, wie die Sitzung implementiert oder fortgesetzt wird.