Die serverlosen Funktionen von AWS Lambda eignen sich hervorragend für ereignisgesteuerte Datenverarbeitung und maschinelles Lernen, zur Verbindung von Cloud-Diensten und externen APIs und sogar zum Triggern von Builds in einer CI/CD-Pipeline. [...]
Es gibt viele Möglichkeiten für den Einsatz von Cloud-nativen Anwendungen und Diensten. Organisationen, die eine große Anzahl von Anwendungen und Diensten auf verschiedenen Plattformen und mit unterschiedlichen Konformitätsanforderungen entwickeln, werden wahrscheinlich Container und CaaS (Container as a Service) in Betracht ziehen. Andere Organisationen mit wenigen Entwicklungsschritten und betrieblichen Einschränkungen auf der Suche nach einem einfacheren Weg zur Produktion wählen oft PaaS-Optionen, da sie weniger Konfiguration und technisches Fachwissen erfordern.
Dann gibt es FaaS, oder Functions as a Service, die die zugrundeliegende Infrastruktureinrichtung und -konfiguration abstrahieren und einfache Mechanismen zur Bereitstellung und Ausführung von Code bieten. Diese Funktionen eignen sich ideal für die Ausführung von Code als Reaktion auf Ereignisse, und sie können als Infrastruktur für leichtgewichtige Mikrodienste verwendet werden.
In einem früheren Artikel über PaaS, CaaS und FaaS habe ich Richtlinien von Architekten und Cloud-Experten zu manchen Überlegungen bei der Auswahl einer Cloud-Architektur vorgestellt. In diesem Artikel stelle ich spezifischere Anforderungen für die Verwendung von serverlosen Funktionen vor und gebe mehrere Anwendungsbeispiele.
Während ich mich hier auf AWS Lambda konzentriere, gelten die gleichen allgemeinen Prinzipien für die Verwendung von Microsoft Azure-Funktionen, Google Cloud-Funktionen, IBM Cloud-Funktionen, Oracle-Funktionen und anderen FaaS-Plattformen.
Technische Anforderungen für AWS Lambda-Funktionen
AWS Lambda ist eine Option für den Einsatz von serverlosen Funktionen in öffentlichen Clouds. Es ist wichtig, vor der Implementierung dieser Dienste die wichtigsten technischen Anforderungen zu berücksichtigen.
AWS Lambda-Funktionen können in Java, Go, PowerShell, Node.js, C#, Python und Ruby entwickelt werden. AWS verfügt über eine Liste von Ereignissen, die eine Lambda-Funktion auslösen können, wobei die einfachsten als API-Aufrufe über das Amazon ccAPI Gateway angestoßen werden können. Ereignisse können außerdem durch Code-Commits, CI/CD-Pipelines, Kinesis-Datenströme, Cloud-System-Monitore und IoT-Ereignisse aktiviert werden. Sie können die Ausführung von Funktionen auch mithilfe von CloudWatch-Ereignissen planen. Funktionen arbeiten synchron oder asynchron, je nach Art des Triggers.
Die Ausführung von AWS-Lambda-Funktionen kann bis zu fünfzehn Minuten pro Ausführung dauern. Sie können so konfiguriert werden, dass sie über 3 GB Speicher verfügen und auf bis zu 500 MB auf einer nicht persistenten Festplatte zugreifen können. Lambda-Funktionen müssen zustandslos sein, und eingehende TCP/IP-Verbindungen sind begrenzt, aber sie können Umgebungsvariablen verwenden und Threads oder Prozesse erstellen. Dieses AWS Lambda-FAQ enthält viele weitere Details zu den technischen Möglichkeiten und Einschränkungen.
Entwickler können sowohl einzelne Funktionen als auch serverlose Anwendungen mit dem AWS Serverless Application Model konfigurieren. Diese Option ermöglicht es Entwicklern, eine Gruppe von Diensten, die gemeinsam als Anwendungen arbeiten, bequem zu bündeln, bereitzustellen und zu verwalten.
Serverlose Funktionen und serverlose Anwendungen reduzieren Kosten
Ich habe mit Hitesh Chitalia, einem erfahrenen Architekten für Cloud-Lösungen, darüber gesprochen, wie er AWS Lambda zur schnellen Entwicklung und einfachen Unterstützung von Mikrodiensten und Anwendungen einsetzt.
„Ich verwende Lambda gerne, weil es den Fokus auf die Infrastruktur reduziert, wenn Mikrodienste oder einfache betriebliche Wartungsaufgaben unterstützt werden“, antwortete Chitalia. „Es ist jetzt so weit gereift, dass ich Batch-Jobs durch Step-Funktionen orchestrieren, ETLs ausführen und voll funktionsfähige Web-Anwendungen ausführen kann.“
Chitalia ist es gelungen, die Kosten zu senken, indem er Anwendungen von dedizierten Amazon EC2-Servern auf serverlose Funktionen und Anwendungen migrierte. Die Kosteneinsparungen können erheblich sein, insbesondere bei Anwendungen und Diensten mit episodischen Nutzungsmustern.
Chitalia nannte ein konkretes Beispiel:
Auch die Kostenstruktur von FaaS macht es zu einer attraktiven Option. Sein Pay-per-Use-Ansatz in Verbindung mit der Reduzierung des Infrastruktur-Overheads ermöglicht es Unternehmen, die Kosten auf der Grundlage der Produktnutzung genau zu verfolgen. Ein grundlegendes Beispiel ist eine API bei einem vorherigen Unternehmen, das von zwei kleinen EC2-Instanzen zu Lambda migriert wurde und eine Kostenreduzierung von 90 % verzeichnen konnte. Wenn die Nutzung zunahm, skaliert Lambda automatisch, um die erhöhte Nutzung zu unterstützen. Ein Anstieg der Aufrufe um etwa das 6-fache führte zu einer Verdoppelung der Kosten für den Lambda-Service.
Chitalia teilte außerdem einige der Entwicklungsüberlegungen. „Da FaaS kleinere, kürzer laufende Funktionen erfordert, um effektiv zu sein, muss der Code neu geschrieben werden, um die Vorteile auszunutzen“, meinte er. „Es gibt auch das Problem des Kaltstarts, bei dem der erste Aufruf einer Funktion, die eine Weile untätig war, Sekunden dauern kann, bis sie reagiert.“
Beispiele für serverlose Funktionen und serverlose Anwendungen
Um besser zu verstehen, wie Entwickler serverlose Funktionen und Anwendungen verwenden, habe ich das Amazon Serverless Application Directory und andere Quellen durchgesehen, um einige häufige Anwendungsfälle zu identifizieren. Diese können als Codierungsbeispiele dienen und auch Bereiche veranschaulichen, in denen es einige unkomplizierte erste Projekte gibt.
- „How to“-Funktionen veranschaulichen oft, wie man zwei oder mehr verschiedene Amazon- oder andere externe Webdienste miteinander verbindet. Python und Node.js sind die beiden beliebtesten Entwicklungssprachen, die in diesen Beispielen verwendet werden. Mehrere Beispieldienste verbinden S3, DynamoDB, API-Gateway, SNS und CloudFront.
- Alexa Skill Cartridges und andere Beispiele, die eine Verbindung zu den Alexa-APIs herstellen, sind die am häufigsten heruntergeladenen Dienste im Verzeichnis.
- Systemadministratoren verwenden serverlose Funktionen, um Protokolldateien zu verarbeiten, Dateien in S3-Buckets zu komprimieren, Webdienste zu überwachen und Webserver-Umleitungen zu handhaben.
- Die Manipulation von Bildern und anderen Mediendateien ist ein häufiger Bedarf in Webanwendungen. Mehrere Beispiele verwenden ImageMagick und andere Bild- und Mediendienstprogramme, um Dateitypen zu konvertieren, die Größe von Bildern zu ändern, Galerien zu erstellen und Bilddateien zu komprimieren.
- Es gibt mehrere Beispiele für die Verbindung mit SaaS-Anwendungen, Anbieter-APIs und anderen Diensten wie Slack, Elasticsearch, Sumo Logic und Selenium.
- Auch Datenverarbeitungs- und maschinelle Lerndienste sind in dem Verzeichnis weit verbreitet. Es gibt Beispiele für die Anbindung von Amazon Kinesis an Eingabe- und Ausgabedatenströme und mehrere Beispiele für die Verwendung von Amazon Lex für die Verarbeitung von Sprache und natürlicher Sprache. Datenwissenschaftler finden im Verzeichnis auch Dienste für TensorFlow und Scikit-learn.
- Zu den DevOps-Beispielen gehören Integrationen mit CI/CD-Pipelines, um Builds auszulösen oder Ereignisinformationen zu erfassen und sie an andere Tools weiterzuleiten.
Microsoft verfügt derzeit nicht über ein Verzeichnis von serverlosen Funktionen und Anwendungen, aber es gibt viele gute Beispiele, die an anderer Stelle geprüft werden sollten. Sie können sich eine vollständige serverlose Billing-Anwendung ansehen, einen Leitfaden für den Einstieg in die JavaScript-Funktionen einsehen oder sich diese Python-Beispiele, Leitfäden und Schnellstarts durchlesen.
Das Versprechen des Serverless Computing
Es gibt eine Denkrichtung, nach der Serverless Computing aufgrund technischer Beschränkungen oder einer Mischung aus Compliance- und Sicherheitseinschränkungen einen Nischenanwendungsfall darstellt. Serverlose Funktionen werden in Containern gehostet, in denen Sie die Einrichtung, Konfiguration, Verwaltung und Kontrolle der Infrastruktur an den Cloud-Anbieter abgeben. Für regulierte Unternehmen sind serverlose Funktionen, die in öffentlichen Wolken ausgeführt werden, möglicherweise keine Option.
Andere Organisationen, die bereits umfangreiche Anwendungen und Dienste unter Verwendung von Containern oder mit PaaS einrichten müssen, könnten die Vorteile eines separaten Hosting-Dienstes für Funktionen diskutieren. Für diese Gruppen könnte es genauso einfach sein, eine Infrastruktur zu nutzen wie Code und Funktionen direkt auf einer optimal ausgewählten Infrastruktur bereitzustellen.
Es gibt jedoch noch eine andere Richtung, die serverlose Funktionen in den Mainstream der Unternehmenssoftwareentwicklung stellt. Erstens sollten Entwickler von der Einfachheit der Bereitstellung von Funktionen ohne die Schritte zur Planung und Implementierung der Infrastruktur begeistert sein. Zumindest können serverlose Funktionen während der Entwicklungsphasen verwendet und nur bei Bedarf auf PaaS oder Container-Optionen portiert werden.
Zweitens sollten Entwickler von dem Potenzial serverloser Funktionen begeistert sein, die die Auswahl von Softwarebibliotheken und die Wiederverwendung von Code erheblich vereinfachen. Entwickler suchen oft in GitHub und anderen offenen Repositories nach Code-Bibliotheken, Entwicklungs-Kits und anderen Code-Beispielen, die in ihren Anwendungen genutzt werden können. Sobald eine Komponente gefunden, auf ihre Fähigkeiten getestet, auf Leistungserwägungen hin überprüft und auf Sicherheitsprobleme hin validiert ist, bleibt dem Entwickler die Aufgabe, den Code in seine Anwendung zu integrieren.
Die Integration kann auf verschiedene Weise erfolgen, je nach Codierungsplattform, Anwendungsarchitektur, Philosophie zur Optimierung von Builds und Einsatzüberlegungen.
Wenn diese Code-Bibliotheken jedoch als serverlose Funktionen eingesetzt werden können, muss der Entwickler sehr viel weniger Arbeit leisten, um seine Fähigkeiten zu nutzen. Diese Option ermöglicht es Systemingenieuren auch, die Größe und Skalierung der Dienste auf der Grundlage ihrer Verbrauchs- und Verarbeitungsanforderungen zu bestimmen. Dies ist ein Teil des Versprechens von Mikrodiensten.
Es ist interessant, an eine Zukunft zu glauben, die auf serverlosen Funktionen basiert. Anstatt in GitHub nach Codebeispielen zu suchen, werden Entwickler Verzeichnisse mit serverlosen Funktionen durchsuchen. Organisationen mit vielen Entwicklungsteams können außerdem interne Verzeichnisse mit wiederverwendbaren serverlosen Funktionen und anderen Mikrodiensten erstellen.
Da Cloud-Anbieter weiterhin die Infrastruktur und die Bereitstellungsoptionen vereinfachen, ist zu erwarten, dass serverlose Compute-Angebote den Entwicklern neue Möglichkeiten eröffnen, Funktionen neu zu verwenden, Funktionen schneller bereitzustellen und Cloud-Operationen zur Kostenoptimierung zu ermöglichen.
*Isaac Sacolick ist der Autor von Driving Digital: The Leader’s Guide to Business Transformation through Technology (Leitfaden für Unternehmensumwandlung durch Technologie), der viele Praktiken wie Agile, Devops und Datenwissenschaft behandelt, die für erfolgreiche digitale Umwandlungsprogramme entscheidend sind. Sacolick ist ein anerkannter Top-Social-CIO, ein langjähriger Blogger bei Social, Agile and Transformation und CIO.com und Präsident von StarCIO.
Be the first to comment