Serverlos in der Cloud: AWS vs. Google Cloud vs. Microsoft Azure

Wenn Sie jemals um 3 Uhr morgens geweckt wurden, weil ein Server durcheinander geraten ist, werden Sie die Anziehungskraft eines Schlagworts wie „serverlos“ verstehen. Die Konfiguration der Maschinen kann Stunden, Tage oder manchmal sogar Wochen dauern. Anschließend müssen sie ständig aktualisiert werden, um Fehler und Sicherheitslücken zu beheben. Diese Updates bringen normalerweise eigene Probleme mit sich, da die neuen Updates Inkompatibilitäten verursachen, die andere Updates erzwingen, oder so scheint es ad infinitum.

Die endlose Kette von Kopfschmerzen beim Ausführen eines Servers ist einer der Gründe, warum große Cloud-Unternehmen die „serverlose“ Architektur angenommen haben. Sie wissen, dass der Chef die Ausreden - der Server dies, der Server das - viel zu lange gehört hat. Wenn wir nur diese Server loswerden könnten, müsste der Chef nachdenken.

Es ist eine wunderbare Verkaufsbedingung mit dem einzigen Problem, dass es nicht unbedingt wahr ist. Diese Apps sind serverlos, genauso wie Restaurants ohne Küche. Wenn das, was Sie wollen, auf der Speisekarte steht und Ihnen gefällt, wie der Koch es zubereitet, ist es großartig, sich in ein Restaurant zu setzen. Aber wenn Sie ein anderes Gericht wollen, wenn Sie andere Gewürze wollen, dann holen Sie sich besser Ihre eigene Küche.

Amazon, Google und Microsoft sind drei der größeren Unternehmen, die um das Hosten von Anwendungen der Zukunft kämpfen. Sie hoffen, dass diese in ihre serverlose API geschrieben und über ihre Automatisierungsebene verwaltet werden. Wenn die Plattformen das tun, was Sie wollen - und die neuen Modelle sind ziemlich allgemein -, können sie der einfachste und schnellste Weg sein, um Ihre eigene milliardenschwere Einhorn-Web-App zu erstellen. Sie schreiben nur die entscheidenden Teile der Logik und die Plattform übernimmt alle Details.

Serverlose Funktionen werden zur Klebe- oder Skriptsprache, die alle Cloud-Funktionen miteinander verbindet. Die Mapping- oder AI-Tools, die früher ziemlich unabhängig waren, sind jetzt über die ereignisgesteuerten Funktionen ohne Server verbunden. Jetzt kann ein größerer Teil Ihrer Arbeit durch Anforderungen gelöst werden, die sich durch die verschiedenen Ecken jeder Wolke bewegen und durch einen Ereignisfluss ausgelöst und ausgelöst werden. Wenn Sie das maschinelle Lernen erkunden und es zur Analyse Ihrer Daten verwenden möchten, können Sie am schnellsten eine serverlose App erstellen und Ereignisse an die Ecke für maschinelles Lernen in der Cloud senden.

Das implizite Versprechen ist, dass das Schneiden von alles, was dünner ist, das Teilen von Ressourcen in der Cloud erleichtert. In der Vergangenheit hat jeder fieberhaft neue Instanzen erstellt, beispielsweise mit Ubuntu Server, der in einer eigenen virtuellen Maschine ausgeführt wird. Alle verwendeten dasselbe Betriebssystem und es wurde zig Mal auf derselben realen Box dupliziert, die vorgab, ein Dutzend oder mehr virtuelle Ubuntu-Boxen zu sein. Serverlose Vorgänge vermeiden all diese Doppelarbeit und machen Cloud Computing erheblich billiger, insbesondere bei Jobs, die sporadisch ausgeführt werden und die alte Box in Ihrem klimatisierten Serverraum nie wirklich blockiert haben.

Natürlich hat all diese Bequemlichkeit versteckte Kosten. Wenn Sie Ihren Code jemals verlassen oder auf eine andere Site verschieben möchten, müssen Sie wahrscheinlich den größten Teil des Stapels neu schreiben. Die APIs sind unterschiedlich, und obwohl einige gängige Sprachen wie JavaScript standardisiert sind, sind sie nahezu proprietär. Es gibt viele Möglichkeiten zum Einschließen.

Um die Attraktivität serverloser Optionen zu verstehen, habe ich einige Zeit damit verbracht, einige Funktionen aufzubauen und in den Stapeln herumzustöbern. Ich habe nicht viel Code geschrieben, aber das war der Punkt. Ich habe mehr Zeit damit verbracht, auf Schaltflächen zu klicken und in Webformulare zu tippen, um alles zu konfigurieren. Erinnerst du dich, als wir alles mit XML und dann mit JSON konfiguriert haben? Jetzt füllen wir ein Webformular aus und die Cloud erledigt es für uns. Sie müssen jedoch immer noch wie ein Programmierer denken, um zu verstehen, was hinter den Kulissen und außerhalb Ihrer Kontrolle vor sich geht.

AWS Lambda

AWS Lambda entwickelt sich zur Shell-Skriptebene für die gesamte Cloud von Amazon. Es ist ein Basissystem, mit dem Sie Funktionen einbetten können, die auf Ereignisse reagieren, die von fast jedem Teil der riesigen Amazon-Cloud-Infrastruktur generiert werden können. Wenn eine neue Datei in S3 hochgeladen wird, kann sie eine Funktion auslösen, die etwas Interessantes damit macht. Wenn ein Video vom Amazon Elastic Transcoder transkodiert wird, wartet möglicherweise eine Lambda-Funktion darauf, ausgelöst zu werden, wenn sie beendet ist. Diese Funktionen können wiederum andere Lambda-Vorgänge auslösen oder einfach jemandem ein Update senden.

Sie können Lambda-Funktionen in JavaScript (Node.js), Python, Java, C # und Go schreiben. Da diese Sprachen viele andere Sprachen einbetten können, ist es durchaus möglich, anderen Code wie Haskell, Lisp oder sogar C ++ auszuführen. (Lesen Sie diese Geschichte zum Kompilieren von C ++ in einer Bibliothek zur Verwendung mit AWS Lambda.)

Das Schreiben von Lambda-Funktionen ist oft viel komplexer als erwartet, da Amazon so viele Optionen für die Konfiguration und Optimierung bietet. Obwohl es technisch gesehen stimmt, dass Sie nur ein paar Zeilen Code schreiben und großartige Dinge erreichen können, hatte ich das Gefühl, dass ich dann mehr Zeit für die Konfiguration der Codeausführung aufwenden musste. Vieles davon wird erreicht, indem Formulare im Browser ausgefüllt werden, anstatt in Textdateien zu tippen. Manchmal scheint es, als hätten wir gerade einen Texteditor gegen ein Browserformular getauscht, aber das ist der Preis dafür, die Flexibilität zu behalten, die Amazon dem Lambda-Benutzer bietet.

Einige der zusätzlichen Schritte sind darauf zurückzuführen, dass Amazon dem Benutzer mehr Optionen zur Verfügung stellt und mehr vom erstmaligen Funktionsschreiber erwartet. Sobald ich mit dem Schreiben einer Funktion bei Google oder Microsoft fertig war, konnte ich meinen Browser auf die richtige URL verweisen und sie sofort testen. Amazon ließ mich klicken, um das API-Gateway zu konfigurieren und das richtige Loch in der Firewall zu öffnen.

Am Ende fügt all dieses Klicken eine Ebene der Handhaltung hinzu, die den Job ein wenig einfacher macht als das Beginnen mit einer Textdatei. Beim Erstellen einer Funktion wurde im Browser die Warnung "Diese Funktion enthält externe Bibliotheken" angezeigt. In den Tagen des reinen Knotens war das etwas, von dem ich nur erwartet hatte, dass ich es weiß, oder ich würde es lernen, indem ich die Fehlermeldung google, während ich die Daumen drücke und hoffe, dass die Antwort da draußen ist. Jetzt stürzt die Wolke herein, um zu helfen.

Amazon bietet eine Reihe anderer Optionen, die ungefähr so ​​"serverlos" sind wie AWS Lambda, wenn serverlos bedeutet, Sie von der Serververwaltung zu entlasten. Es verfügt über elastische Tools wie Amazon EC2 Auto Scaling und AWS Fargate, die Server hoch- und herunterfahren, und AWS Elastic Beanstalk, das Ihren hochgeladenen Code auf Webservern bereitstellt und den Lastausgleich und die Skalierung übernimmt. Bei vielen dieser Automatisierungstools sind Sie natürlich weiterhin für die Erstellung des Server-Images verantwortlich.

