FaaS: De droom werkelijkheid?

Tim Boerman - Projectleider Innovatielab

Wat is de droom? Geen serverbeheer, snel opgeleverde functionaliteit, snel prototypes, automatisch schalen en alleen betalen bij gebruik. Het resultaat: gelukkige klanten en ontwikkelaars, dat klinkt als de droom van ieder softwarebedrijf. FaaS biedt het allemaal, maar is het zo mooi als het lijkt?  

Wat is I, C, P, F as a Service? 

Met de komst van de verschillende cloud providers (Microsoft AzureAmazon’s AWS & Google Cloud) zijn er verschillende services ontstaan om software in te hosten. De verschillende services zijn in de onderstaande afbeelding te zien.  

Zoals in de bovenstaande afbeelding verschilt het per service wie er verantwoordelijk is. Bij IaaS en CaaS is de gebruiker verantwoordelijk voor het schalen van de applicaties. Bij PaaS en FaaS ligt deze verantwoordelijkheid bij de cloud provider. De laatste service, FaaS, is de service waar dit blog zich op richt. 

Wat zijn de voordelen? 

FaaS dus! Dat klinkt ideaal, maar wat houdt FaaS precies in? Een FaaS functie kan worden aangeroepen door middel van een event. Een event kan een HTTP requestservicebus bericht of een job trigger zijn. Een FaaS functie bestaat altijd maar uit één taak. Een voorbeeld is het verkleinen van een foto. De functie krijgt een bestand binnen, verkleint de foto en stuurt het terug. Normaliter zou je dit kunnen combineren met andere functionaliteit met betrekking tot het aanpassen van foto’s. Bij een FaaS functie gebeurt dit niet. 

De voordelen van FaaS functies zijn:   

  • productiviteit verhoging 
  • kostenbesparing 
  • time-to-market versnellen 

Zoals in de bovenstaande afbeelding te zien is neemt de cloud provider de verantwoording voor het schaalbaar hosten op zich. Dit heeft verschillende voordelen, zo hoeft een organisatie bijvoorbeeld weinig kennis te hebben over het schaalbaar hosten van functionaliteit. Voor veel organisaties is het niet mogelijk, of te duur, om een speciale operations afdeling op te zetten. Het schaalbaar hosten van de functionaliteit komt in dat geval op het bordje van de ontwikkelaar te liggen. Dit gaat ten koste van de productiviteit. Naast het inrichten van een schaalbare omgeving moet een dergelijke omgeving ook worden onderhouden, bij een FaaS oplossing draagt de cloud provider deze verantwoordelijkheid 

FaaS functies worden event-driven geschaald, dit houdt in dat je alleen betaalt op het moment dat de functie actief is getriggerd door bijvoorbeeld een HTTP request. PaaS oplossingen worden resource driven geschaald, maar om functionaliteit aan te bieden moeten er altijd resources actief zijn. Je kunt dit vergelijken met een interne softwareontwikkelafdeling waar bij drukte extra capaciteit wordt bijgeplaatst. Of het uitbesteden van softwareontwikkeling voor je organisatie. Bij een interne afdeling zijn er altijd kosten. Op het moment dat de capaciteit wordt vergroot lopen de kosten op. Wanneer de softwareontwikkeling wordt uitbesteedt, zijn er alleen kosten wanneer de externe partij wordt ingezet.  

Het laatste voordeel dat ik wil noemen is de gereduceerde time-to-market van functionaliteit. Het inrichten van een schaalbare infrastructuur is een tijdrovende klus. Wanneer deze verantwoordelijkheid bij de cloud provider ligt kan functionaliteit die schaalbaar moet zijn een stuk sneller worden opgeleverd.  

Wat zijn de nadelen? 

Tot zover lijkt de droom werkelijkheid te worden. Gelukkige klanten, minder kosten en schaalbare oplossingen. Maar, elk voordeel heeft zijn nadeel! FaaS oplossingen hebben een aantal nadelen en een aantal technische uitdagingen: 

  • Hoge koppeling tussen functionaliteit en FaaS oplossing 
  • State management 

Een FaaS functie wordt geschreven voor één FaaS oplossing. Denk hierbij aan AWS lamda functies of Azure Function apps. Een Azure Function app kan niet zomaar worden gemigreerd naar een AWS lamda functie. Het gevolg is dat je als ontwikkelaar ‘vast’ zit aan de gekozen FaaS oplossing, dit wordt ook wel een hoge koppeling genoemd. Wanneer de aanbieder van de FaaS oplossing de oplossing wijzigt kan het zijn dat dit invloed heeft op de ontwikkelde functies. Het kan voorkomen dat functionaliteit die prima werkt moet worden aangepast omdat de cloud provider de FaaS oplossing wijzigt. De hoge koppeling tussen de ontwikkelde functionaliteit en de FaaS oplossing kan dus nadelig zijn.  

Een technische uitdaging bij een FaaS functie is het bijhouden van de state van een applicatie. FaaS functies schalen automatisch, dit houdt in dat het aantal keer dat een functie actief is kan fluctueren. Het gevolg is dat er geen state kan worden bijgehouden op een instantie, dit zal dus op een externe bron moeten gebeuren. Meestal wordt hiervoor een database gebruikt. State extern opslaan is langzamer dan in het geheugen van de applicatie. In situaties waarbij een hoge performance erg belangrijk is, kan tot problemen leiden.   

Conclusie 

Bij Covadis gebruiken we FaaS op verschillende manieren, wij doen dit door middel van Azure FunctionsWebhooks en periodieke jobs zijn situaties waar wij FaaS functies inzetten. Beiden zijn geschikt doordat ze schaalbaar en niet altijd actief hoeven te zijn. Een praktisch voorbeeld is het project ConnectedGreen waarbij wij sensorinformatie verwerken via FaaS functies. Door deze keuze kan er goed worden opgeschaald wanneer er meer sensoren informatie verzenden.  

Is FaaS, “de droom”? Niet in alle gevallen, in de juiste situatie kan het wel de beste oplossing zijn. Ik vind dat de oplossing een combinatie van verschillende cloudoplossingen is. De expertise van ontwikkelaars ligt bij het ontwikkelen van software, niet bij het schaalbaar hosten van functionaliteit. Het is niet rendabel om zelf een vergelijkbare omgeving als Azure op te zetten. Kijk naar Netflix, die hosten al hun applicaties via AWS. Welke cloudoplossing het beste past, is afhankelijk van het vraagstuk. FaaS is in veel gevallen een interessante optie.   

Wil jij ook graag een schaalbare oplossing? Of meer weten over de mogelijkheden voor jouw applicaties? Neem contact met ons op! Wij nemen graag, net als een FaaS oplossing, jou zoveel mogelijk werk uit handen.   

Tim Boerman  

Tim Boerman is de projectleider van het Innovatielab. Dit lab is de R&D afdeling van Covadis. Hier werken talentvolle ontwikkelaars aan prototypes voor onze opdrachtgevers. Hiermee is Tim de slijper die van de ruwe diamanten ware edelstenen maakt. Als correspondent in het land der nieuwe technieken weet Tim van alle relevante noviteiten en aankondigingen. Via zijn blogs houdt hij ons allen op de hoogte, als zijn favoriete NBA team tenminste niet speelt.