Serverless Computing ist ein Cloud-basiertes Ausführungsmodell, bei dem Anwendungen als Dienst gehostet werden können, ohne dass ein Server gewartet werden muss.

Der Dienstanbieter verwaltet die Ressourcenzuweisung auf dem Server, und dem Benutzer wird auf der Grundlage der tatsächlichen Nutzung Rechnung gestellt. Der Schwerpunkt verlagert sich auf die Kernanwendung, die man gerade erstellt, und die Infrastruktur wird ausschließlich vom Dienstanbieter verwaltet. Serverloses Computing wird auch als Function as a Service (FaaS) bezeichnet.

Mit anderen Worten: Serverless PHP ist die Implementierung von serverlosem Computing mit einem PHP-Backend, um ein Beispiel zu nennen.

In diesem Leitfaden werden wir einen genauen Blick auf die Bedeutung von Serverless PHP, seine Hauptmerkmale und seine Vor- und Nachteile werfen, um dir ein besseres Verständnis dieses Ansatzes für Cloud Computing zu vermitteln.

Insbesondere betrachten wir das Konzept des serverlosen Computings, seine Anwendungsfälle und seinen Umfang, die Vor- und Nachteile, eine einfache Implementierung von Serverless PHP mit Bref und den Status von Serverless PHP auf den Big Three (Amazon, Microsoft und Google).

Bereit? Fangen wir an!

Traditionell benötigte man die Hardware für einen Server, um eine Anwendung im Internet einzurichten. Die Servermaschine(n) war(en) physisch mit dem Internet verbunden, damit jemand auf die Anwendung zugreifen konnte. Die Wartung des Servers war eine teure Angelegenheit.

Als nächstes erlaubte die Entwicklung der Hosting-Dienste Webmastern, Hosting-Speicherplatz zu kaufen – jeder Server konnte mehrere Anwendungen aufnehmen. Dies senkte die Kosten.

Mit dem Aufkommen des Cloud-Computing wurden die Kosten durch Größenvorteile weiter gesenkt, da man eine winzige Menge Platz auf einer großen, entfernten Serverfarm mieten konnte. Tatsächlich erlaubt dir das serverlose Computing, nur für die Dienste zu bezahlen, die du nutzt. Wenn sie nicht in Gebrauch sind, brauchst du praktisch keinen Platz oder keine Ressourcen in der Cloud.

Serverloses Computing vereinfacht den Softwareentwicklungsprozess: Es ermöglicht einer Organisation, die sich ausschließlich auf die Entwicklung konzentriert, ohne sich um die Bereitstellung, die Server-Wartung und die Skalierung zu kümmern.

Serverless PHP: Die Grundlagen

Trends für den Begriff
Trends für den Begriff „serverless“ bei Google

Um eine serverlose PHP-Anwendung zu implementieren, muss zunächst das Konzept des Serverless Computing untersucht werden. Während der Begriff Serverless in diesem Artikel über die Zukunft der Softwareentwicklung ab 2012 zum ersten Mal auf ReadWrite erschien, gewann er mit der Einführung von AWS Lambda im Jahr 2014 an Popularität.

In diesem Abschnitt wollen wir uns auf einige Schlüsselkonzepte im Zusammenhang mit serverlosem Computing konzentrieren und versuchen, eine häufige Frage zu beantworten, die diese Technologie umgibt: Ist es wirklich Server-„less“?

Merkmale von Serverless PHP

Die Bereitstellung ist eine einfache Aufgabe, ohne den Server zu verwalten. Man lädt einfach seinen Code auf den Server hoch, und der Rest wird vom Anbieter erledigt. Die serverlose Technologie ermöglicht es dir, sprachunabhängige Funktionen zu haben, die miteinander interagieren.

Wenn du zum Beispiel eine Messaging-Anwendung hast, kann das Login-Modul in einer Sprache programmiert werden, und die Funktion, die deinen Status aktualisiert, kann in einer anderen Sprache programmiert werden.

Dies ist zwar auch ohne serverloses Hosting möglich, aber die Interaktion ist definitiv schwieriger. Wann immer eine Aktion deine Funktion auslöst, entsteht eine Instanz, die diese Funktion bearbeitet.

Dieser Prozess des Spawnens einer Instanz kann „warm“ sein, wenn man eine bestehende Instanz benutzt, oder „kalt“, wenn man eine neue Instanz startet. Es gibt eine leichte Verzögerung bei diesem Prozess, insbesondere bei einem Kaltstart, im Vergleich zu traditionellem Hosting, bei dem sich dein Server immer im Standby-Modus befindet, um Anfragen zu bearbeiten.

