Tipps und Informationsquellen zur Erstellung von serverlosen Anwendungen

Tipps und Informationsquellen zur Erstellung von serverlosen Anwendungen
Obwohl serverlose Technologien in den letzten Jahren schnell an Popularität gewonnen haben, gibt es nach wie vor viele Missverständnisse und Bedenken. Abhängigkeit vom Anbieter, Werkzeugset, Kostenmanagement, Kaltstart, Überwachung und Entwicklungslebenszyklus – all diese Themen werden intensiv diskutiert, wenn es um serverlose Technologien geht. In diesem Artikel werden wir einige der genannten Themen beleuchten und Tipps sowie Links zu nützlichen Informationsquellen bereitstellen, die es Anfängern ermöglichen, leistungsstarke, flexible und kosteneffiziente serverlose Anwendungen zu erstellen.

Missverständnisse über serverlose Technologien

Viele glauben, dass Serverlosigkeit und serverlose Datenverarbeitung (Functions as a Service, FaaS) nahezu dasselbe sind. Das bedeutet, die Unterschiede sind nicht allzu groß, und es lohnt sich, die Neuerung zu implementieren. Obwohl AWS Lambda eines der 'Stars' des Aufstiegs serverloser Technologien und eines der beliebtesten Elemente der serverlosen Architektur war, stellt diese Architektur mehr dar als nur FaaS.

Das Hauptprinzip der serverlosen Technologien besteht darin, dass Sie sich nicht um das Management und die Skalierung der Infrastruktur kümmern müssen; Sie zahlen nur für das, was Sie tatsächlich nutzen. Viele Dienste erfüllen diese Kriterien – darunter AWS DynamoDB, S3, SNS oder SQS, Graphcool, Auth0, Now, Netlify, Firebase und viele andere. Insgesamt bedeutet Serverlosigkeit, dass Sie die gesamten Möglichkeiten des Cloud Computing nutzen können, ohne die Infrastruktur selbst verwalten und optimieren zu müssen, um sie skalierbar zu machen. Dies bedeutet auch, dass die Sicherheit auf Infrastruktur-Ebene nicht mehr Ihr Problem ist, was ein großer Vorteil ist, angesichts der Herausforderungen und Komplexität bei der Einhaltung von Sicherheitsstandards. Schließlich müssen Sie die Ihnen zur Verfügung gestellte Infrastruktur nicht kaufen.

Serverless kann als ein "Zustand des Geistes" betrachtet werden: eine bestimmte Mentalität bei der Gestaltung von Lösungen. Vermeiden Sie Ansätze, die eine Wartung jeglicher Infrastruktur erfordern. Bei einem serverlosen Ansatz verbringen wir die Zeit mit der Lösung von Problemen, die direkt das Projekt beeinflussen und unseren Nutzern zugutekommen: Wir schaffen eine robuste Geschäftslogik, entwickeln Benutzeroberflächen und gestalten adaptive und zuverlässige APIs.

Wenn es beispielsweise möglich ist, das Management und die Pflege einer Plattform für die Volltextsuche zu vermeiden, dann tun wir genau das. Dieser Ansatz zur Anwendungsentwicklung kann die Markteinführung erheblich beschleunigen, da Sie nicht mehr über das Management einer komplexen Infrastruktur nachdenken müssen. Befreien Sie sich von den Pflichten und Kosten der Infrastrukturverwaltung und konzentrieren Sie sich darauf, Anwendungen und Dienstleistungen zu entwickeln, die Ihre Kunden benötigen. Patrick Debois nannte diesen Ansatz ‘servicefull’, dieser Begriff ist in der Serverless-Community verbreitet. Funktionen sollten als Verbindungselemente für Dienste in Form von deploybaren Modulen betrachtet werden (anstatt eine ganze Bibliothek oder Webanwendung zu deployen). Dies ermöglicht eine unglaubliche Granularität bei der Verwaltung von Deployments und Änderungen in der Anwendung. Wenn Sie Funktionen auf diese Weise nicht deployen können, könnte das darauf hindeuten, dass die Funktionen zu viele Aufgaben übernehmen und refaktoriert werden müssen.

