Serverless computing is een cloud-based executiemodel waarmee applicaties als een service kunnen worden gehost, zonder dat ze hierbij een server hoeven te gebruiken.

De serviceprovider zorgt voor de toewijzing van serverresources en de gebruiker wordt gefactureerd op basis van gebruik. Hierdoor kan de ontwikkelaar zich richten op het coderen van de applicatie en de infrastructuur overlaten aan de serviceprovider. Serverless computing staat ook wel bekend als Function as a Service (FaaS).

Serverless PHP is de implementatie van serverless computing met een PHP-back-end.

In deze handleiding kijken we eens goed naar Serverless PHP, wat het precies inhoudt, de belangrijkste kenmerken, en de voor- en nadelen van deze benadering van cloud computing.

Specifiek gaan we kijken naar het concept van serverless computing, waarvoor je het kan gebruiken (en waarvoor niet), de voor- en nadelen, een eenvoudige implementatie van Serverless PHP met Bref en hoe de drie grootste bedrijven uit de industrie tegen Serverless PHP aankijken (Amazon, Microsoft en Google). Genoeg te bespreken dus!

Klaar voor de start? Af!

Tot nog niet zo lang geleden had je serverhardware nodig om een applicatie op het internet op te zetten. De servermachine (of machines) moest daarbij fysiek verbonden zijn met het internet, als je wilde dat mensen toegang hadden tot je applicatie. Serveronderhoud was daarbij een dure aangelegenheid.

De volgende stap in de evolutie van hostingdiensten was dat webmasters hostingruimte konden kopen – elke server kon dus meerdere applicaties bevatten. Dit zorgde voor significant lagere kosten.

Met de opkomst van cloud computing zorgden de bijbehorende schaalvoordelen dat kosten nóg verder konden worden verlaagd, omdat het mogelijk was om een kleine hoeveelheid ruimte te huren op een grote, externe serverfarm. In feite betaal je voor serverless computing dus alleen voor de dienst die je daadwerkelijk gebruikt. Als je niets gebruikt, dan gebruik je dus ook geen ruimte of bronnen in de cloud.

Serverless computing vereenvoudigt hiermee het softwareontwikkelingsproces: het zorgt ervoor dat jouw organisatie zich uitsluitend hoeft te concentreren op de ontwikkeling zelf, zonder dat je je zorgen hoeft te maken over de implementatie, serveronderhoud en scaling.

Serverless PHP: de basis

Trends voor de term "serverless" op Google
Trends voor de term “serverless” op Google

Om een serverless PHP-applicatie uit te zetten, is het zaak om eerst te begrijpen wat het concept van serverless precies inhoudt. Hoewel de term serverless al even bestaat – deze verscheen voor het eerst in 2012 op ReadWrite in dit artikel over de toekomst van software-ontwikkeling – werd het pas echt populair met de lancering van AWS Lambda in 2014.

In deze sectie richten we ons op een aantal sleutelconcepten met betrekking tot serverless computing en beantwoorden we een aantal veel gestelde vragen over deze technologie: komt er bijvoorbeeld echt geen server aan te pas?

Features van Serverless PHP

Deployment is een makkelijke taak als je geen server hoeft te beheren. Het enige wat je hoeft te doen is de code naar de server te uploaden en de rest wordt verzorgd door de leverancier van de server(dienst). Serverless technologie stelt je in staat om taal-agnostische functies te hebben die met elkaar communiceren.

Als je bijvoorbeeld een messaging-applicatie hebt, dan kan je de inlogmodule in één taal gecodeerd zijn, en de functie die de status bijwerkt in een andere.

Hoewel dit technisch gezien ook mogelijk is zonder serverless hosting, is het wel veel moeilijker om deze samen te laten werken. Wanneer een action een function activeert, dan heb je een instance nodig om deze af te handelen.

Het proces van het spawnen van een instance kan “warm” zijn, waarbij je een bestaande instance gebruikt, of “cold”, wat betekent dat je een nieuwe instance start. Er is een kleine vertraging in dit proces, vooral bij een “koude” start, in vergelijking met traditionele hosting, waarbij je server altijd in de stand-bymodus staat om verzoeken af te handelen.