Die Situation zwischen serverlosem und traditionellem Hosting wird jedoch genau das Gegenteil, wenn du eine große Anzahl von Anfragen zu bearbeiten hast. Die Skalierbarkeit ist bei der serverlosen Technologie von Natur aus gegeben. Wenn du eine plötzliche Anforderung von tausend gleichzeitigen Anfragen hast, wird der Anbieter diese ohne zusätzlichen Aufwand oder Konfiguration deinerseits erledigen.

Ist Serverless PHP wirklich Serverless?

Lasst euch nicht von dem Begriff „serverless“ verwirren. Er bedeutet nicht, dass der „Server“ nicht existiert. Wenn man eine serverlose Anwendung benutzt, gibt es im Hintergrund einen Server, der die Eingaben verarbeitet und die notwendigen Ausgaben berechnet.

Das „-less“ ist in dem Begriff aus der Sicht des Entwicklers vorhanden, der niemals verschiedenen Elementen des Servers ausgesetzt ist. Wenn man daher eine Serverless-PHP-Anwendung einsetzt, gibt es einen tatsächlichen Server, der in der Cloud läuft und Anfragen bedient.

BaaS vs. Serverless Architekturen

Obwohl „Serverless Computing“ nicht eng definiert ist, kann es sich auch auf BaaS-Anwendungen (Backend as a Service) beziehen. BaaS bezieht sich auch auf ein Cloud-Computing-Modell, bei dem der Serverbetrieb an eine dritte Partei ausgelagert wird und ein Entwickler sich nur auf die Erstellung und Wartung der Software konzentrieren muss.

Die primäre Ähnlichkeit zwischen BaaS und Serverless besteht darin, dass sich der Entwickler nicht auf die Serververwaltung konzentriert. Viele Organisationen bieten BaaS- und FaaS-Pakete unter demselben Dach an.

Hier sind die Hauptunterschiede zwischen BaaS und Serverless Computing:

  • Komponenten: BaaS-Anwendungen sind ihren traditionellen Gegenstücken ähnlich, ein Entwickler darf keine Änderungen an ihrer Struktur vornehmen, um sich an BaaS anzupassen. Beim serverlosen Betrieb ist die Anwendung in logische Teile, die Funktionen genannt werden, unterteilt, und jede dieser Funktionen reagiert auf ein Ereignis und führt eine bestimmte Aufgabe aus.
  • Skalierbarkeit: Die Skalierbarkeit ist eine entscheidende Komponente in einer serverlosen Anwendung – mit zunehmendem Datenverkehr werden mehr Ressourcen zugewiesen. Sie ist kein notwendiges Modul für BaaS-Anwendungen, obwohl einige Service Provider sie als Add-On anbieten.
  • Trigger: Eine serverlose Anwendung ist ereignisgesteuert, was bedeutet, dass eine bestimmte Aktivität die Anwendung jedes Mal auslöst, wenn sie auftritt. Auf der anderen Seite kann eine BaaS-Anwendung im Hintergrund laufen und Ressourcen kontinuierlich nutzen, genau wie eine herkömmliche Anwendung.
  • Modulare Architektur: In der serverlosen Architektur ist es möglich, dass verschiedene Funktionen einer Anwendung auf verschiedenen Servern residieren und ausgeführt werden, aber aufgrund ihrer Integration nahtlos laufen. Eine BaaS-Anwendung kann dieser Struktur folgen oder auch nicht.

Serverless PHP: Anwendungsfälle

Wir haben verschiedene Aspekte des serverlosen Computings diskutiert und wie es sich von BaaS unterscheidet. Während wir die Grundlagen des serverlosen Computings behandelt haben, wollen wir Situationen untersuchen, in denen man eine solche Architektur einsetzen kann.

Du hast vielleicht erkannt, dass es vielleicht keine gute Idee ist, komplexe Anwendungen auf serverlosen Technologien zu hosten. Aber selbst wenn du dich nicht dafür entscheidest, eine komplette Anwendung durch Serverless PHP zu implementieren, kannst du Module einsetzen.

In diesem Abschnitt werden wir zwei Beispiele für die Implementierung eines serverlosen Stacks diskutieren: Datenbanken und Dateiablage.

Eine serverlose Datenbank ist eine On-Demand-Datenbank, mit der man Abfragen ausführen kann, wann immer man sie benötigt. Die Skalierung ist aufgrund des serverlosen Stacks einfach, und der Anbieter stellt dir nur die Zeit in Rechnung, die du die Ressource nutzt.

Amazon Aurora und Google Cloud Datastore sind Beispiele für serverlose Datenbanken, die heute auf dem Markt erhältlich sind. Ein serverloses Dateispeichersystem ist als Objektspeicher implementiert. Dateien werden nicht als Hierarchie in einem Dateisystem behandelt, sondern als Objekte, die die Daten der Datei selbst und ihre Metadaten enthalten. Speicherung und Abruf erfolgen über eine REST-ähnliche API.

