Met de snel toenemende interesse in cloud computing, is schaalbaarheid een thema dat extra aandacht verdient. Gebruikers en organisaties verwachten dat hun websites en cloud-applicaties altijd optimaal functioneren, onder alle omstandigheden. Er wordt gedacht dat cloud-applicaties beter blijven reageren bij een zware belasting. Een cloud-applicatie of website die bij piekbelasting traag reageert – of soms zelfs helemaal niet beschikbaar is – wordt door gebruikers niet geaccepteerd. Hoge prestaties zijn echter niet vanzelfsprekend.
Naarmate het aantal gebruikers groeit en de complexiteit van cloud-oplossingen toeneemt, zie je in de praktijk dat veel websites niet in staat zijn om de gewenste snelheid te blijven bieden bij piekbelastingen. De cloud wordt door veel mensen gezien als een soort wondermiddel. Geen hardware investeringen, gemakkelijk in te zetten, het beheer wordt verzorgd, kortom: ‘alles gaat vanzelf’. Maar zo eenvoudig is het natuurlijk niet. Bij het ontwerp van cloud-diensten en websites – en vooral bij de keuze voor de achterliggende architectuur – moet heel goed worden nagedacht over de doelstellingen en de eisen. En dat gaat veel verder dan alleen de daadwerkelijke businessfunctionaliteit. Schaalbaarheid is een factor waar terdege voor gepland en ontworpen moet worden. Zo niet, is het wachten op problemen. We hebben de afgelopen jaren diverse keren in de media kunnen lezen over groots opgezette websites (bijvoorbeeld van evenementen, kaartverkoop voor popconcerten, etc.) die binnen no-time onbereikbaar werden door het grote aantal gelijktijdige bezoekers. Zoiets kost omzet en zorgt voor imagoschade.
Wat is ‘schaalbaarheid’
Maar wat bedoelen we eigenlijk met ‘schaalbaarheid’? Schaalbaarheid is het vermogen van een systeem, een netwerk of een proces om een groeiende werklast efficiënt te kunnen verwerken of het vermogen om uit te breiden. Het kan bijvoorbeeld staan voor het vermogen van een systeem om de algehele doorvoersnelheid te vergroten door de inzet van extra hardwaremiddelen. Dit betekent dat schaalbaarheid en prestaties in feite twee verschillende kenmerken zijn. Schaalbaarheid is het vermogen van een systeem om de verwerkingscapaciteit – bij voorkeur automatisch – te vergroten wanneer de werklast toeneemt. En dat is een van de grootste uitdagingen bij het ontwerpen en bouwen van online schaalbare cloud-oplossingen.
Bij schaalbaarheid zijn er in principe twee varianten: bij scale-up gaat het meestal om het inzetten van zwaardere of nieuwere servers. De tegenhanger daarvan is scale-out. Hierbij wordt de verwerkingscapaciteit vergroot door de werklast te verdelen over meerdere systemen. Deze clustering maakt het mogelijk om applicaties in parallel te draaien op meerdere servers (cluster nodes). Daarbij wordt de werklast verdeeld over meerdere servers en zelfs wanneer één van de servers om welke reden dan ook uitvalt, blijft de applicatie beschikbaar via de overige nodes van het cluster. Daarom is het dan ook zeer aan te raden om voor belangrijke applicaties minimaal twee servers te gebruiken. De keuze voor scale-up of scale out hangt sterk af van het soort applicatie. Het is echter niet altijd mogelijk om een bestaande webapplicatie op zomaar een applicatie servercluster te draaien om zo de schaalbaarheid en beschikbaarheid van het systeem te verhogen. De webapplicatie moet ontworpen zijn met het oog op deze schaalbaarheid en voorbereid zijn op het gekozen schalingsmodel.
Applicatieplatform en databases
Daarnaast zijn er fundamentelere keuzes als het gaat om het bouwen van goed schaalbare cloud business-oplossingen. Het begint met de keuze voor het achterliggende applicatieplatform. Microsoft Windows Azure beschikt bijvoorbeeld over diverse kenmerken en functies die helpen om de prestaties te verbeteren, zoals bijvoorbeeld caching. Als ontwikkelaar moet je er voor zorgen dat je in het ontwerp gebruikt maakt van de juiste services die op het Azure-platform beschikbaar zijn, voor de beste prestaties. Er moet ook goed rekening gehouden worden met de inherente beperkingen die in elk basisplatform aanwezig zijn. Relationele databases kunnen de schaalbaarheid beperken. Ook kunnen de prestaties van SQL Server worden beperkt (‘throttling’), afhankelijk van de actuele prestaties van de database, de gebruikte opslagruimte, de processorbelasting en andere variabelen die constant worden gemonitord. Gelukkig zijn er ook andere manieren voor het opslaan van databasegegevens in de cloud. Table storage kan een interessante alternatieve manier zijn voor het opslaan en opvragen van grote hoeveelheden gestructureerde, maar niet relationele data. Bij deze, op NoSQL principes gebaseerde opslagvorm hoeven geen complexe relaties tussen tabellen te worden bijgehouden. En dat komt de prestaties ten goede. Per Azure storage account kan tot 100TB aan informatie in Tables worden opgeslagen.
Een andere afweging bij het uitrollen van cloud-applicaties is de keuze voor Infrastructure-as-a-Service (IAAS) of Platform-as-a-Serice (PAAS). In het geval van IAAS verzorgt de leverancier de benodigde hardware, opslag en virtualisatiemogelijkheden. De afnemer is verantwoordelijk voor de virtuele machine met het besturingssysteem en alle andere zaken die nodig zijn om de applicatie te draaien. IAAS is met name geschikt voor het migreren van bestaande applicaties naar de cloud, of die gebruik maken van services die nog niet beschikbaar zijn als native cloud service, of draaien op een ander besturingssysteem dan Windows (bijvoorbeeld Linux). Het is echter niet zo dat een niet schaalbare applicatie plotseling schaalbaar wordt wanneer deze zonder aanpassingen in een Azure VM naar de cloud wordt gebracht.
Bij PAAS is het niveau van abstractie hoger. Hierbij zorgt de leverancier bovenop het IAAS-model ook het besturingssysteem, de middleware en de benodigde runtime. Dit heeft als voordeel dat je je als afnemer alleen maar bezig hoeft te houden met daadwerkelijke applicatie. De leverancier is bij PAAS bijvoorbeeld ook verantwoordelijk voor het up-to-date houden van het besturingssysteem met de noodzakelijke patches.
In tegenstelling tot andere leveranciers, zoals Amazon, heeft bij Windows Azure lange tijd de nadruk gelegen op PAAS. Maar met het commercieel beschikbaar komen van Windows Azure Virtual Machines in april 2013, biedt Microsoft nu ook een volwaardige IAAS-oplossing.
De doelstellingen bepalen het ontwerp
Hoe goed het achterliggende platform echter ook is, de prestaties en de schaalbare efficiency zijn vooral afhankelijk van het ontwerp van de toepassingen van de keuzes die je daarbij maakt. Het begint bij het achterhalen van de diepere doelstellingen van de klant (of dit nu de eigen organisatie is of een externe klant). Hoe wordt de toepassing uiteindelijk ingezet en wat zijn de realistische gebruiksscenario’s? Natuurlijk spelen ook business-eisen en -doelstellingen een belangrijke rol, zoals kosten, de mogelijkheid om het systeem afhankelijk van het succes te kunnen laten groeien (of krimpen) wanneer dat nodig is, het opvangen van piekbelastingen, organisatorische zaken (geen eigen hardware/beheer) etc.
Afhankelijk van de doelstellingen kan daarna gekeken worden welke delen – en in welke mate – de applicatie moeten worden geoptimaliseerd om de gestelde doelen te behalen.
In sommige gevallen is het misschien aan te raden om een hybride oplossing te kiezen, waarbij de delen van een applicatie die het meest geschikt zijn voor een cloud-scenario worden gekoppeld met on-premises oplossingen. Je kan ook denken aan een scheiding van de functionaliteit op basis van het gebruiksmodel. Een publiek deel waar miljoenen hits in korte tijd worden verwacht, is bij uitstek een kandidaat om naar de cloud te brengen. De back-end of business-functionaliteit voor het later verwerken van de gedane transacties kan bijvoorbeeld plaatsvinden door on-premises systemen.
Om de benodigde schaalbaarheid in een cloud-applicatie te realiseren, kan bijvoorbeeld gebruikgemaakt worden van caching en queuing. In veel gevallen is er ook aanzienlijke winst te halen door waar mogelijk statische content vooraf te generen en op te slaan in Azure Blob storage. Deze informatie kan dan zonder verder verwerking door gebruikers worden geraadpleegd.
Samenvattend hier de belangrijkste zaken om rekening mee te houden voor het bouwen van schaalbare websites of diensten:
- Schaalbaarheid van cloud-applicaties is geen kwestie van het ‘even bijschakelen’ van capaciteit; bij het ontwikkelen van webtoepassingen moet schaalbaarheid van meet af aan een integraal onderdeel zijn van het ontwerp;
- Zorg ervoor dat de doelstellingen helder zijn: waarom wil je naar de cloud? Welke concrete voordelen wil je behalen? Stel een realistische verwachting op voor wat betreft de piekbelasting en bepaal aan de hand daarvan je prestatie-eisen en gewenste service levels;
- Denk goed na over welke delen van de oplossing naar de cloud moeten. Het is niet nodig om alles in de cloud te zetten; hybride oplossingen kunnen soms betere prestaties opleveren. Een belangrijke voorwaarde daarbij is echter wel dat al het beheer – zowel in de cloud als on-premises – bij voorkeur vanuit managementomgeving gedaan kan worden;
- Maak optimaal gebruik van extra mogelijkheden die een cloud-platform biedt;
- Maak een bewuste keuze tussen Infrastructure-as-a-Service en Platform-as-a-Service. IAAS is de beste keuze wanneer flexibiliteit en keuzevrijheid in het besturingssysteem, applicatie-ontwikkelplatform, etc. voorop staan. PAAS is eenvoudiger uit te rollen en te beheren, en vaak beter schaalbaar.