Serverlose Architektur ist eine Möglichkeit, Anwendungen und Dienste zu erstellen und auszuführen, ohne die Infrastruktur verwalten zu müssen. Dieser Ansatz hilft den Teams, sich auf den tatsächlichen geschäftlichen Mehrwert zu konzentrieren und die Verwaltung der Infrastruktur zu vergessen. Es gibt viele weitere Vorteile der Serverless-Architektur, die in verschiedenen Blogs behandelt werden.
In diesem Blog möchte ich einige der Serverless-Architekturmuster vorstellen, die ich in realen Projekten verwendet habe. Werfen wir einen Blick auf sie -
Muster 1 - Dies ist das einfachste Architekturmuster, auf das man stößt, wenn man nach einer Serverless-basierten Architektur sucht.
Ein Backend-Service, bei dem AWS API Gateway als Proxy-Ebene für die Lambda-basierten Geschäftsfunktionen fungiert. Lambda-Funktionen werden von API Gateway auf synchrone Weise aufgerufen. Daten werden in AWS DynamoDB, einem verwalteten NoSQL-Serverless-Service von AWS, gespeichert oder abgerufen.
API Gateway verfügt über viele zusätzliche Funktionen wie Caching, Ratenbegrenzung usw., die je nach Geschäftsanforderungen genutzt werden können.
Eine einzige Lambda-Funktion für alle Geschäftsfunktionen oder ein Lambda pro Geschäftsfunktion ist eine typische Frage, die mir im Allgemeinen gestellt wird? Nun, um es einfach und sicher zu halten - Verwenden Sie das Prinzip der einzigen Verantwortung und haben Sie eine Lambda-Funktion pro Geschäftsfunktion. Vereinigen Sie alle verwandten Lambda-Funktionen, um eine hohe Kohäsion zu erreichen und einen Microservice für die spezifische Domäne zu bilden. Und folgen Sie dem Least Privilege Prinzip - Jede Lambda Funktion hat eine Ausführungsrolle mit nur den Berechtigungen, die für die Geschäftsfunktionalität erforderlich sind.
Muster 2 – Wenn Sie mit mehreren Microservices in Ihrem Produkt arbeiten, wobei jeder Service einem anderen Team gehört, ist die Frage, wie Sie diese Services bereitstellen, sehr wichtig.
Nun, einer der Ansätze ist unten abgebildet
Wichtige Punkte
- Jedes Team verwaltet und besitzt die End-to-End-Servicebereitstellung – API Gateway, Lambda-Funktionen und DynamoDB.
- Jeder Service wird in einem anderen AWS-Konto bereitgestellt (verwaltet durch das Service-Team). Dies erhöht die TPS des Gesamtprodukts, da die Gleichzeitigkeitsgrenze für API-Gateway und Lambda-Funktionen auf Kontoebene liegt. Diese Grenzen sind natürlich weiche Grenzen und können erhöht werden, indem Sie einen Fall über die AWS-Konsole melden, wenn Sie planen, die Services im selben AWS-Konto zu hosten.
- Jedem Service kann eine benutzerdefinierte Domäne zugewiesen werden. So etwas wie – catalog.example.com OR order.example.com.
Wenn Sie planen, Microservices in einem einzigen Konto bereitzustellen, können Sie auch auf den Service mit einem einzigen Domänennamen zugreifen, der jedoch unter verschiedenen URL-Pfaden eingebunden ist. Zum Beispiel - example.com/api/order für den Bestelldienst ODER example.com/api/catalog für den Katalogdienst. Diese Konvention ist nicht möglich, wenn die Services auf verschiedenen AWS-Konten gehostet werden. OK…ich lüge! Es ist möglich, aber auf eine andere Art und Weise. Wir werden es in Muster 5 behandeln.
Muster 3 – Ein Standardarchitekturmuster für ein Produkt mit Backend und Frontend, wobei das Frontend eine Single Page Application (SPA) wie eine React- oder Angular-basierte Anwendung ist.
Wichtige Punkte
- Die statische SPA-Frontend-Anwendung wird in einem privaten S3-Bucket gehostet und über den AWS CloudFront-Service vermittelt. Dadurch können Sie der Webanwendung eine benutzerdefinierte Domäne zuweisen. Außerdem können die CDN-Fähigkeiten von CloudFront genutzt werden, um eine geringe Latenz bei der Bereitstellung der Inhalte zu erreichen.
- Der Backend-Service wird mit dem API-Gateway + Lambda + DynamoDB-Stack gehostet, der aus Muster 1 stammt.
Muster 4 - Eine Erweiterung von Muster #3. Wenn Sie Kunden haben, die geografisch verstreut sind, und Sie mehr Kontrolle über die Verteilung haben möchten, können Sie CloudFront als Proxy für ein regionales API-Gateway konfigurieren.
Ein Edge-optimiertes API-Gateway wird über CloudFront vermittelt, das von AWS verwaltet wird und über das Sie keine Kontrolle haben.
Muster 5 - Eines der Probleme mit Muster 3 und 4 ist, dass Sie CORS handhaben müssen, was zu einer zusätzlichen Latenz für jeden API-Aufruf vom Browser (Client) an die Backend-API führt. Diese zusätzliche Latenz entsteht durch den OPTIONS-Aufruf des Browsers an das Backend zur Überprüfung des CORS. Es findet also ein zusätzlicher Roundtrip vom Browser zum Server statt, bevor der eigentliche API-Aufruf aufgerufen wird. Um dies zu umgehen, kann das folgende Muster genutzt werden.
Bei diesem Muster werden sowohl Frontend- als auch Backend-APIs von einem einzigen CloudFront-Proxy bereitgestellt und durch denselben Domänennamen zugänglich gemacht. Sowohl S3 als auch API-Gateway (einfach/mehrfach) werden als Ursprünge konfiguriert und die Cache-Verhaltensweisen werden für jeden Ursprung konfiguriert. Etwas wie -
https://example.com/ui/index.html geht zu S3 Origin und
https://example.com/api/orders geht zu API Gateway
Und da die Domäne für den Zugriff auf die Frontend-Anwendung und die Backend-APIs dieselbe ist, spielt CORS keine Rolle.
Muster 6 - Storage First-Muster, bei dem die Daten zuerst gespeichert werden, bevor sie verarbeitet werden. API-Gateway fungiert als HTTP-basierter Proxy und kann Daten in SQS, Kinesis oder ähnlichen Speicherdiensten speichern. Die Daten werden dann von den Lambda-Funktionen verarbeitet.
Dieses Muster ermöglicht einen hohen eingehenden Datenverkehr, selbst wenn die Backend-Dienste nicht skalierbar sind.
Muster 7 – Dieses Muster ist die fortschrittlichste Version, die sowohl die vom Backend-Dienst gehosteten APIs als auch die in S3 gehosteten Frontend-Inhalte sichern kann.
API-Gateway kann AWS Lambda Authorizer und/oder AWS Cognito Service nutzen, um exponierte API-Endpunkte zu sichern. AWS AWS Lambda@Edge-Funktionen helfen bei der Sicherung von Inhalten, die über CloudFront bereitgestellt werden.
AWS Lambda@Edge ist eines der leistungsfähigen Konstrukte, das in Kombination mit der CloudFront-Distribution für eine ganze Reihe interessanter Aufgaben verwendet werden kann. Zum Beispiel
- Sichere statische Website
- Erweitertes Origin Failover
- Hinzufügen von Sicherheits-Headern für die statische Website
- A/B‑Tests
- Progressiver Rollout für statische Website
Ich habe nicht jedes einzelne Muster eingehend untersucht, hoffe aber, dass dieser Blog Ihnen einen Eindruck von den verschiedenen Serverless-Architekturmustern vermittelt, die für die Erstellung und Bereitstellung von Anwendungen verwendet werden.
Quelle: medium
Erfahren Sie mehr über Lösungen im Bereich Snowflake oder besuchen Sie eines unserer kostenlosen Webinare.