IBM Cloud stellt dir einen Objektspeicherdienst zur Verfügung. Andere häufige Anwendungsfälle für serverlose Anwendungen sind APIs und mobile Backends, deren Designs auf kleinen, logischen, voneinander abhängigen Funktionen basieren.

Serverless PHP: Vorteile

In diesem Abschnitt befassen wir uns mit den Hauptvorteilen des serverlosen Computings und warum es in den letzten Jahren an Bedeutung gewinnt.

Reduzierte Server-Kosten

Theoretisch führt serverloses Computing zu geringeren Kosten im Vergleich zum traditionellen Hosting. Der inhärente Grund ist einfach: Man nutzt den Dienst für eine bestimmte Zeitspanne und es fallen keine Wartungskosten während der Leerlaufzeiten an. Wenn du jedoch im Laufe der Zeit mit konstantem Datenverkehr konfrontiert bist, kann die Einführung einer serverlosen Architektur nicht zu großen Kostenunterschieden führen.

Einfachere Bereitstellung

Die Bereitstellung eines serverlosen Dienstes erfordert nicht, dass du deinen Server aufsetzen und konfigurieren musst. Die Bereitstellung einer serverlosen Anwendung erfolgt ebenfalls durch einfache Funktionen. Es ist einfacher, eine Version der Anwendung zu erstellen und sie in der Cloud verfügbar zu machen. Der gesamte Prozess der Bereitstellung ist daher einfacher und effizienter.

Skalierbarkeit

In einer traditionellen Anordnung muss man sich sehr anstrengen, um die Skalierung zu erhöhen, um dem höheren Traffic gerecht zu werden. Auf der anderen Seite kümmert sich der Service Provider um die Ressourcenzuweisung, wenn der Traffic steigt. Folglich ist es einfacher zu skalieren, wenn man auf eine serverlose Architektur setzt.

Serverless PHP: Nachteile

Obwohl das serverlose Computing seine vielen Vorteile hat, muss man sich seiner potenziellen Nachteile bewusst sein, bevor man sich darauf einlässt.

Leistung

Das Hauptproblem, das die Benutzer beim Serverless Computing hervorheben, ist der Leistungseinbruch. Obwohl es ereignisgesteuert ist, dauert es einige hundert Millisekunden, bis eine Mikroinstanz zur Bedienung einer Anforderung erzeugt wird.

Diese Verzögerung kann sich bei zeitkritischen Anwendungen als signifikant erweisen. Mit zunehmender Komplexität einer Anwendung tragen Komponenten, die sich an verschiedenen Orten befinden, zu dieser Verzögerung bei. Diese zusätzliche Zeitverzögerung kann sich als nachteilig für die Benutzererfahrung erweisen.

(Leseempfehlung: Einführung in die Erstellung von Webseiten mit Gatsby und WordPress)

Hersteller-Sperre

Während die serverlose Architektur es dir erlaubt, dich ausschließlich auf deinen Code zu konzentrieren, erhält der Anbieter die volle Kontrolle über die Infrastruktur. Daher kann man den Anbieter nicht wechseln, wenn man serverlos arbeitet, da die Migration eine schwierige Aufgabe sein kann.

Fehlerbehebung

Die Anbieter kümmern sich um die End-to-End-Bereitstellung von serverlosen Anwendungen. Daher muss sich ein Entwickler darauf verlassen können, dass der Hersteller geeignete Protokolle zur Fehlersuche zur Verfügung stellt. Der Prozess der Fehlersuche in einer serverlosen Anwendung zur Ermittlung der Ursache ist ebenfalls schwierig.

Serverless PHP: Erste Schritte mit Bref auf Lambda

Während wir uns mit der serverlosen Architektur beschäftigt haben, werden wir nun sehen, was man für die Bereitstellung einer PHP-Anwendung über einen serverlosen Dienst benötigt.

Wie du vielleicht schon vermutet hast, ist die Bereitstellung einer serverlosen Anwendung sehr spezifisch für den Anbieter. Daher versucht dieser Beitrag, die Implementierungen einer serverlosen PHP-Anwendung auf Amazon AWS anzusprechen. Bref, oder kurz auf Französisch, ist ein Composer-Paket, das es dir ermöglicht, PHP-Anwendungen auf AWS über Lambda zu implementieren.

Bref entwickelt sich ständig weiter, daher solltest du wahrscheinlich die Reifegradmatrix von Bref überprüfen, um zu beurteilen, ob es eine gute Idee ist, deine Anwendung auf eine serverlose Architektur zu übertragen.

Voraussetzungen für Serverless PHP mit Bref