Einige Kunden sind besorgt über die Abhängigkeit von Anbietern bei der Entwicklung von Cloud-Anwendungen. Das gilt ebenso für serverlose Technologien und ist wahrscheinlich kein Missverständnis. Nach unserer Erfahrung kombiniert die Erstellung serverloser Anwendungen auf AWS mit der Fähigkeit von AWS Lambda, andere AWS-Dienste zu integrieren, die Vorteile serverloser Architekturen. Dies ist ein gutes Beispiel für Synergie, bei der das Ergebnis der Kombination mehr ist als nur die Summe der Teile. Wenn Sie versuchen, die Abhängigkeit von Anbietern zu vermeiden, könnten Sie auf noch größere Probleme stoßen. Bei der Arbeit mit Containern ist es einfacher, Ihr eigenes Abstraktionsniveau zwischen den Cloud-Anbietern zu verwalten. Doch wenn es um serverlose Lösungen geht, werden sich die Bemühungen nicht auszahlen, insbesondere wenn von Anfang an die Wirtschaftlichkeit berücksichtigt wird. Stellen Sie unbedingt fest, wie Anbieter die Bereitstellung von Dienstleistungen sicherstellen. Einige spezialisierte Dienste sind von Integrationspunkten mit anderen Anbietern abhängig und bieten möglicherweise sofort eine Plug-and-Play-Verbindung. Es ist einfacher, eine Lambda-Funktion aus einem API-Gateway-Endpunkt aufzurufen, als eine Anfrage zu einem Container oder einer EC2-Instanz weiterzuleiten. Graphcool ermöglicht eine einfache Konfiguration mit Auth0, was einfacher ist, als Drittanbietermethoden zur Authentifizierung zu verwenden.

Die Auswahl des richtigen Anbieters für Ihre serverlose Anwendung ist eine architektonische Entscheidung. Bei der Erstellung einer Anwendung gehen Sie nicht davon aus, eines Tages wieder Server zu verwalten. Die Wahl des Cloud-Anbieters unterscheidet sich nicht von der Entscheidung, Container, eine Datenbank oder sogar eine Programmiersprache zu verwenden.

Überlegen Sie:

  • Welche Dienste benötigen Sie und warum?
  • Welche Dienste bieten Cloud-Anbieter an und wie können Sie diese mit der gewählten FaaS-Lösung kombinieren?
  • Welche Programmiersprachen werden unterstützt (mit dynamischer oder statischer Typisierung, kompilierte oder interpretierte Sprachen, welche Benchmarks es gibt, welche Leistung bei einem Kaltstart zu erwarten ist, wie die Open-Source-Ökosysteme aussehen usw.)?
  • Was sind Ihre Sicherheitsanforderungen (SLA, 2FA, OAuth, HTTPS, SSL usw.)?
  • Wie verwalten Sie Ihre CI/CD- und Softwareentwicklungszyklen?
  • Von welchen Lösungen der Infrastruktur-als-Code-Klasse können Sie profitieren?

Wenn Sie eine bestehende Anwendung erweitern und schrittweise serverlose Funktionen hinzufügen, kann dies die verfügbaren Möglichkeiten etwas einschränken. Dennoch bieten fast alle serverlosen Technologien einige APIs (über REST oder Nachrichtenqueues), die es ermöglichen, Erweiterungen unabhängig vom Kern der Anwendung zu erstellen und einfach zu integrieren. Suchen Sie nach Diensten mit klaren APIs, guter Dokumentation und einer starken Gemeinschaft, und Sie werden richtig liegen. Die Einfachheit der Integration kann oft eine entscheidende Metrik sein und ist wahrscheinlich einer der Hauptgründe für den Erfolg von AWS seit der Einführung von Lambda im Jahr 2015.

Wann ist Serverlosigkeit nützlich?

Serverless-Technologien lassen sich praktisch überall einsetzen. Ihre Vorteile beschränken sich jedoch nicht nur auf die Anwendungsmöglichkeiten. Die Einstiegshürden für Cloud-Computing sind heute so niedrig, gerade wegen serverloser Technologien. Wenn Entwickler eine Idee haben, aber nicht wissen, wie sie die Cloud-Infrastruktur verwalten und Kosten optimieren können, müssen sie nicht nach einem speziellen Ingenieur suchen. Wenn ein Startup eine Plattform aufbauen möchte, aber befürchtet, dass die Kosten außer Kontrolle geraten könnten, kann es sich leicht an serverlose Lösungen wenden.

Dank der Kosteneinsparungen und der einfachen Skalierbarkeit sind serverlose Lösungen sowohl für interne Systeme als auch für externe Anwendungen geeignet, bis hin zu webbasierten Anwendungen mit Millionen von Nutzern. Die Kosten werden eher in Cent als in Euro gemessen. Die Miete für die einfachste AWS EC2-Instanz (t1.micro) beträgt einen Monat lang 15 €, selbst wenn Sie nichts damit tun (wer hat nicht schon einmal vergessen, sie abzuschalten?!). Zum Vergleich: Um in derselben Zeit einen ähnlichen Kostenpunkt zu erreichen, müssten Sie eine Lambda-Funktion mit 512 MB für etwa 3 Millionen Einsätze pro Sekunde ausführen. Wenn Sie diese Funktion nicht nutzen, fallen jedoch keine Kosten an.

