Help, mijn platform gaat viral!

5 tips ter voorbereiding op grote aantallen bezoekers
Frank Kuipers
22
-
04
-
2020
-
-
Scalability
Server Development
Optimisation

Je bent als startende ondernemer al je energie aan het steken in promotie van je nieuw-ontwikkelde platform. Met succes! Een gerenommeerde influencer raakt enthousiast van je platform en plaatst een lovende review op social media. In no-time wordt de review verspreid over het internet. Je platform is een trending onderwerp geworden. Het aantal bezoekers op je platform wordt met de seconde meer. Niets staat jouw succes meer in de weg! Totdat… 503. Service unavailable. Je ververst de webpagina en checkt je internetverbinding, maar tevergeefs. Je platform laadt niet meer en toont slechts een witte pagina met de foutmelding. Je platform is bezweken onder zijn eigen succes.


Door het platform goed mee te laten schalen op het moment dat de druk erop verhoogd werd, had voorkomen kunnen worden dat het platform bezweek. Bewuste keuzes maken op het gebied van schaalbaarheid is dan ook een belangrijke stap bij de realisatie van een platform. Maar wat is schaalbaarheid nou precies, wat zijn de opties die je hebt op het gebied van schaalbaarheid en hoe kan ik mijn platform nou viral laten gaan zonder bang te zijn dat het bezwijkt?

Wat is schaalbaarheid?

Schaalbaarheid is in technische termen het vergroten of verkleinen van de pool aan resources die een dienst heeft, zoals processorkracht en geheugen. Als je platform druk bezocht wordt, dan wil je dat het platform veel resources ter beschikking heeft. Neemt de druk weer af, dan wil je je natuurlijk niet blauw betalen aan de overcapaciteit die je op dat moment hebt. Schaalbaarheid past nadrukkelijk niet de programmatuur van het platform zelf aan. Opschalen zal het platform in de basis dan ook niet versnellen, maar zal er wel voor zorgen dat het platform een groter aantal gebruikers aan kan zonder langzaam te worden of te bezwijken.

Wat zijn mijn opties?

Fysieke en virtuele servers

Het internet biedt vele oplossingen voor het opzetten van een schaalbaar platform. Je kan natuurlijk je platform draaien op fysieke servers en weken voordat je een piek in het aantal gebruikers verwacht nog een paar servers bestellen om die volledig te installeren en te plaatsen. Buiten dat je een piek niet aan kan zien komen is het bijzonder omslachtig en is terugschalen geen optie. Servers en het netwerk virtualiseren biedt een uitkomst. Wordt jouw platform vanaf een virtuele private server (VPS) geserveerd, dan kan je de server met enkele klikken meer processorkracht of geheugen geven. Je kan zelfs in no-time een hele server bijplaatsen. Klinkt makkelijk, maar bij het upgraden kan je platform korte tijd offline zijn. Daarnaast zal je bij het plaatsen van nieuwe servers deze alsnog moeten inrichten. Fysieke of virtuele servers zijn in de basis dus niet goed schaalbaar.

Docker is een van de populairdere systemen om containers mee te beheren.


Containers

Schaalbaarheid werd een stuk eenvoudiger met de komst van zogenaamde containers. Een container is in principe een geïsoleerde service die draait op een server. De term is direct gekopieerd van zeecontainers. Vanwege de gestandaardiseerde maten kunnen containers op elk schip geplaatst worden en kan eenvoudig gestapeld worden. De containers waar wij het over hebben kunnen op elke server en in elke denkbare combinatie geplaatst worden. Elke service die je voor je platform nodig hebt kan in een eigen container geplaatst worden. Goede voorbeelden van services zijn bijvoorbeeld een webservice en een database. De containers handelen volledig geïsoleerd van de rest van de server, wel kan je eventuele koppelingen zelf inbouwen. De samenstelling van deze containers kan je volledig in code vastleggen. Als je veel bezoekers verwacht, dan zouden één of meerdere extra webservices er voor kunnen zorgen dat je de drukte de baas kan zijn. Omdat de samenstelling van de containers in code is vastgelegd, zal die extra webservice dus in no-time toegevoegd moeten zijn, toch? Niet helemaal. Wanneer je meer webservices hebt zal je ook moeten zorgen dat de gebruikers netjes verdeeld worden over deze services. Met puur containers kan je dat nog niet voor elkaar krijgen.

Orchestration

Orchestration is met vier lettergrepen de moeilijkste term tot nu toe. Een Nederlandse term is er niet voor. Een orchestrator koppelt de instrumenten die hij in een orkest ter beschikking heeft aan de passages van een gecomponeerd stuk muziek. Wordt een passage in de muziek complex, dan zal de orchestrator meer instrumenten inzetten om dit goed over te laten komen aan de bezoeker. Vervang de instrumenten met de containers en vervang de bladmuziek met de levensloop van je platform. Wordt je platform ineens trending en stijgt het aantal gebruikers explosief, dan zal de orchestrator uit zichzelf zorgen dat er bijvoorbeeld meer webservices beschikbaar zijn. Dit klinkt als de heilige graal van schaalbaarheid, maar dat is het nog niet helemaal. De orchestrator is slechts beperkt tot het aantal resources dat je hem ter beschikking stelt. De orchestrator zal niet uit zichzelf opschalen in processorkracht of geheugen van de server. Daarnaast zal de orchestrator ook niet uit zichzelf een nieuwe server aanschaffen. Dit is nog altijd werk wat je zelf moet regelen. Met een orchestrator is het dan weer wel zeer eenvoudig om een nieuwe server bij te plaatsen. Je hoeft een nieuwe server alleen te koppelen aan de orchestrator, deze zal dan automatisch de nieuwe server gebruiken om containers op te draaien. In de afbeelding zie je een orchestrator met drie servers. Over deze servers heeft de orchestrator de containers verspreid die het inzet om te zorgen dat het platform het aantal gebruikers aan kan.

De orchestrator verdeeld de containers over de beschikbare servers.


Orchestration bij cloud providers

Schaalbaarheid wordt tot het hoogste niveau getrokken wanneer je orchestration van containers plaats laat vinden bij een cloud provider. Je hoeft zelf niet meer na te denken over hoeveel servers je moet hebben op welk moment. Het enige wat je moet doen is zorgen dat je aangeeft hoe een container er uit ziet, hoe containers met elkaar kunnen communiceren en waar containers hun data opslaan. De cloud provider kan uit zichzelf meer en meer containers bijplaatsen op het moment dat het druk wordt op je platform. De enige limiterende factor is je budget. En budget is dan direct ook een nadeel. Wanneer je de orchestration volledig bij een cloud provider neerlegt betaal je naar verbruik. Het is lastiger in te schatten hoe veel geld je kwijt bent op het moment dat de cloud provider je platform opschaalt. Doorgaans is dit zowel de meest schaalbare als de duurste optie.

Voor welke optie moet ik nou gaan?

Er is geen optie die het beste past in elke situatie. Waar een fysieke server voor het ene project het meest geschikt is vanwege het volledig zelf kunnen beheren, kan dit voor een ander project totaal onzinnig zijn. De keuze zal altijd afhankelijk zijn van het budget, de verwachte schommeling in bezoekers, de benodigde rekenkracht, bestaande infrastructuur etc. Het kan dan ook goed zijn dat je je tijdens of na de ontwikkeling van je platform realiseert dat je een verkeerde keuze gemaakt hebt. Om deze reden is het verstandig om, ongeacht voor welke optie je gaat, je bij de ontwikkeling te houden aan vijf regels;

1) Gebruik docker containers

Docker containers gebruiken vormt de sleutel tot een schaalbaar platform. Zorg dat alle services zich afspelen in aparte containers. Ook al zal je in het begin geen gebruik maken van een orchestrator, je hebt wel de mogelijkheid om de switch naar orchestration te maken tegen een heel beperkte tijdsinvestering.

2) Maak het platform stateless

Zorg er voor dat een service geen staat van een bezoeker bijhoud. Een verzoek vanuit een gebruiker naar de service moet volledig los staan van andere verzoeken die het eerder heeft gestuurd. Mochten er meerdere containers van de webserver actief zijn, dan maakt het niet uit door welke container het verzoek van de gebruiker wordt behandeld. Lees hier meer over stateless webservices: https://nordicapis.com/defining-stateful-vs-stateless-web-services/

3) Zorg dat individuele services te swappen zijn

Niet alle services kan je zelf opschalen. Een database is bijvoorbeeld niet zomaar op te schalen. Mocht de belasting op de database te hoog worden, dan kan je slechts tot op zekere hoogte meer processorkracht of geheugen toevoegen. Er kan een punt komen waarop je het simpelweg niet meer zelf aan kan en het draaien van de database uit moet besteden aan een externe partij met veel meer kennis en capaciteit. Wees hierop voorbereid zodat een toekomstige switch naar een externe partij snel te regelen is.

4) Bereid het platform voor op cloud-storage

Ga er niet van uit dat je je uploads voor altijd zelf kan hosten. Natuurlijk kan je de eerste honderden gigabytes prima zelf verwerken, maar er komt een punt waarop je het zelf niet meer aan kan. Zorg er dus voor dat je in de ontwikkeling van het platform er al rekening mee houd dat de uploads op een externe locatie worden bijgehouden. Roep niet direct het bestandssysteem aan, maar praat via een interface die ook cloud-storage ondersteunt. Mocht je op het punt komen waarop je de switch wilt maken naar cloud-storage, dan hoef je enkel de configuratie van de applicatie aan te passen om dit werkend te krijgen.

5) Load testing

Schaalbaarheid neemt niet het belang van load testing weg. Blijft het platform daadwerkelijk snel op het moment dat het veel verzoeken te verduren krijgt? Mogelijk is er een bepaald aspect aan het platform slecht schaalbaar en zal het alsnog crashen bij hoge aantallen gebruikers. Voer dus alsnog load tests uit op het platform, zelfs als het schaalbaar is.

Met deze kennis kan je rustig je platform trending laten worden. Laat die gebruikers maar komen, wij zijn er klaar voor!

Bronnen

Discussieer met ons mee over schaalbaarheid

Hoe zorg jij dat je dienst schaalbaar is? Deel jouw ervaringen of vragen met ons en onze community.

We horen graag van je

Heb je iets aan deze blog gehad? Of misschien heb je iets aan te vullen? Laat je comment achter onder de post op LinkedIn.

Laat je stem horenLaat je stem horen

Blijf op de hoogte

Volg ons op LinkedIn om meer te zien

Pivit op LinkedInPivit op LinkedIn