Hva er egentlig Serverless?

"Serverless som konsept kan være forvirrende" skriver Jørgen Lybeck Hansen. Her er forklaringen.

📸: Ole Petter Baugerød Stokke
📸: Ole Petter Baugerød Stokke Vis mer

Serverless har potensiale til å påvirke hverdagen vår som utviklere i stor grad.

Det gir utvikleren bedre fokus på hva som er viktig; businesslogikk og brukeropplevelse. Utgivelsessykluser blir enklere og DevOps tankene begynner å strømme. Systemarkitekturen får en ny vri.

Men hva er egentlig Serverless?

Her får du en innføring, steg og steg.

«Serverless arkitektur er applikasjondesign som bruker tredjeparts Backend as a Service (BaaS) tjenester, og/eller som inkluderer kode styrt av egne konteinere på en Functions as a Service (FaaS) plattform.» Martin Fowler
Styrken bak alle *aaS-ene blir klarere når mye av logikken og funksjonaliteten man har implementert i flere tiår kan håndteres av skytilbydere. 📸: searchcloudcomputing.techtarget.com
Styrken bak alle *aaS-ene blir klarere når mye av logikken og funksjonaliteten man har implementert i flere tiår kan håndteres av skytilbydere. 📸: searchcloudcomputing.techtarget.com Vis mer

Oppklaring rundt Serverless

Serverless som konsept kan være forvirrende, med sin utradisjonelle arkitektur. Java og .NET API-er ligger tungt i mange av våre systemer. Om man plutselig skal lage et API på en annen måte begynner mange å klø seg i hodet.

I tillegg har det vært mye mistolking rundt navnet Serverless. Vi fjerner ikke servere, vi outsources de til f. eks skyleverandører som AWS, Azure og Google Cloud.

«Navnet “Serverless” er forvirrende. I en større applikasjon er det både server hardware og server prosesser som kjører et sted. Forskjellen til en normal tilnærming er at organisasjonen som bygger og støtter en Serverless applikasjon ikke trenger å ta hensyn til hardware eller prosesser. De outsourcer dette ansvaret til andre» Martin Fowler

Serverless gir fokus på målet

Systemutvikling handler ikke bare om å skrive kode, men om et mål som krever fokus. Det handler om kunder og sluttbrukere. Ikke alle bryr seg om applikasjonens arkitektur. Serverless tilbyr mye av mellomlogikken til tjenester og API-er, og gir en abstraksjon som utvikleren kan utnytte for å oppnå samme mål som å lage koden selv.

Det kan være kjedelig for utviklere å innrømme, men det viktigste vi gjør i jobben vår er å tilfredstille forretningsidéen til selskapet. Det er få ting som er så gøy som å refaktorere kode til å bli 10 ganger kortere og raskere, men forretningsavdelingen vil sjeldent la seg imponere av slik. Her et det kjernefunksjonalitet som gjelder, og korteste vei dit.

Serverless er fleksibelt og skalerbart

Bransjen har bevegd seg fra tunge utgivelsessykluser med vannfallsmetodikk og trege utviklingsprosesser til lynrask CI/CD metodikk med DevOps tankegang og flere utgivelser om dagen. Ny teknologi har muliggjort en endring i utviklerprosesser. For å holde følge med nye tankeganger er det viktig å ha en infrastruktur som støtter dette. Derfor har vi sett trender som å “flytte servere til skyen”. Dette gir gigantiske muligheter for bedrifter til å skalere API og database, samt å endre måten tjenestene logger informasjon.

Serverless skalerer når du trenger det (on-demand) eller fleksibelt om serveren er under høyt trykk.

Hvordan implementere Serverless

På de tre årene jeg har jobbet som utvikler har jeg stort sett skrevet kode i JavaScript. Mitt første prosjekt i Capgemini introduserte meg for AWS og skytjenester. Jeg fikk mye spillerom i prosjektet og kunne begynne å avgjøre teknologistacker for hvordan infrastruktur bygges. Legg det sammen med en flink AWS guru i teamet, og jeg satt i gang med å lære om Serverless gjennom AWS Amplify.

Et eksempelprosjekt:

  • En native mobilapp til 100 000 brukere. Listen over funksjonalitet er klar, og kravstor.
  • Applikasjonen skal lastes ned fra Appstore.
  • Tilby bildeopplasting.
  • Tekst skal være lokalisert til flere språk og kunne spilles av som lyd for universell utforming.
  • Applikasjonen skal sende notifikasjon til brukere under visse events.
  • Sikker innlogging fra flere tilbydere.

Dette har tidligere krevd et behov for flere Android og IOS utviklere og servere til å “hoste” alle brukerne. Applikasjonen skal skaleres opp og ned ved endring i last og applikasjonen krever i stor grad utviklere til å opprettholde både server og kode.

Tidene har endret dette. Det er hundrevis av tjenester laget ferdig i både AWS, Google Cloud og Azure. Det man må tenke på er hvordan man skal sy sammen tjenestene i skyen, ofte gjennom skyfunksjoner (Lambda, Google Functions, Azure Functions). FaaS tilbyr logikk direkte i Cloud som tar utgangspunkt i andre skytjenester for å behandle bedriftens spesifikke behov.

image: Hva er egentlig Serverless?

React Native og AWS Amplify som eksempel

For å løse de tidligere punktene med bruk av React Native og AWS Amplify, her er en liste over tjenester som kan brukes i AWS. Per i dag er dette et relativt enkelt oppsett med utviklervennlige API-er fra AWS og skyfunksjoner for å sy alt sammen.

  • Vi kan introdusere autentisering i appen med AWS Cognito.
  • Opplasting av bilder, video og lyd lagres i S3 (Simple Storage Service) som automatisk kan kjøre en skyfunksjon ved opplasting for å kategorisere filen med AWS Rekognition.
  • Tekst kan lagres i dokumentdatabasen AWS DynamoDB.
  • Når ny tekst lagres kalles en funksjon som bruker AWS Translate til å oversette til flere språk.
  • Så tar AWS Polly teksten å gjør den til lyd.
  • Har man informasjon til brukeren? SNS (Simple Notification Service) sender push notifikasjon, SMS eller epost så fort koden du har skrevet i skyfunksjonen sier at den skal sende.
  • Lag klient applikasjonen for både IOS og Android i React Native og koble den opp mot AWS Amplify gjennom et ekstremt enkelt API.

Grunnen til at mange som hører Serverless tenker på skyfunksjonene, og ikke alt rundt er at det er her selve koden skrives. Funksjonene er bare limet for andre tjenester, og der man faktisk skriver kode i skyen. Funksjonene har ansvar for å trigge SNS, lagre i S3, behandle lagret tekst og lyd, behandle bilder og ekstra logikk rundt innlogging.

Lær mer om Serverless!

Serverless tilbyr altså mange snarveier til målet og kan gjøre prosessene i et utviklerteam mer intutitivt. Det koker ned til at mindre kode trenger å opprettholdes. Behovet for utviklere er likevel ikke omme. Vi må være åpne for endringer i hverdagen vår. Det er en kjent sak at vi aldri slutter å lære programmering, og det å være åpne for cutting edge og buzz er ikke noen uting.

Dette er mine personlige meninger. Denne kronikken er ment til å utfordre utviklere sin tankegang. Den har vært partisk mot AWS fordi jeg har min erfaring der. Likevel sies det at dagens store tilbydere vil byttes ut med tiden. Foreløpig anbefaler jeg å starte med Google, AWS eller Microsoft.

Nytte artikler: