Hva er skalerbarhet?
Skalerbarhet er et systems evne til å håndtere økende last, som flere brukere og mer data, uten å måtte skrives om og uten at kostnadene løper løpsk. Man skalerer enten vertikalt, med en kraftigere maskin, eller horisontalt, med flere maskiner som deler på jobben. Det er et designvalg som er dyrt å bygge inn i etterkant.
Skalerbarhet er et ord som dukker opp så snart et system begynner å bli en suksess, eller når man håper at det skal bli det. I bunn og grunn handler det om et enkelt spørsmål: Hva skjer når mange flere vil bruke tjenesten samtidig? Her går vi gjennom hva skalerbarhet betyr, og hvordan du bør tenke på det som kunde.
Definisjonen
Skalerbarhet er et systems evne til å håndtere økende last (flere brukere, mer data, flere transaksjoner) uten å måtte skrives om fra grunnen av og uten at kostnadene løper løpsk. Et skalerbart system kan følge med når virksomheten vokser, i stedet for å bli en flaskehals som bremser den.
Poenget er at vekst ikke skal kreve en krise. Et godt bygget system går fra hundre til hundre tusen brukere ved at det får mer ressurser, mens et system som skalerer dårlig, møter veggen og krever en dyr ombygging akkurat når alt annet går bra. Skalerbarhet handler altså om å gjøre suksess håndterbar.
To måter å skalere på: vertikalt og horisontalt
Det finnes egentlig to måter å gi et system mer kapasitet på, og forskjellen er lett å forstå.
Vertikal skalering betyr at man gjør maskinen man allerede har, kraftigere: raskere prosessor, mer minne, mer lagring. Det er som å oppgradere til en større og sterkere bil. Det er enkelt og raskt, men før eller senere tar det slutt: Én enkelt maskin kan bare bli så stor, og til slutt finnes det ingen større å kjøpe.
Horisontal skalering betyr i stedet at man legger til flere maskiner som deler på arbeidet. I stedet for én kjempestor lastebil setter man inn flere vanlige lastebiler som kjører sammen. Det skalerer i praksis så langt man vil, men krever at systemet er bygget for å fordele jobben over flere maskiner, og det er noe man må tenke på tidlig, ikke legge til på slutten.
Skalerbarhet er et designvalg
Her ligger den viktigste innsikten for en kunde: Skalerbarhet er ikke en knapp man trykker på når presset kommer, men et valg som bygges inn i grunnmuren til systemet.
Et system som fra starten er tenkt for en håndfull brukere, kan være bygget på en måte som rett og slett ikke lar seg skalere horisontalt. Å rette det opp senere kan bety at store deler må bygges om: dyrt, tidkrevende og risikabelt, ofte midt i den veksten som utløste behovet. Å bygge med skalerbarhet i tankene fra start koster derimot sjelden mye ekstra, men sparer enormt hvis suksessen kommer. Derfor hører spørsmålet hjemme i designfasen, ikke i en fremtidig panikk.
En nøktern tommelfingerregel
Samtidig er det lett å overdrive i motsatt retning. Å bygge et system for millioner av brukere når man har tusen, er sløsing: Det koster tid og penger og gjør løsningen mer kompleks og vanskeligere å forvalte enn den trenger å være. Mange prosjekter har kjørt seg fast i å løse problemer de aldri fikk.
Den sunne avveiingen er å bygge for neste størrelsesorden, ikke for Google. Sikt mot å klare omtrent ti ganger dagens last uten ombygging. Det gir god margin å vokse inn i, uten at dere betaler for en skala dere aldri kommer til. Når dere nærmer dere det nye nivået, tar dere neste steg. Slik holder dere både kostnader og kompleksitet i sjakk.
Et konkret scenario
Tenk deg en nettbutikk som står foran sin første skikkelig store kampanje. Hverdagstrafikken er beskjeden, men i løpet av en helg ventes antallet besøkende å mangedobles. Et skalerbart system møter det ved midlertidig å starte flere maskiner som deler på lasten, og trapper deretter ned igjen når rushet har lagt seg. Man betaler for den ekstra kapasiteten bare når den trengs.
Et system uten den evnen står i stedet overfor et valg mellom å krasje under presset eller på forhånd å kjøpe (og betale for) en kjempemaskin som stort sett står ubrukt. Forskjellen er nettopp skalerbarhet, og den er bygget inn lenge før kampanjen. Vil dere vite om systemet deres er rustet for vekst, ser vi i Weapp gjerne på arkitekturen som en del av tjenestene våre før lasten setter den på prøve.
Ofte stilte spørsmål
Hva er skalerbarhet, enkelt forklart?
Det er et systems evne til å vokse uten å gå i stykker. Når flere brukere logger inn og datamengden øker, skal tjenesten fortsette å fungere like godt, uten å bli treg eller kreve at alt bygges om. Et skalerbart system klarer å gå fra hundre til hundre tusen brukere ved at man gir det mer ressurser, ikke ved en total omskriving.
Hva er forskjellen på vertikal og horisontal skalering?
Vertikal skalering innebærer at man gir den eksisterende maskinen mer kraft: raskere prosessor og mer minne. Det er enkelt, men før eller senere tar det slutt, for en maskin kan bare bli så stor. Horisontal skalering innebærer i stedet at man legger til flere maskiner som deler på lasten. Det skalerer mye lenger, men stiller høyere krav til hvordan systemet er bygget fra starten av.
Er det mulig å gjøre et system skalerbart i etterkant?
Det er mulig, men ofte dyrt og noen ganger smertefullt. Skalerbarhet er i bunn og grunn et designvalg som påvirker hvordan systemet bygges fra starten av. Et system som er bygget ut fra at det skal ha få brukere, må kanskje bygges om fra grunnen av for å klare mange. Derfor lønner det seg å tenke gjennom forventet vekst tidlig, selv om man ikke bygger for mer enn man realistisk trenger.
Må vi bygge for millioner av brukere fra start?
Nei, og det ville ofte være sløsing. Å bygge for en skala dere ikke er i nærheten av, koster unødvendig tid og penger og gjør systemet mer komplekst enn det trenger å være. Den nøkterne tommelfingerregelen er å bygge for neste størrelsesorden, ti ganger dagens last, ikke for Google. Det gir margin til å vokse uten å overdimensjonere løsningen.
Hvordan vet jeg om systemet mitt er skalerbart?
Spør hvordan det oppfører seg når lasten mangedobles: Fortsetter det å fungere når man legger til ressurser, eller krever det ombygging? Et tegn på god skalerbarhet er at systemet kan vokse horisontalt, med flere maskiner. Er svaret at alt avhenger av én enkelt server som bare kan bli større, finnes det en grense for hvor langt løsningen rekker.