Eines der nützlicheren Angebote sind AWS Step Functions, eine Art Code-weniger-Flussdiagramm-Tool zum Erstellen von Zustandsautomaten, um das zu modellieren, was Softwarearchitekten als Workflow bezeichnen. Ein Teil des Problems ist, dass alle Funktionen ohne Server völlig frei von Status sein sollen. Dies funktioniert, wenn Sie eine ziemlich grundlegende Geschäftslogik durchsetzen, aber das kann ein Albtraum sein, wenn Sie einen Client durch einen führen Checkliste oder ein Flussdiagramm. Sie gehen ständig in die Datenbank, um die Informationen über den Client neu zu laden. Schrittfunktionen kleben Lambda-Funktionen mit Zustand zusammen.

Google Cloud-Funktionen und Firebase

Wenn Sie sich die Mühe machen möchten, Server zu konfigurieren, bietet Google Cloud eine Reihe von Diensten, die verschiedene Freiheiten bieten, z. B. die Notwendigkeit eines Root-Passworts oder die Verwendung einer Befehlszeile.

Seit der Google App Engine im Jahr 2008 hat Google langsam verschiedene "serverlose" Optionen mit verschiedenen Kombinationen aus Messaging und Datentransparenz hinzugefügt. Ein Google Cloud Pub / Sub verbirgt die Messaging-Warteschlange vor Ihnen. Sie müssen also nur den Code für den Datenproduzenten und -konsumenten schreiben. Google Cloud Functions bietet ereignisgesteuerte Berechnungen für viele der wichtigsten Produkte, einschließlich einiger der Laufschrift-Tools und APIs. Und dann gibt es noch Google Firebase, eine Datenbank über Steroide, mit der Sie JavaScript-Code in eine Datenspeicherschicht mischen können, die die Daten an Ihren Client liefert.

Von diesen ist Firebase für mich am faszinierendsten. Einige schlagen vor, dass Datenbanken die ursprüngliche serverlose App waren, die die Datenstrukturen und die Aufgaben des Festplattenspeichers abstrahierte, um alle Informationen über einen TCP / IP-Port zu liefern. Firebase bringt diese Abstraktion auf das Äußerste, indem es auch JavaScript-Code und Messaging hinzufügt, um fast alles zu tun, was Sie mit der serverseitigen Infrastruktur einschließlich der Authentifizierung tun möchten. Technisch gesehen ist es nur eine Datenbank, aber sie kann einen Großteil der Geschäftslogik und des Messaging für Ihren Stack verarbeiten. Mit ein bisschen Client-HTML, CSS, JavaScript und Firebase können Sie wirklich davonkommen.

Sie könnten versucht sein, die JavaScript-Ebenen von Firebase als "gespeicherte Prozeduren" zu bezeichnen, genau wie Oracle, aber das würde das Gesamtbild verfehlen. Der Firebase-Code ist in JavaScript geschrieben, sodass er in einer lokalen Version von Node.js ausgeführt wird. Sie können einen Großteil der Geschäftslogik in diese Ebene einbetten, da die Welt von Node bereits mit Bibliotheken zur Handhabung dieses Workflows gefüllt ist. Außerdem genießen Sie die Freuden des isomorphen Codes, der auf dem Client, dem Server und jetzt der Datenbank ausgeführt wird.

Der Teil, der mir aufgefallen ist, war die in Firebase integrierte Synchronisationsebene. Es werden Kopien von Objekten aus der Datenbank im gesamten Netzwerk synchronisiert. Der Trick besteht darin, dass Sie Ihre Client-App als einen weiteren Datenbankknoten einrichten können, der alle Änderungen für die relevanten Daten (und nur die relevanten Daten) abonniert. Wenn sich die Daten an einem Ort ändern, ändern sie sich überall. Sie können alle Probleme beim Messaging vermeiden und sich darauf konzentrieren, die Informationen nur in Firebase zu schreiben, da Firebase sie dort repliziert, wo sie benötigt werden.