Gehe zunächst zu Amazon AWS und erstelle ein Konto. Du brauchst es, um deine Anwendung zu implementieren. Als nächstes musst du das Serverless-Framework installieren, um deine Bereitstellung zu verwalten.

npm install -g serverless

Als nächstes generiere dein öffentlich-privates Schlüsselpaar auf AWS und konfigurieren das Serverless-Framework lokal.

serverless config credentials --provider aws --key  --secret 

Als nächstes installiere Bref über den Composer:

composer require bref/bref

Vor dem Deployment muss man die Abhängigkeiten von Composer installieren.

composer install --prefer-dist --optimize-autoloader --no-dev

Erstelle mit Bref eine Hello World-Anwendung auf Serverless PHP

Um eine einfache Hello-World-Anwendung mit Bref zu erstellen, werden wir eine Funktion schreiben, die durch ein Ereignis ausgelöst wird und die Zeichenfolge „Hello World“ zurückgibt.

Zuerst muss das Skript autoload.php von Bref eingebunden werden und dann seine Lambda-Funktion verwendet werden. Du kannst optional eine Kontextvariable deklarieren, wenn du auf Daten aus dem Kontext zugreifen möchtest.

require __DIR__.'/vendor/autoload.php';
lambda(function ($event) {
 return 'Hello world');
});

Während die Funktion bereit ist, muss eine serverless.yml-Konfigurationsdatei erstellt werden. Hier ist eine grundlegende Konfigurationsdatei aus dem Bref-Handbuch.

service: app
provider:
 name: aws
 runtime: provided
plugins:
 - ./vendor/bref/bref
functions:
 hello:
 handler: index.php
 layers:
 - ${bref:layer.php-73}

Bref erstellt diese Konfigurationsdatei automatisch, wenn du den folgenden Befehl ausführst.

vendor/bin/bref init

Nun, da du mit deiner Funktion und der Konfiguration fertig bist, kannst du die Funktion aufrufen, um zu prüfen, ob sie wie vorgesehen läuft, indem du den Befehl invoke des serverlosen Pakets verwendest:

serverless invoke -f hello

Hier ist ein Leitfaden für die lokale Bereitstellung von serverlosen Anwendungen mit dem sam Befehlszeilen-Tool von AWS. Sobald dein Projekt fertig ist, kannst du es mit dem Deploy-Befehl von serverless bereitstellen. Verwende die Option --verbose, um Einzelheiten über den Prozess der Bereitstellung zu erhalten:

serverless deploy

Andere Bereitstellungsoptionen für serverloses PHP

Bref PHP auf AWS Lambda ist eine beliebte Wahl. Es gibt jedoch noch ein paar andere Optionen für deine serverlosen PHP-Anwendungen.

Vapor, das von Laravel im Juli 2019 eingeführt wurde, ist eine serverlose Bereitstellungsplattform für Laravel auf AWS Lambda. Vapor konvertiert deine Laravel-Anwendung in eine einzelne Lambda-Funktion. Obwohl Azure serverless offiziell kein PHP unterstützt, kann man es dennoch anhand dieses Einsatzbeispiels ausprobieren.

Zusammenfassung

Hier sind die wichtigsten Aspekte, die man aus diesem Leitfaden über Serverless PHP herausnehmen sollte:

  • Bevor du den Einsatz von Serverless PHP für deine Anwendung in Betracht ziehst, solltest du dich über die Vorteile und Nachteile von Serverless Computing im Klaren sein.
  • Es gibt drei Hauptfaktoren, die man bei der Umsetzung der Anwendung auf ein serverloses PHP-Framework beachten sollte. Berücksichtige die Komplexität der Anwendung, die Zeitkritik der Komponenten und die zukünftige Skalierbarkeit.
  • Serverless PHP ist noch ziemlich neu auf dem Markt. Stelle sicher, dass du ein Pilotprojekt mit Bref bei einem der Anbieter durchführst, bevor du dich vollständig darauf festlegst.

Obwohl das serverlose Verfahren immer beliebter wird, erfordert es auch ein tiefes Verständnis der Funktionsweise der Technologie, um die Vorteile zu nutzen.

In allen anderen Fällen kann die Verwendung eines gemanagten WordPress-Hosts wie Kinsta deinen Arbeitsablauf enorm vereinfachen.

Shaumik Daityari

Shaumik ist tagsüber ein Datenanalytiker und nachts ein Comic-Fan (oder ist er vielleicht Batman?) Shaumik schreibt seit über fünf Jahren Tutorials und erstellt Screencasts. Wenn er nicht arbeitet, ist er damit beschäftigt, alltägliche Aufgaben durch sorgfältig geschriebene Skripte zu automatisieren!