Als je ineens een heleboel verschillende requests hebt, dan zie je echter het tegenovergestelde. Schaalbaarheid is dus inherent aan serverless technologie. Als het ineens nodig is dat je duizend gelijktijdige verzoeken moet kunnen afhandelen, dan kan de leverancier zorgen dat dit gebeurt – moeiteloos en zonder enige configuratiewijzigingen.

Komen er in Serverless PHP écht geen servers van pas?

Laat de term “serverless” je niet verwarren. Het betekent niet dat de “server” niet bestaat. Wanneer je een serverless applicatie gebruikt, is er wel degelijk sprake van een server op de achtergrond die je invoer verwerkt en de benodigde output berekent.

Waarom ze het dan “serverless” noemen? Dat komt omdat, vanuit het perspectief van een ontwikkelaar, er geen server aan te pas komt (inclusief de bijbehorende rompslomp). Als je een serverless PHP-applicatie uitzet, is er dus wel degelijk sprake van een fysieke server die de verzoeken afhandelt.

BaaS vs Serverless architectuur

“Serverless computing” is een niet strak gedefinieerde term. Soms wordt deze dus gebruikt als synoniem voor BaaS-applicaties (Backend as a Service). Je zou kunnen stellen dat serverless een onderdeel van BaaS is: BaaS verwijst namelijk ook naar een cloud computing-model waarbij serverbewerkingen worden uitbesteed aan een externe partij en waarbij de ontwikkelaar zich alleen hoeft te concentreren op het maken en onderhouden van de software.

De belangrijkste overeenkomst tussen BaaS en Serverless is het feit dat de ontwikkelaar zich niet hoeft bezig te houden met serverbeheer. Veel organisaties leveren BaaS- en FaaS-pakketten onder dezelfde naam.

Dit zijn de grootste verschillen tussen BaaS en serverless computing:

  • Componenten: BaaS-applicaties komen redelijk overeen met hun traditionele tegenhangers, een ontwikkelaar hoeft zijn structuur dus niet in alle gevallen te wijzigen wanneer hij deze aanpast op BaaS. Bij serverless is de applicatie onderverdeeld in logische onderdelen, functions genaamd, en elk van deze functions reageert op een event en voert een specifieke taak uit.
  • Schaalbaarheid: Schaalbaarheid is een cruciaal onderdeel van een serverless applicatie – er worden meer middelen toegewezen bij meer verkeer. Dit is niet noodzakelijkerwijs het geval voor BaaS-applicaties, hoewel sommige serviceproviders het wel als add-on aanbieden.
  • Triggers: een serverless applicatie is event-gestuurd, wat betekent dat een bepaalde activiteit de applicatie activeert, telkens wanneer deze zich voordoet. Aan de andere kant kan een BaaS-applicatie op de achtergrond draaien waarbij de middelen continue worden gebruikt, net als een traditionele applicatie.
  • Modulaire architectuur: in de serverless architectuur is het mogelijk dat verschillende functies van een applicatie op verschillende servers staan en worden uitgevoerd, maar naadloos worden uitgevoerd vanwege hun integratie. Een BaaS-applicatie volgt deze structuur niet per se.

Serverless PHP: usecases

We hebben nu verschillende aspecten van serverless computing besproken en hoe deze verschillen van BaaS. Nu we de basis van serverless computing hebben behandeld, is het tijd om eens naar de scenario’s te kijken waarin je wil kiezen voor een dergelijke architectuur.

Wellicht heb je je gerealiseerd dat het misschien geen goed idee is om complexe applicaties op serverless technologieën te hosten. Maar dat je niet je gehele applicatie wil uitzetten via serverless PHP, betekent niet dat je dit niet kan doen voor afzonderlijke modules.

We bespreken in deze sectie twee voorbeelden van implementaties van een serverless stack: databases en bestandsopslag.