Da serverlose Technologien hauptsächlich auf Ereignissen basieren, lässt sich serverlose Infrastruktur relativ einfach in bestehende Systeme integrieren. Mit AWS S3, Lambda und Kinesis können Sie beispielsweise einen Analyse-Service für ein altes Einzelhandelssystem erstellen, der Daten über eine API empfangen kann.

Die meisten serverlosen Plattformen unterstützen verschiedene Programmiersprachen. Am häufigsten sind das Python, JavaScript, C#, Java und Go. In der Regel gibt es in allen Sprachen keine Einschränkungen bei der Verwendung von Bibliotheken, sodass Sie Ihre bevorzugten Open-Source-Bibliotheken einsetzen können. Es ist jedoch ratsam, nicht übermäßig viele Abhängigkeiten zu verwenden, damit Ihre Funktionen optimal ausgeführt werden und die Vorteile der enormen Skalierbarkeit Ihrer serverlosen Anwendungen nicht verloren gehen. Je mehr Pakete in den Container geladen werden müssen, desto länger dauert der Kaltstart.

Ein Kaltstart ist erforderlich, wenn zuerst der Container, die Ausführungsumgebung und der Fehlerhandler initialisiert werden müssen, bevor sie genutzt werden können. Dadurch kann die Ausführungsverzögerung von Funktionen bis zu 3 Sekunden betragen, was für ungeduldige Benutzer nicht ideal ist. Kaltstarts treten jedoch beim ersten Zugriff nach einigen Minuten Inaktivität der Funktion auf. Daher betrachten viele dies als eine geringfügige Unannehmlichkeit, die mit regelmäßigem Pingen der Funktion umgangen werden kann, um sie im Leerlauf zu halten. Manche ignorieren diesen Aspekt sogar völlig.

Obwohl AWS veröffentlicht hat serverlose SQL-Datenbank Serverless Aurora, dennoch sind SQL-Datenbanken nicht ideal für solche Anwendungen, da sie bei der Ausführung von Transaktionen von Verbindungen abhängen, die bei hohem Traffic auf AWS Lambda schnell zu einem Engpass werden können. Ja, die Entwickler verbessern kontinuierlich Serverless Aurora, und es ist ratsam, damit zu experimentieren. Allerdings sind für serverlose Systeme heute NoSQL-Lösungen wie DynamoDBdie weitaus bessere Wahl. Aber es steht außer Frage, dass sich diese Situation bald ändern wird.

Die Werkzeugumgebung bringt ebenfalls einige Einschränkungen mit sich, insbesondere im Bereich lokales Testen. Zwar gibt es Lösungen wie Docker-Lambda, DynamoDB Local und LocalStack, aber diese erfordern eine sorgfältige Arbeit und umfangreiche Konfiguration. Dennoch entwickeln sich all diese Projekte aktiv weiter, sodass es nur eine Frage der Zeit ist, bis die Werkzeugumgebung unseren Anforderungen entspricht.

Der Einfluss serverloser Technologien auf den Entwicklungszyklus

Da Ihre Infrastruktur einfach eine Konfiguration darstellt, kann Code mit Hilfe von Skripten, wie z. B. Shell-Skripten, festgelegt und bereitgestellt werden. Alternativ können auch Lösungen aus der Kategorie Configuration-as-Code wie AWS CloudFormation. Auch wenn dieser Service nicht für alle Bereiche Konfigurationen bietet, ermöglicht er es Ihnen, spezifische Ressourcen zur Nutzung als Lambda-Funktionen zu definieren. Dort, wo CloudFormation an seine Grenzen stößt, können Sie Ihre eigene Ressource (Lambda-Funktion) schreiben, die diese Lücke schließt. So können Sie alles Mögliche tun, sogar Abhängigkeiten außerhalb Ihrer AWS-Umgebung konfigurieren.

Da dies alles nur Konfiguration ist, können Sie Ihre Bereitstellungsskripte für spezifische Umgebungen, Regionen und Benutzer parametrisieren, insbesondere wenn Sie Lösungen wie Infrastructure-as-Code wie CloudFormation verwenden. Zum Beispiel können Sie eine Kopie der Infrastruktur für jeden Branch im Repository bereitstellen, um diese vollständig isoliert während der Entwicklung zu testen. Dies beschleunigt die Rückmeldung der Entwickler erheblich, wenn sie verstehen wollen, ob ihr Code in der Live-Umgebung angemessen funktioniert. Führungskräfte müssen sich keine Sorgen um die Kosten der Bereitstellung zahlreicher Umgebungen machen, da nur die tatsächliche Nutzung berechnet wird.

