Programmeren voor de cloud
Het ontwerpen van programma's die bestemd zijn voor de cloud, vereist een speciale aanpak. Afhankelijk van het type toepassing en de verwachte belasting, kunnen ontwikkelaars enkele van de functies gebruiken die door cloudproviders worden aangeboden om de schaalbaarheid en onderhoudbaarheid van programma's te verbeteren. Via systemen voor automatisch schalen en load balancers kunnen ontwikkelaars de infrastructuur dynamisch laten groeien of krimpen op basis van het gebruik van hardware of een programmatisch berekende belastingsfactor.
Er zijn meerdere punten waarmee een ontwikkelaar rekening moet houden bij het ontwikkelen of migreren van een toepassing naar de cloud, met name punten op het vlak van prestaties en beveiliging.
Prestatiefactoren voor toepassingen in de cloud
De omgeving in een cloudgericht datacenter wijkt af van wat ontwikkelaars mogelijk gewend zijn bij het ontwerpen en implementeren van toepassingen in een eigen infrastructuur. Sommige ontwikkelaars vinden het lastig om de prestaties van hun toepassingen te verfijnen of te verbeteren omdat ze geen toegang hebben tot de fysieke hardware-indeling of specificaties van openbare clouds. We zullen proberen enkele van de belangrijkste problemen te noemen, met specifieke nadruk op factoren die van invloed zijn op de prestaties van toepassingen in de cloud:
Bandbreedte en latentie van resources
Een belangrijk probleem bij het ontwikkelen en implementeren van cloudtoepassingen is latentie. Ontwikkelaars moeten bij het plannen van hun toepassingen rekening houden met strikte latentievereisten. Dit kan bijvoorbeeld door de distributie van klantlocaties te bepalen. Hierdoor kunnen ontwikkelaars de optimale set locaties van datacenters vinden die kunnen worden gebruikt om de prestaties en reactiesnelheid te optimaliseren voor eindgebruikers. Dit geldt met name voor webtoepassingen, waarbij afzonderlijke HTTP-aanvragen voor statische webinhoud een belangrijke aandeel kunnen vertegenwoordigen van de laadtijd van een webpagina.
Naast latentie kunnen toepassingen ook strikte vereisten ten aanzien van bandbreedte hebben, met name toepassingen die gebruikmaken van rijke multimedia-inhoud zoals audio en video. Bij veel cloudproviders kunnen cloudontwikkelaars tijdens het inrichten prestatieparameters opgeven in de vorm van IOPS-vereisten voor reken- en opslagresources. Daarnaast bieden veel cloudproviders ontwikkelaars de mogelijkheid om virtuele netwerken in te stellen. De implementatie en het gebruik van via software gedefinieerde netwerken en opslag (besproken in latere modules) biedt extra inzichten in nieuwere technieken die worden gebruikt door datacenters om verkeer van meerdere clients te beheren en tegelijkertijd tegemoet te komen aan afzonderlijke vereisten zoals vastgelegd in de SLA van klanten.
De bovenstaande technieken zijn voornamelijk bedoeld voor statische inhoud. Een veel lastiger probleem is het optimaliseren van de latentie van toegang tot gedistribueerde systemen voor gegevensopslag, met name systemen die schrijfbewerkingen en updates moeten afhandelen. Dit probleem zullen we in latere modules nog kort bespreken.
Meerdere tenants
Toepassingen in openbare datacenters worden meestal uitgevoerd in een gedeelde infrastructuur. Dit aspect van cloudservices brengt een aantal belangrijke problemen met zich mee. Hoewel moderne virtualisatietechnologieën een geïsoleerde omgeving kunnen aanbieden voor wat betreft toepassingsomgeving en beveiliging, zijn ze meestal niet in staat om prestatie-isolatie te garanderen. Om die reden kunnen gevirtualiseerde resources in clouds niet voor ieder moment consistente prestaties garanderen. De prestaties van een resource op enig moment is een functie van de totale belasting van de resources vanuit alle tenants. Dit wordt ook wel de interferentie genoemd die wordt ervaren door andere tenants die dezelfde hardware delen.
Sommige cloudproviders, zoals Azure, bieden klanten de mogelijkheid om bepaalde typen resources (zoals VMs) in te richten op toegewezen hardware. Dit biedt bescherming tegen fikse schommelingen in de prestaties van resources, waardoor deze op een redelijk constant niveau presteren. Het is echter wel zo dat toegewezen hardware-exemplaren aanzienlijk hogere kosten met zich meebrengen dan gewone on-demand exemplaren. De reden hiervoor is dat Azure exclusief voor de resources een server moet toewijzen.
Een gerelateerd aspect van meerdere tenants is het probleem van de variatie van inrichting, waarbij identieke aanvragen voor virtuele resources in openbare clouds niet identiek worden toegewezen aan fysieke resources, zodat er een verschil in prestaties ontstaat.1 Zo kunnen twee identieke aanvragen voor virtuele machines (VM1 en VM2) naar twee verschillende fysieke machines (A en B) worden gerouteerd. De fysieke machine A kan vier andere tenants hebben die om resources op dezelfde machine vragen, terwijl dat er bij machine B misschien maar twee zijn. De klant krijgt dezelfde kosten in rekening gebracht voor de virtuele machines VM1 en VM2, maar kan mogelijk een verschillend prestatieniveau ervaren op deze machines.
Beveiligingsinstellingen
Openbare clouds krijgen steeds meer te maken met aanvalsvectoren, zoals we hebben gezien in les 1. Ontwikkelaar moeten zeer zorgvuldig te werk gaan en ervoor zorgen dat ze best practices, protocollen en procedures volgen wanneer ze toepassingen gaan implementeren en onderhouden in de cloud. Hierdoor kan er sprake zijn van prestatieverlies door extra overhead als gevolg van beveiligingsprotocollen die nodig zijn voor openbare clouds.
Aangezien we deze protocollen in een eerdere module hebben besproken, gaan we er nu niet verder op in. Alle code die wordt geïmplementeerd in een openbare cloud moet een strikt proces van handmatige en geautomatiseerde beoordeling en statische analyse van de broncode doorlopen, evenals een analyse van de dynamische kwetsbaarheid en penetratietests. Richtlijnen voor het veilig implementeren van toepassingen vindt u op de volgende pagina.
Verwijzingen
- Rehman, M.S en Sakr, M.F (2010). Eerste bevindingen voor inrichtingsvariatie in Cloud Computing van de 2010 IEEE Second International Conference on Cloud Computing Technology and Science (CloudCom)