Sie müssen sich nicht nur auf Firebase konzentrieren. Die grundlegenderen Google Cloud-Funktionen sind ein einfacherer Ansatz zum Einbetten von benutzerdefiniertem Code in die Google Cloud. Derzeit sind Cloud-Funktionen größtenteils nur eine Option zum Schreiben von Node.js-Code, der in einer vorkonfigurierten Node-Umgebung ausgeführt wird. Während der Rest der Google Cloud Platform eine Vielzahl von Sprachen unterstützt - von Java und C # bis Go, Python und PHP - sind Cloud-Funktionen streng auf JavaScript und Node beschränkt. Es gab Hinweise darauf, dass andere Sprachoptionen kommen, und ich wäre nicht überrascht, wenn sie bald erscheinen würden.

Die Google Cloud-Funktionen greifen zumindest zu diesem Zeitpunkt nicht so tief in die Google Cloud ein wie AWS Lambda in AWS. Als ich mich umgesehen habe, um eine Funktion für die Interaktion mit Google Text & Tabellen zu erstellen, musste ich wahrscheinlich die REST-API verwenden und den Code in ein sogenanntes Apps-Skript schreiben. Mit anderen Worten, die Google Text & Tabellen-Welt verfügt über eine eigene REST-API, die lange vor der Einführung des Schlagworts ohne Server war.

Es ist erwähnenswert, dass Google App Engine weiterhin stark ist. Am Anfang wurde nur angeboten, Python-Anwendungen zu starten, um die Anforderungen aller Besucher der Website zu erfüllen. Im Laufe der Jahre wurde es jedoch erweitert, um viele verschiedene Sprachlaufzeiten zu bewältigen. Sobald Sie Ihren Code in einer ausführbaren Datei gebündelt haben, übernimmt die App Engine den Start von genügend Knoten, um Ihren Datenverkehr zu verarbeiten, und vergrößert oder verkleinert sich, wenn Ihre Benutzer Anforderungen senden.

Es gibt weiterhin einige Hürden zu beachten. Wie bei Cloud-Funktionen muss Ihr Code relativ zustandslos geschrieben sein und jede Anforderung muss in einer begrenzten Zeit abgeschlossen sein. Aber App Engine wirft nicht das ganze Gerüst weg oder vergisst alles zwischen den Anfragen. App Engine war ein großer Teil der Revolution ohne Server und ist nach wie vor für diejenigen am zugänglichsten, die einen Schritt zurück in die alte Methode des Aufbaus eines eigenen Stacks in Python, PHP, Java, C # oder Go gehen.

Microsoft Azure-Funktionen

Microsoft arbeitet natürlich genauso hart wie die anderen, um sicherzustellen, dass die Benutzer all diese cleveren, serverlosen Aufgaben auch mit der Azure-Cloud ausführen können. Das Unternehmen hat seine eigenen Grundfunktionen für das Jonglieren von Ereignissen erstellt - die Azure-Funktionen - und einige ausgefeilte Tools entwickelt, auf die Semi-Programmierer noch besser zugreifen können.

Der größte Vorteil von Microsoft ist möglicherweise die Sammlung von Office-Anwendungen, den früheren ausführbaren Desktop-Dateien, die langsam aber sicher in die Cloud migrieren. In der Tat hat eine Bilanzierung der Cloud-Einnahmen Microsoft vor Amazon gestellt, teilweise indem ein Teil seiner Office-Einnahmen in die kurzlebige Rubrik „Cloud“ zusammengefasst wurde.

Eines der besten Beispiele aus der Dokumentation zu Azure-Funktionen zeigt, wie eine Cloud-Funktion ausgelöst werden kann, wenn jemand eine Tabelle in OneDrive speichert. Plötzlich werden die kleinen Elfen in der Wolke lebendig und machen Dinge mit der Tabelle. Dies ist ein Glücksfall für IT-Shops, die Teams unterstützen, die ihre Excel-Tabellen (oder andere Office-Dokumente) lieben. Sie können Azure-Funktionen schreiben, um praktisch alles zu tun. Wir denken oft, dass HTML und das Web die einzige Schnittstelle zur Cloud sind, aber es gibt keinen Grund, warum dies nicht über Dokumentformate wie Microsoft Word oder Excel möglich ist.