DevOps haben weniger zu befürchten, da sie lediglich sicherstellen müssen, dass die Entwickler die korrekte Konfiguration vornehmen. Das Management von Instanzen, Load-Balancern oder Sicherheitsgruppen ist nicht mehr erforderlich. Daher wird der Begriff NoOps immer häufiger verwendet, auch wenn es nach wie vor wichtig ist, die Infrastruktur zu konfigurieren – insbesondere im Hinblick auf IAM-Konfiguration und Optimierung von Cloud-Ressourcen.

Es gibt leistungsstarke Tools zur Überwachung und visuellen Darstellung wie Epsagon, Thundra, Dashbird und IOPipe. Diese ermöglichen es, den aktuellen Zustand serverloser Anwendungen zu verfolgen, bieten Protokolle und Tracing, erfassen Leistungsmetriken und architektonische Engpässe, führen Analysen und Kostenprognosen durch und vieles mehr. Sie bieten nicht nur DevOps-Ingenieuren, Entwicklern und Architekten umfassende Einblicke in die Anwendungsleistung, sondern ermöglichen es Managern auch, die Situation in Echtzeit zu überwachen, mit sekundengenauen Ressourcenausgaben und Kostenprognosen. Solch ein Betrieb ist mit verwalteter Infrastruktur deutlich schwieriger zu realisieren.

Die Entwicklung von serverlosen Anwendungen gestaltet sich erheblich einfacher, da Sie keine Webserver implementieren, virtuelle Maschinen oder Container verwalten und Server, Betriebssysteme sowie Gateways patchen müssen. Durch die Abstraktion aller dieser Aufgaben kann sich die serverlose Architektur auf das Wesentliche konzentrieren – die Bedürfnisse von Unternehmen und deren Kunden zu erfüllen.

Obwohl das Werkzeugset stetig verbessert wird, könnten einige Aspekte besser sein, haben Entwickler die Möglichkeit, sich auf die Implementierung der Geschäftslogik und die optimale Verteilung der Komplexität der Anwendung über verschiedene Dienste innerhalb der Architektur zu konzentrieren. Die Verwaltung serverloser Anwendungen erfolgt ereignisgesteuert und wird vom Cloud-Anbieter abstrahiert (zum Beispiel SQS, S3-Ereignisse oder DynamoDB-Streams). Somit reicht es, wenn die Entwickler die Geschäftslogik für eine Reaktion auf bestimmte Ereignisse festlegen, ohne sich Gedanken darüber machen zu müssen, wie die Datenbanken und Warteschlangen am besten umgesetzt werden oder wie die optimale Datenverarbeitung in bestimmten Hardware-Speichern organisiert werden kann.

Der Code kann lokal ausgeführt und debuggt werden, genau wie bei jedem Entwicklungsprozess. Das modulare Testen bleibt unverändert. Die Möglichkeit, die gesamte Anwendungsinfrastruktur mit einer anpassbaren Stack-Konfiguration bereitzustellen, ermöglicht es Entwicklern, schnell wertvolles Feedback zu erhalten, ohne sich um die Testkosten oder die Auswirkungen auf teure verwaltete Umgebungen sorgen zu müssen.

Werkzeuge und Methoden zur Erstellung serverloser Anwendungen

Es gibt keinen spezifischen Ansatz zur Erstellung serverloser Anwendungen. Ebenso wenig gibt es eine feste Auswahl an Diensten für diese Aufgabe. Führend unter den leistungsstarken serverlosen Lösungen ist derzeit AWS, jedoch sollten Sie auch auf Google Cloud, Zeit und Firebase. Wenn Sie AWS verwenden, könnte das Serverless Application Model (SAM) empfehlenswert sein, insbesondere bei der Verwendung von C#, da Visual Studio großartige Tools bietet. SAM CLI kann alles tun, was auch Visual Studio kann, sodass Sie nichts verlieren, wenn Sie auf eine andere IDE oder einen Texteditor wechseln. Natürlich funktioniert SAM auch mit anderen Sprachen. (SAM), insbesondere wenn Sie C# verwenden, da Visual Studio hervorragende Werkzeuge bietet. Das SAM CLI kann alles tun, was auch Visual Studio kann, sodass Sie nichts verlieren, wenn Sie zu einem anderen IDE oder Texteditor wechseln. Natürlich funktioniert SAM auch mit anderen Programmiersprachen.

Wenn Sie in anderen Sprachen schreiben, ist das Serverless Framework ein hervorragendes Open-Source-Tool, mit dem Sie alles mithilfe von sehr leistungsfähigen YAML-Konfigurationsdateien konfigurieren können. Das Serverless Framework unterstützt auch verschiedene Cloud-Services, daher empfehlen wir es allen, die nach einer Multi-Cloud-Lösung suchen. Es hat eine riesige Community, die viele Plugins für alle Bedürfnisse entwickelt hat.

Für lokale Tests eignen sich Open-Source-Tools wie Docker-Lambda, Serverless Local, DynamoDB Local und LocalStack gut. Serverless-Technologien befinden sich noch in der frühen Entwicklungsphase, ebenso wie die dafür verfügbaren Tools, sodass Sie beim Einrichten komplexer Testszenarien einiges an Mühe aufbringen müssen. Allerdings ist es unglaublich kostengünstig, einfach einen Stack in einer Umgebung bereitzustellen und dort zu testen. Sie müssen keine exakte lokale Kopie der Cloud-Umgebungen erstellen.

Verwenden Sie AWS Lambda Layers, um die Größe der bereitgestellten Pakete zu reduzieren und die Ladezeiten zu beschleunigen.

Verwenden Sie die richtigen Programmiersprachen für spezifische Aufgaben. Verschiedene Sprachen haben ihre eigenen Vor- und Nachteile. Es gibt viele Benchmarks, aber JavaScript, Python und C# (.NET Core 2.1+) sind die führenden Sprachen in Bezug auf die Leistung von AWS Lambda. Neu ist das Runtime API von AWS Lambda, das es ermöglicht, die gewünschte Sprache und Ausführungsumgebung anzugeben, also probieren Sie es aus.

Halten Sie die Paketgröße für die Bereitstellung klein. Je kleiner sie sind, desto schneller werden sie geladen. Vermeiden Sie die Verwendung großer Bibliotheken, besonders wenn Sie nur ein paar Funktionen daraus nutzen. Wenn Sie in JavaScript programmieren, verwenden Sie Build-Tools wie Webpack, um den Build zu optimieren und nur das einzuschließen, was Sie wirklich benötigen. In .NET Core 3.0 gibt es QuickJit und Tiered Compilation, die die Leistung verbessern und bei kalten Starts erheblich helfen.

Die Abhängigkeit von serverlosen Funktionen von Ereignissen kann anfangs die Koordination der Geschäftslogik erschweren. In diesem Zusammenhang können Nachrichtenwarteschlangen und Zustandsautomaten äußerst hilfreich sein. Lambda-Funktionen können sich gegenseitig aufrufen, jedoch sollten Sie dies nur tun, wenn Sie keine Antwort erwarten („abfeuern und vergessen“) – Sie möchten schließlich nicht für das Warten auf den Abschluss einer anderen Funktion bezahlen. Nachrichtenwarteschlangen sind nützlich, um Teile der Geschäftslogik zu isolieren, Engpässe in Anwendungen zu steuern und Transaktionen durch FIFO-Warteschlangen zu verarbeiten. AWS Lambda-Funktionen können SQS-Warteschlangen als Warteschlangen für „hängende“ Nachrichten zugeordnet werden, die fehlerhafte Nachrichten für eine spätere Analyse verfolgen. AWS Step Functions (Zustandsautomaten) sind sehr nützlich, um komplexe Prozesse zu steuern, die die Erstellung von Funktionenketten erfordern. Anstatt dass eine Lambda-Funktion eine andere Funktion aufruft, können Step Functions die Zustandübergänge koordinieren, Daten zwischen Funktionen übertragen und den globalen Zustand der Funktionen verwalten. Dies ermöglicht es, Bedingungen für Wiederholungsversuche festzulegen oder zu definieren, was im Falle eines bestimmten Fehlers zu tun ist – ein äußerst mächtiges Werkzeug unter bestimmten Bedingungen.

Fazit

In den letzten Jahren haben sich serverlose Technologien in einem zuvor nie gesehenen Tempo entwickelt. Diese Paradigmenwechsel bringen jedoch auch bestimmte Missverständnisse mit sich. Durch die Abstraktion von Infrastruktur und das Management von Skalierungen bieten serverlose Lösungen erhebliche Vorteile: von der Vereinfachung der Entwicklungs- und DevOps-Prozesse bis hin zu einer drastischen Senkung der Betriebskosten.
Obwohl der serverlose Ansatz nicht ohne Nachteile ist, gibt es dennoch zuverlässige Methoden und Designmuster, mit denen sich robuste serverlose Anwendungen erstellen oder serverlose Elemente in bestehende Architekturen integrieren lassen.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster