Tipps und Quellen zum Erstellen von Anwendungen ohne Server


Obwohl serverlose Technologien in den letzten Jahren schnell an Popularität gewonnen haben, gibt es immer noch viele Missverständnisse und Bedenken, die damit verbunden sind. Lieferantenabhängigkeit, Tools, Kostenmanagement, Kaltstart, Überwachung und Entwicklungslebenszyklus - all diese Themen werden bei serverlosen Technologien aktiv diskutiert. In diesem Artikel werden einige der genannten Themen behandelt und Tipps und Links zu nützlichen Informationsquellen ausgetauscht, mit denen Anfänger leistungsstarke, flexible und wirtschaftliche Anwendungen ohne Server erstellen können.

Missverständnisse in Bezug auf serverlose Technologien


Viele glauben, dass Serverlosigkeit und Nicht-Server-Datenverarbeitung ( Functions as a Service , FaaS) fast dasselbe sind. Der Unterschied ist also nicht zu groß und es lohnt sich, ein neues Produkt einzuführen. Obwohl AWS Lambda einer der Stars in der Blütezeit der serverlosen Technologien und eines der beliebtesten Elemente der serverlosen Architektur war, ist diese Architektur mehr als FaaS.

Das Grundprinzip serverloser Technologien besteht darin, dass Sie sich nicht um die Verwaltung und Skalierung der Infrastruktur kümmern müssen, sondern nur für das bezahlen, was Sie verwenden. Viele Dienste eignen sich für diese Kriterien - AWS DynamoDB, S3, SNS oder SQS, Graphcool, Auth0, Now, Netlify, Firebase und viele andere. Im Allgemeinen bedeutet Serverlosigkeit, dass alle Funktionen des Cloud-Computing genutzt werden, ohne dass die Infrastruktur und ihre Optimierung zum Zwecke der Skalierung verwaltet werden müssen. Dies bedeutet auch, dass die Sicherheit auf Infrastrukturebene nicht länger Ihr Problem ist, sondern angesichts der Schwierigkeit und Komplexität der Einhaltung von Sicherheitsstandards ein großer Vorteil ist. Schließlich müssen Sie die Ihnen zur Verfügung gestellte Infrastruktur nicht kaufen.

Serverlosigkeit kann als "Geisteszustand" betrachtet werden: eine bestimmte Mentalität bei der Gestaltung von Lösungen. Vermeiden Sie Ansätze, die die Wartung einer Infrastruktur erfordern. Mit einem serverlosen Ansatz verbringen wir Zeit damit, Probleme zu lösen, die sich direkt auf das Projekt auswirken und unseren Benutzern Vorteile bringen: Wir erstellen eine nachhaltige Geschäftslogik, entwickeln Benutzeroberflächen und entwickeln adaptive und zuverlässige APIs.

Wenn Sie beispielsweise vermeiden können, die Freitextsuchplattform zu verwalten und zu warten, tun wir dies. Dieser Ansatz zum Erstellen von Anwendungen kann die Markteinführung des Produkts erheblich beschleunigen, da Sie nicht mehr über die Verwaltung komplexer Infrastrukturen nachdenken müssen. Befreien Sie sich von den Verantwortlichkeiten und Kosten für die Verwaltung Ihrer Infrastruktur und konzentrieren Sie sich auf die Erstellung der Anwendungen und Dienste, die Ihre Kunden benötigen. Patrick Debois nannte diesen Ansatz "servicefull"wird dieser Begriff in der serverlosen Community übernommen. Funktionen sollten als Verbindungsglied für Dienste in Form von bereitstellbaren Modulen betrachtet werden (anstatt eine gesamte Bibliothek oder Webanwendung bereitzustellen). Dies bietet eine unglaubliche Granularität bei der Verwaltung der Bereitstellung und Änderungen in der Anwendung. Wenn Sie Funktionen auf diese Weise nicht bereitstellen können, weist dies möglicherweise darauf hin, dass Funktionen zu viele Aufgaben ausführen und überarbeitet werden sollten.