Een serverless database is een on-demand database waarmee je query’s kan uitvoeren wanneer je ze nodig hebt. Schalen is eenvoudig dankzij de serverless stack en de leverancier factureert je alleen voor het daadwerkelijk gebruik van de resources.

Amazon Aurora en Google Cloud Datastore zijn voorbeelden van serverless databases die tegenwoordig op de markt zijn. Een serverless bestandsopslagsysteem wordt geïmplementeerd als object stores. Bestanden worden niet behandeld als een hiërarchie binnen een bestandssysteem, maar als objecten, die de gegevens van het bestand zelf en de metadata bevatten. Opslag en retrieval geschiedt via een REST-achtige API.

IBM Cloud biedt ook een object storage dienst. Andere veel voorkomende toepassingen van serverless applicaties zijn API’s en mobiele back-ends, waarvan de ontwerpen zijn gebaseerd op kleine, logische, onderling afhankelijke functies.

Serverless PHP: voordelen

In deze sectie bespreken we de belangrijkste voordelen van serverless computing en waarom het de laatste jaren aan populariteit wint.

Lagere serverkosten

Theoretisch gezien leidt serverless computing tot lagere kosten in vergelijking met traditionele hosting. De reden is simpel: je betaalt alleen voor wanneer je van de dienst gebruik maakt en hoeft dus niets te betalen als je dit niet doet. Als je echter een redelijk constante stroom verkeer hebt, dan zal je waarschijnlijk niet veel verschil merken bij het overstappen naar een serverless architectuur.

Makkelijkere deployment

Het opzetten van een serverless dienst is makkelijker, omdat je geen server hoeft in te stellen en te configureren. Deployment van een serverless applicatie gebeurt via eenvoudige functies. Het is makkelijker om een versie van de applicatie te maken en deze beschikbaar te maken in de cloud. Het hele deployment-proces is daarom eenvoudiger en efficiënter.

Schaalbaarheid

In een traditionele opstelling moet men veel moeite doen om op te schalen bij meer verkeer. Bij serverless computing neemt de serverprovider de toewijzing van resources voor zijn rekening wanneer het verkeer toeneemt. Het is daarom veel makkelijk om op te schalen bij serverless architectuur.

Serverless PHP: nadelen

Hoewel serverless computing een groot aantal voordelen heeft, moet je je ook bewust zijn van de mogelijke nadelen voordat je met deze technologie in zee gaat.

Prestaties

Het belangrijkste probleem dat gebruikers melden bij serverless computing, is de performance-dip. Omdat het event-gestuurd is, duurt het een paar honderd miliseconden om een micro-instance te genereren die nodig is om een verzoek af te handelen.

Voor toepassingen waar (reactie)tijd van belang is, kan dit significant zijn. Als we het hebben over een complexe applicatie, dan kunnen componenten zich op verschillende locaties bevinden, wat bijdraagt aan de lag. Deze vertraging kan nadelig zijn voor de gebruikerservaring.

(Leessuggestie: Inleiding tot het bouwen van websites met Gatsby en WordPress)

Je zit vast aan de leverancier

Omdat je door de serverless architectuur uitsluitend op je code kunt focussen, geef je de leverancier volledige controle over de infrastructuur. Daarom kan je niet zomaar van leverancier wijzigen als je serverless gaat, omdat migratie een moeilijke taak kan zijn.

Debugging

Leveranciers zorgen voor de end-to-end implementatie van serverless applicaties. Dat betekent wel dat een ontwikkelaar afhankelijk is van de leverancier voor het leveren van logboeken voor debugging. Het proces van het debuggen van een serverless applicatie om de hoofdoorzaak te achterhalen kan daarnaast een hele klus zijn.

Serverless PHP: Aan de slag met Bref op Lambda

Nu ik serverless architectuur heb besproken, wil ik je laten zien hoe je een PHP-applicatie uitzet via een serverless dienst.

Zoals je wellicht nu al kan raden, verschilt het uitzetten van een serverless applicatie enorm per leverancier. We bespreken daarom in dit geval de implementaties van een serverless PHP-app op Amazon AWS. Bref is een Composer-taal waarmee je middels Lambda PHP-applicaties uit kan zetten op AWS.

Bref is constant in ontwikkeling, dus check vooral Bref’s maturity matrix om te beoordelen of het een goed idee is om je applicatie over te hevelen naar een serverless architectuur.

Vereisten voor serverless PHP met Bref

Ga allereerst naar Amazon AWS en maak een account aan. Deze heb je nodig voor de deployment van je applicatie. Zorg vervolgens dat je het serverless framework installeert om je deployment te beheren.

npm install -g serverless

Genereer nu je public-private keypair op AWS en configureer het serverless framework lokaal.

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

Installeer Bref via Composer:

composer require bref/bref

Zorgt ook dat je de dependencies van Composer installeert voordat je begint met de deployment.

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

Maak een Hello World applicatie met Bref op serverless PHP

Om een eenvoudige Hello World applicatie te maken met Bref, schrijven we een function die wordt geactiveerd door een event en die de string “Hello World” aan ons teruggeeft.

Als eerste moet je Bref’s script autoload.php opnemen en vervolgens de lambda-function gebruiken. Optioneel kan je een context-variabele declareren als je toegang wilt tot de gegevens uit de context.

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

De functie is nu klaar, maar je hebt nog wel een serverless.yml configuratiebestand nodig. Hier is een basisconfiguratiebestand uit de handleiding van Bref.

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

Bref maakt dit configuratiebestand automatisch aan wanneer je de volgende opdracht uitvoert.

vendor/bin/bref init

Nu je klaar bent met je function en configuratie, kan je de functie aanroepen om te kijken of deze naar behoren werkt. Dit doe je door gebruik te maken van de invoke opdracht uit het serverless package:

serverless invoke -f hello

Hier is een gids over de lokale deployment van serverless applicaties met behulp van de sam commandline-tool van AWS. Nu het project gereed is, kan je deze uitzetten met de opdracht deploy van serverless. Gebruik de option--verbose om meer informatie te ontvangen over het implementatieproces:

serverless deploy

Andere deployment-mogelijkheden voor serverless PHP

Bref PHP op AWS Lambda is een populaire keuze. Er zijn echter nog een aantal andere opties voor je serverless PHP-applicaties.

Vapor, uitgebracht door Laravel in juli 2019, is een platform waarmee je een serverless deployment kan uitzetten voor Laravel op AWS Lambda. Vapor zet je Laravel-applicatie om in een enkele lambda-function. Hoewel Azure serverless officieel geen PHP ondersteunt, kan je het toch proberen met dit deployment-voorbeeld.

Samenvatting

Dit zijn de belangrijkste take-aways die we in deze handleiding over serverless PHP hebben besproken:

  • Voordat je overweeg om serverless PHP ook voor jouw applicatie te gebruiken, zorg dat je volledig op de hoogte bent van wat serverless computing is en de voor- en nadelen ervan.
  • Er zijn drie belangrijke factoren waarmee je rekening moet houden bij het overhevelen van je applicatie naar een serverless PHP-framework. Houd rekening met de complexiteit van de applicatie, hoe belangrijk het is dat er geen lag is bij het uitvoeren van de componenten en de (toekomstige) schaalbaarheid.
  • Serverless PHP is een redelijk nieuw concept. Zorg dat je Bref grondig test bij een van de leveranciers voordat je er volledig op overstapt.

Serverless wordt erg populair, maar het vereist kennis en kunde over deze technologie om hiervan te profiteren.

In de meeste gevallen kan het gebruik van een premium host zoals Kinsta, die ook managed WordPress hosting biedt, je workflow enorm vereenvoudigen.

Shaumik Daityari

Shaumik is a data analyst by day, and a comic book enthusiast by night (or maybe, he's Batman?) Shaumik has been writing tutorials and creating screencasts for over five years. When not working, he's busy automating mundane daily tasks through meticulously written scripts!