Einige sind durch die Abhängigkeit des Anbieters bei der Entwicklung von Cloud-Anwendungen verwirrt. Das Gleiche gilt für serverlose Technologien, und dies ist kaum eine Folge von Verwirrung. Nach unserer Erfahrung bietet das Erstellen von Anwendungen ohne Server in AWS in Kombination mit der Fähigkeit von AWS Lambda, andere AWS-Services zu integrieren, teilweise die Vorteile von Architekturen ohne Server. Dies ist ein gutes Beispiel für Synergieeffekte, wenn das Ergebnis der Kombination mehr als nur die Summe der Begriffe ist. Wenn Sie versuchen, die Abhängigkeit von Anbietern zu vermeiden, können noch größere Probleme auftreten. Wenn Sie mit Containern arbeiten, ist es einfacher, Ihre eigene Abstraktionsebene zwischen Cloud-Anbietern zu verwalten. Bei serverlosen Lösungen zahlen sich die Anstrengungen jedoch nicht aus, insbesondere wenn die Wirtschaftlichkeit von Anfang an berücksichtigt wird. Stellen Sie sicher, dass Sie herausfinden, wie Anbieter Dienste bereitstellen.Einige spezialisierte Dienste hängen von Integrationspunkten mit anderen Anbietern ab und bieten sofort Plug-and-Play-Konnektivität. Es ist einfacher, einen Lambda-Aufruf vom Gateway-API-Endpunkt bereitzustellen, als die Anforderung an einen Container oder eine EC2-Instanz weiterzuleiten. Graphcool bietet eine einfache Konfiguration mit Auth0, die einfacher ist als die Authentifizierung durch Drittanbieter.

Die Auswahl des richtigen Anbieters für Ihre serverlose Anwendung ist eine Lösung auf Architekturebene. Wenn Sie eine Anwendung erstellen, erwarten Sie nicht, dass Sie eines Tages zur Serververwaltung zurückkehren. Die Auswahl eines Cloud-Anbieters unterscheidet sich nicht von der Auswahl von Containern, einer Datenbank oder sogar einer Programmiersprache.

Erwägen:

  • Welche Dienstleistungen benötigen Sie und warum?
  • Welche Services werden von Cloud-Anbietern bereitgestellt und wie können Sie diese mit der ausgewählten FaaS-Lösung kombinieren?
  • Welche Programmiersprachen werden unterstützt (mit dynamischer oder statischer Typisierung, kompiliert oder interpretiert, was sind die Benchmarks, wie ist die Leistung bei einem Kaltstart, was ist das Open Source-Ökosystem usw.).
  • Was sind Ihre Sicherheitsanforderungen (SLA, 2FA, OAuth, HTTPS, SSL usw.)?
  • So verwalten Sie Ihre CI / CD- und Softwareentwicklungszyklen.
  • Welche Infrastruktur-als-Code-Klassenlösungen können Sie nutzen?

Wenn Sie eine vorhandene Anwendung erweitern und schrittweise Funktionen ohne Server hinzufügen, kann dies die verfügbaren Optionen etwas einschränken. Fast alle serverlosen Technologien bieten jedoch eine Art API (über REST- oder Nachrichtenwarteschlangen), mit der Sie unabhängig vom Anwendungskern und mit einfacher Integration Erweiterungen erstellen können. Suchen Sie nach Diensten mit klaren APIs, guter Dokumentation und einer starken Community, und Sie werden sich nicht irren. Einfache Integration kann oft eine wichtige Messgröße sein, und dies ist wahrscheinlich einer der Hauptgründe für den Erfolg von AWS seit der Veröffentlichung von Lambda im Jahr 2015.

Wenn Serverlosigkeit nützlich ist


Serverlose Technologien können fast überall angewendet werden. Ihre Vorteile sind jedoch nicht nur auf eine Anwendung beschränkt. Die Cloud-Eintrittsschwelle ist heute dank serverloser Technologien so niedrig. Wenn Entwickler eine Idee haben, aber nicht wissen, wie sie die Cloud-Infrastruktur verwalten und die Kosten optimieren sollen, müssen sie dafür keinen Ingenieur suchen. Wenn ein Startup eine Plattform erstellen möchte, aber befürchtet, dass die Kosten außer Kontrolle geraten könnten, kann es leicht zu serverlosen Lösungen greifen.

Aufgrund von Kosteneinsparungen und einfacher Skalierung sind serverlose Lösungen sowohl für interne als auch für externe Systeme bis hin zu einer Webanwendung mit mehreren Millionen Zielgruppen gleichermaßen anwendbar. Konten werden nicht in Euro, sondern in Cent gemessen. Das Mieten der einfachsten Instanz von AWS EC2 (t1.micro) für einen Monat kostet 15 €, auch wenn Sie nichts damit anfangen (wer hat nie vergessen, es auszuschalten ?!). Im Vergleich dazu müssen Sie Lambda 512 MB mit einer Größe von etwa 3 Millionen Mal 1 Sekunde lang ausführen, um im gleichen Zeitraum bereits ein solches Ausgabenniveau zu erreichen. Und wenn Sie diese Funktion nicht nutzen, zahlen Sie nichts.

Da die serverlose Technologie in erster Linie von Ereignissen abhängt, ist es ziemlich einfach, älteren Systemen eine serverlose Infrastruktur hinzuzufügen. Mit AWS S3, Lambda und Kinesis können Sie beispielsweise einen Analysedienst für ein altes Einzelhandelssystem erstellen, das Daten über die API empfangen kann.

Die meisten serverlosen Plattformen unterstützen verschiedene Sprachen. Am häufigsten sind dies Python, JavaScript, C #, Java und Go. Normalerweise gibt es in allen Sprachen keine Einschränkungen für die Verwendung von Bibliotheken, sodass Sie Ihre bevorzugten Open Source-Bibliotheken verwenden können. Es ist jedoch ratsam, die Abhängigkeiten nicht zu missbrauchen, damit Ihre Funktionen optimal funktionieren und die Vorteile der enormen Skalierbarkeit Ihrer serverlosen Anwendungen nicht zunichte gemacht werden. Je mehr Pakete Sie in den Container laden müssen, desto länger dauert der Kaltstart.

Ein Kaltstart ist, wenn Sie zuerst den Container, die Laufzeit und den Fehlerbehandler initialisieren müssen, bevor Sie sie verwenden. Aus diesem Grund kann die Verzögerung bei der Ausführung von Funktionen 3 Sekunden erreichen, und dies ist nicht die beste Option für ungeduldige Benutzer. Kaltstarts treten jedoch beim ersten Gebrauch nach einigen Minuten Ausfallzeit auf. So viele Leute halten dies für eine kleine Unannehmlichkeit, die umgangen werden kann, indem regelmäßig eine Funktion gepingt wird, um sie im Leerlauf zu halten. Oder ignorieren Sie diesen Aspekt.

Obwohl AWS die Serverless Aurora Serverless SQL-Datenbank veröffentlicht hatSQL-Datenbanken sind jedoch für eine solche Anwendung nicht ideal, da sie bei der Ausführung von Transaktionen von Verbindungen abhängen, die schnell zu einem Engpass mit viel Verkehr auf AWS Lambda werden können. Ja, Entwickler verbessern Serverless Aurora ständig, und Sie sollten damit experimentieren, aber heute sind NoSQL-Lösungen wie DynamoDB für Serverless-Systeme viel besser . Es besteht jedoch kein Zweifel, dass sich diese Situation sehr bald ändern wird.

Das Toolkit unterliegt auch vielen Einschränkungen, insbesondere im Bereich der lokalen Tests. Es gibt zwar Lösungen wie Docker-Lambda, DynamoDB Local und LocalStack, diese erfordern jedoch sorgfältige Arbeit und einen erheblichen Konfigurationsaufwand. Alle diese Projekte entwickeln sich jedoch aktiv weiter. Es ist also nur eine Frage der Zeit, bis die Tools das von uns benötigte Niveau erreichen.

Der Einfluss serverloser Technologien auf den Entwicklungszyklus


Da Ihre Infrastruktur nur eine Konfiguration ist, können Sie Code mithilfe von Skripten wie Shell-Skripten definieren und bereitstellen. Sie können auch auf Lösungen für die Konfiguration als Code-Klasse wie AWS CloudFormation zurückgreifen . Obwohl dieser Dienst nicht für alle Bereiche konfiguriert ist, können Sie bestimmte Ressourcen für die Verwendung als Lambda-Funktionen definieren. Das heißt, wo CloudFormation Sie im Stich lässt, können Sie Ihre eigene Ressource (Lambda-Funktion) schreiben, die diese Lücke schließt. Auf diese Weise können Sie alles tun, auch Abhängigkeiten außerhalb Ihrer AWS-Umgebung konfigurieren.

Da dies alles nur eine Konfiguration ist, können Sie Ihre Bereitstellungsskripts für bestimmte Umgebungen, Regionen und Benutzer parametrisieren, insbesondere wenn Sie Klassenlösungen für die Infrastruktur als Code wie CloudFormation verwenden. Beispielsweise können Sie für jeden Zweig im Repository eine Kopie der Infrastruktur bereitstellen, um sie während der Entwicklung isoliert zu testen. Dies beschleunigt das Erhalten von Feedback durch Entwickler drastisch, wenn sie verstehen möchten, ob ihr Code in einer Live-Umgebung ordnungsgemäß funktioniert. Manager müssen sich nicht um die Kosten für die Bereitstellung zahlreicher Umgebungen kümmern, da nur die tatsächliche Nutzung bezahlt wird.

DevOps macht sich weniger Sorgen, da sie nur sicherstellen müssen, dass die Entwickler die richtige Konfiguration haben. Sie müssen keine Instanzen, Balancer oder Sicherheitsgruppen mehr verwalten. Daher wird zunehmend der Begriff NoOps verwendet, obwohl es immer noch wichtig ist, die Infrastruktur konfigurieren zu können, insbesondere wenn es um die IAM-Konfiguration und die Optimierung von Cloud-Ressourcen geht.

Es gibt sehr leistungsfähige Überwachungs- und visuelle Tools wie Epsagon, Thundra, Dashbird und IOPipe. Mit ihnen können Sie den aktuellen Status von Anwendungen ohne Server überwachen, Protokolle und Ablaufverfolgungen bereitstellen, Leistungsmetriken und Architekturengpässe aufzeichnen, Kostenanalysen und -prognosen durchführen und vieles mehr. Sie geben den Ingenieuren, Entwicklern und Architekten von DevOps nicht nur eine umfassende Vorstellung davon, wie Anwendungen funktionieren, sondern ermöglichen es den Managern auch, die Situation in Echtzeit mit Ressourcenkosten pro Sekunde und Kostenvorhersage zu überwachen. Die Verwaltung mit einer verwalteten Infrastruktur ist viel schwieriger.

Das Entwerfen von Anwendungen ohne Server ist viel einfacher, da Sie keine Webserver bereitstellen, virtuelle Maschinen oder Container, Patch-Server, Betriebssysteme, Internet-Gateways usw. verwalten müssen. Durch die Abkehr von all diesen Verantwortlichkeiten kann sich die Architektur ohne Server auf das Wesentliche konzentrieren - die Lösung Bedürfnisse von Unternehmen und Kunden.

Obwohl das Toolkit besser sein könnte (es verbessert sich jeden Tag), können sich Entwickler auf die Implementierung der Geschäftslogik und die bestmögliche Verteilung der Anwendungskomplexität auf verschiedene Dienste innerhalb der Architektur konzentrieren. Serverlose Anwendungen werden vom Cloud-Anbieter ereignisgesteuert und abstrahiert (z. B. SQS-, S3-Ereignisse oder DynamoDB-Streams). Daher müssen Entwickler nur Geschäftslogik vorschreiben, um auf bestimmte Ereignisse zu reagieren, und Sie müssen sich keine Gedanken darüber machen, wie Sie Datenbanken und Nachrichtenwarteschlangen besser implementieren oder wie Sie die optimale Arbeit mit Daten in bestimmten Hardwarespeichern organisieren.

Der Code kann wie bei jedem Entwicklungsprozess lokal ausgeführt und debuggt werden. Unit-Tests bleiben gleich. Durch die Möglichkeit, eine gesamte Anwendungsinfrastruktur mit einer benutzerdefinierten Stapelkonfiguration bereitzustellen, können Entwickler schnell wichtige Rückmeldungen erhalten, ohne sich um die Testkosten oder die Auswirkungen auf teure verwaltete Umgebungen sorgen zu müssen.

Tools und Techniken zum Erstellen von Anwendungen ohne Server


Es gibt keine spezielle Möglichkeit, serverlose Anwendungen zu erstellen. Sowie eine Reihe von Diensten für diese Aufgabe. AWS ist heute führend unter den leistungsstarken Lösungen ohne Server . Achten Sie jedoch auf Google Cloud , Zeit und Firebase . Wenn Sie AWS verwenden, kann das Serverless Application Model (SAM) als Ansatz zum Sammeln von Anwendungen empfohlen werden , insbesondere bei Verwendung von C #, da Visual Studio ein hervorragendes Toolkit ist. SAM CLI kann alles genauso machen wie Visual Studio, sodass Sie nichts verlieren, wenn Sie zu einer anderen IDE oder einem anderen Texteditor wechseln. Natürlich funktioniert SAM auch mit anderen Sprachen.

Wenn Sie in anderen Sprachen schreiben, ist das Serverless Framework ein hervorragendes Open Source-Tool, mit dem Sie mithilfe sehr leistungsfähiger Konfigurations-YAML-Dateien alles konfigurieren können. Serverless Framework unterstützt auch verschiedene Cloud-Dienste. Wir empfehlen es daher allen, die nach einer Multi-Cloud-Lösung suchen. Er hat eine riesige Community, die eine Reihe von Plug-Ins für alle Anforderungen erstellt hat.

Für lokale Tests sind die Open-Source-Tools Docker-Lambda, Serverless Local, DynamoDB Local und LocalStack gut geeignet. Serverlose Technologien befinden sich noch in einem frühen Entwicklungsstadium, ebenso wie die Tools für sie. Wenn Sie sich also auf komplexe Testszenarien einstellen, müssen Sie schwitzen. Nur den Stack in der Umgebung zu erweitern und dort zu testen, ist jedoch unglaublich billig. Und Sie müssen keine exakte lokale Kopie von Cloud-Umgebungen erstellen.

Verwenden Sie die AWS Lambda-Ebenen, um die Größe der bereitgestellten Pakete zu reduzieren und das Laden zu beschleunigen.

Verwenden Sie für bestimmte Aufgaben die richtigen Programmiersprachen. Verschiedene Sprachen haben ihre Vor- und Nachteile. Es gibt viele Benchmarks, aber JavaScript, Python und C # (.NET Core 2.1+) sind führend in Bezug auf die Leistung von AWS Lambda. Die Laufzeit-API wurde kürzlich in AWS Lambda veröffentlicht, mit der Sie die gewünschte Sprache und Laufzeit angeben können. Experimentieren Sie also.

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, insbesondere wenn Sie einige Funktionen aus diesen verwenden. Wenn Sie in JavaScript programmieren, verwenden Sie Build-Tools wie Webpack, um Ihren Build zu optimieren und nur das einzuschließen, was Sie wirklich benötigen. .NET Core 3.0 verfügt über QuickJit und Tiered Compilation, die die Leistung verbessern und bei Kaltstarts erheblich helfen.

Die Abhängigkeit von Funktionen ohne Server von Ereignissen kann zunächst die Koordination der Geschäftslogik erschweren. In dieser Hinsicht können Nachrichtenwarteschlangen und Zustandsautomaten unglaublich nützlich sein. Lambda-Funktionen können sich gegenseitig anrufen, aber nur, wenn Sie keine Antwort erwarten („erschossen und vergessen“) - Sie möchten kein Konto für das Warten auf den Abschluss einer anderen Funktion erhalten. Nachrichtenwarteschlangen sind nützlich, um Teile der Geschäftslogik zu isolieren, Anwendungsengpässe zu verwalten und Transaktionen zu verarbeiten (mithilfe von FIFO-Warteschlangen). AWS Lambda-Funktionen können SQS-Warteschlangen als Warteschlangen für hängende Nachrichten zugewiesen werden, die fehlgeschlagene Nachrichten für eine spätere Analyse verfolgen. AWS-Schrittfunktionen (Zustandsautomaten) sind sehr nützlich für die Verwaltung komplexer Prozesse, für die Funktionsketten erstellt werden müssen.Anstatt eine Lambda-Funktion als eine andere Funktion aufzurufen, können Step-Funktionen Zustandsübergänge koordinieren, Daten zwischen Funktionen übertragen und den globalen Status von Funktionen steuern. Auf diese Weise können Sie die Bedingungen für Wiederholungsversuche festlegen oder festlegen, was zu tun ist, wenn ein bestimmter Fehler auftritt - unter bestimmten Bedingungen ein sehr leistungsfähiges Tool.

Fazit


In den letzten Jahren haben sich serverlose Technologien in einem beispiellosen Tempo entwickelt. Mit diesem Paradigmenwechsel sind bestimmte Missverständnisse verbunden. Durch die Abstraktion der Infrastruktur und die Verwaltung der Skalierung bieten serverlose Lösungen erhebliche Vorteile: von vereinfachten Entwicklungs- und DevOps-Prozessen bis hin zu erheblichen Einsparungen bei den Betriebskosten.
Obwohl der Ansatz ohne Server nicht ohne Nachteile ist, gibt es zuverlässige Methoden für Entwurfsmuster, mit denen stabile Anwendungen ohne Server erstellt oder serverlose Elemente in vorhandene Architekturen integriert werden können.

Source: https://habr.com/ru/post/undefined/


All Articles