Inleiding
In een eerder artikel over cloud computing constateerden we al dat een klein bedrijfje met alleen kantoorwerkers of een startup eenvoudig de overstap naar de cloud kan maken. Voor grotere of complexere ondernemingen zijn er echter een heleboel overwegingen en randvoorwaarden aan een migratie verbonden.
Overstappen naar de cloud blijkt dan geen technische maar vooral een bedrijfsmatige aangelegenheid. Daarom zijn het ook vaak managers die het initiatief nemen. Grote leveranciers en analistenbureaus verkondigen immers al meer dan een jaar dat de cloud gemakkelijker en goedkoper is. Dikke kans dus dat de baas een dezer dagen aan je vraagt of je bestaande of nieuwe applicaties in een cloud wil stoppen.
Met Amazon EC2, Google Apps Engine en Microsoft Azure zijn de drie belangrijkste cloud-platforms van dit moment genoemd. Amazon bespraken we eerder en Azure komt in een volgend verhaal aan bod; in dit artikel gaan we in op de omgeving en op de mogelijkheden en onmogelijkheden die Google zijn cloudgebruikers biedt.

Kanttekening: Enkele uren voor publicatie van dit artikel heeft Google bekendgemaakt een nieuwe versie van App Engine te hebben vrijgegeven, die onder andere nieuwe mogelijkheden aan de cloudomgeving toevoegt. Deze nieuwe mogelijkheden worden in dit artikel niet of niet uitgebreid besproken.
Python en Java
De platforms van Google en Microsoft vallen onder het Platform-as-a-Service-model. Dat betekent dat zij een complete omgeving voor ontwikkeling, deployment en beheer van applicaties bieden. Daarmee richten zij zich met name op programmeurs. Amazon daarentegen biedt zijn resources op het niveau van virtuele machines aan, wat we Infrastructure-as-a-Service noemen. Amazons EC2 is dan ook vooral gericht op systeem- en applicatiebeheerders. Het onderscheid tussen de twee modellen is belangrijk omdat alleen IaaS leveranciersonafhankelijk is.
Gebruikers van de Google App Engine hosten hun toepassingen op de infrastructuur van Google, waarna gebruikers die via het internet kunnen benaderen. Het gaat dus met name om webapplicaties. De dienst is inmiddels drie jaar oud; vorig jaar introduceerde Google de zakelijke variant. De prijs is gebaseerd op de benodigde verwerkingskracht, data-opslag en netwerkverkeer.
Python
Het programmeren voor de GAE gebeurt normaliter in Python, momenteel in versie 2.5.2. Een aardig weetje is wellicht dat Python bij het Nederlandse Centrum Wiskunde & Informatica door Guido van Rossum is ontwikkeld. Daarna is Python met name bij Google heel populair geworden. Van Rossum werkt daar nu ook.
De GAE Software Development Kit voor Python en de bijbehorende plug-in voor Eclipse kunnen van de Google-site worden gehaald. Deze downloads bevatten alle tools voor ontwikkeling en deployment voor de Google-cloud.
WSGI
Ook andere ontwikkelraamwerken kunnen in combinatie met GAE worden gebruikt, zolang ze maar gebruik maken van de Web Server Gateway Interface. Dat is een interface waarmee Python-programma's informatie kunnen uitwisselen met webserver en framework.
Het concept is niet wezenlijk anders dan de manier waarop web-applicaties via (Fast)CGI of een Apache-module worden aangeroepen. PHP- en Perl-programmeurs zullen het systeem direct herkennen: ook in die talen wordt met de aanroep informatie voor web-applicaties beschikbaar gemaakt. Daarnaast zijn er functies voor specifieke web-functionaliteit.
In PHP heb je bijvoorbeeld de voorgedefinieerde server- en request-arrays, waarin respectievelijk server- en aanroepinformatie, en get-, post- en cookie-variabelen zijn opgeslagen. Daarnaast is er een functie om http-headers aan een pagina mee te geven.
Apache, 's werelds meest gebruikte web server, ondersteunt webserver-gateways via de mod_wsgi-module. Met de GAE-sdk wordt Webapp meegeleverd: een eenvoudig framework voor Python. Ook Django, Flask, Pylons, TurboGears, web2py of Zope kunnen echter gebruikt worden.
Java
Sinds 2009 wordt naast Python ook Java door GAE ondersteund. Net als voor Python is er een plug-in voor Eclipse. Daarnaast kun je Googles eigen Web Toolkit voor Java gebruiken. Je kunt echter ook in andere talen programmeren waarvoor een Java Virtual Machine - of beter gezegd: een bytecode-compiler of -interpreter - beschikbaar is, zoals Groovy, JavaScript, Ruby of Scala.
De Java-applicatie heeft de vorm van een servlet, maar je kunt ook Java Server Pages gebruiken. Dat is een andere manier om web-pagina's te genereren, vergelijkbaar met PHP, WSGI en ASP.NET.
Bij het schrijven van de Java-applicaties kan onder andere gebruik worden gemaakt van Struts, een webapplication-framework voor Java Servlets dat onderdeel van de Apache-softwaresuite is. Een mogelijk alternatief is Spring, dat een mvc-framework voor Servlets bevat.
Sinds versie 1.5.0 van App Engine de software ook experimentele ondersteuning voor de Go-programmeertaal, die door Google zelf is ontwikkeld. De programmeertaal zou in ontwikkeling zijn genomen omdat Google-ontwikkelaars tot hun ontevredenheid zouden hebben vastgesteld dat het schrijven van software de afgelopen tien jaar steeds complexer is geworden. Go is door Google-programmeurs intern ontwikkeld, waarbij het werk al in 2005 begon en in een later stadium het project een ontwikkelteam kreeg toegewezen.
Helaas!
De video die je probeert te bekijken is niet langer beschikbaar op Tweakers.net.
Bibliotheken en api's
Software-bibliotheken
De GAE-omgeving bevat een aantal propriëtaire softwarelibrary's. Sommige van deze api's bieden functionaliteit die specifiek voor Google is, andere worden door Google gebruikt om zijn diensten in rekening te kunnen brengen. Een aantal Java- en Python-bibliotheken zijn door Google op een rijtje gezet, maar deze overzichten zijn bepaald niet uitputtend.
Meer API's
Zo is er de Datastore-api om gegevens op te slaan, maar de store is niet georganiseerd als een relationele database: het systeem is gebaseerd op Googles interne BigTable-formaat. Naast de api is er ook een sql-variant voor Python, die natuurlijk Google Query Language heet.
BigTable is geoptimaliseerd voor horizontale schaalbaarheid. Dat wil zeggen dat de prestaties en de capaciteit van het systeem kunnen worden uitgebreid door er simpelweg meer, relatief kleine computers parallel naast te zetten. Net als bij relationele databases spreekt men bij dergelijke systemen wel van gestructureerde opslag, maar omdat slechts een beperkte instructieset beschikbaar is - zo zijn er bijvoorbeeld geen table joins mogelijk - wordt de taal ook wel NoSQL genoemd. Er is ook een high-availability versie van BigTable beschikbaar, maar de kosten daarvan zijn drie maal zo hoog.
Andere, meer beheersmatige api's zijn bijvoorbeeld Capabilities, voor het opvragen van informatie over uitval en gepland onderhoud, en Multitenancy, om aparte namespaces voor verschillende gebruikers te creëren. Dat is met name nuttig voor SaaS-applicaties met meerdere klanten in dezelfde omgeving. Verder zijn er de Channel-api, waarmee bijvoorbeeld in games of chatapplicaties informatie van de server naar de clients kan worden gepusht, en OAuth, waarmee externe applicaties toegang kunnen krijgen, zoals bij Twitter, LinkedIn en Facebook.
Dan is er nog Prospective Search. Deze experimentele Python-api is nu nog gratis, maar gaat te zijner tijd geld kosten; met deze tool kan een abonnement op een search query worden genomen, zodat je alerts kunt versturen naar mensen met een specifieke zoek- of filteropdracht.
De Appstats-api geeft toegang tot prestatie-informatie en statistieken. De Remote-api geeft vanuit elke Java-applicatie toegang tot de Google-functionaliteit. Hiermee kunnen deze diensten ook met lokale toepassingen worden gebruikt.
Met versie 1.4.3 van GAE is ook een testomgeving voor Python beschikbaar gekomen, waarmee applicaties buiten de App Engine-omgeving kunnen worden getest. Dit platform, dat naast het Java Testing Framework beschikbaar is, ondersteunt lokale en platformonafhankelijke tests. Daarbij wordt het principe van unit testing gevolgd, waarbij functies ieder op lokaal niveau worden getest. Pas daarna worden op een hoger niveau integratietests uitgevoerd. Zo houdt men het testen van complexe en gedistribueerde software beheersbaar.
Sinds versie 1.5.0 kan bovendien de prediction-api, waarmee processen patronen kunnen herkennen en op basis daarvan beslissingen kunnen nemen, door iedereen worden gebruikt. Tot nu toe was deze invite-only. Met deze api kunnen bijvoorbeeld spam-mails worden herkend, of kunnen de interesses van een gebruiker in kaart worden gebracht. Onbeperkt gebruik van de prediction-api kost 10 dollar per project per maand. Bij meer dan 10.000 voorspellingen per maand moet bovendien 50 dollarcent per 1000 voorspellingen worden betaald.
Ook voegt 1.5.0 support toe voor langlopende processen. Meer hierover staat op de volgende pagina.
Beperkingen en prijsmodel
Beperkingen
Hoewel zo veel mogelijk standaard-api's voor programmeurs beschikbaar zijn gemaakt, zijn er wel beperkingen aan de GAE-omgeving. Je hebt geen lokale opslag of netwerkverbindingen tot je beschikking: alleen Googles propriëtaire services kunnen gebruikt worden. Dat betekent dat je een foutmelding krijgt zodra je een file of een socket probeert te openen. Hetzelfde geldt voor subprocessen en threads.
Ook native code wordt niet ondersteund. Verder moet een programma, of het nu gaat om een web request, een cronjob of een batch, binnen dertig seconden zijn respons genereren. Ten slotte is er wel een Python-api voor bulk-uploads en -downloads, maar niet voor Java.
Voor mail, http-requests en datastorage kun je in plaats van de Google-aanroepen ook Java's eigen functies gebruiken. Zo worden Java Data Objects en persistente objecten automatisch afgehandeld door de Google-library's. Hiermee kan code zo generiek en onafhankelijk worden gehouden. Maar als je de Google-specifieke aanroepen gebruikt - en voor de meeste api's kan dat niet anders - dan is de code niet portable meer..
Prijsmodel
Het betaalmodel is behoorlijk ingewikkeld. Er zijn maxima voor opslag, inkomend en uitgaand dataverkeer, e-mailberichten en processorbelasting. Volgens Google zou je ongeveer vijf miljoen pagina's per maand gratis moeten kunnen serveren.
Bij een serieuze website zul je hoe dan ook moeten betalen. Afrekenen doe je via Googles betaaldienst Checkout. Je kunt wel dagelijkse quota instellen, zowel voor je budget als voor de resources die je applicatie krijgt toegewezen.
Sinds versie 1.5.0 moeten gebruikers die meer dan 24 instance-hours per dag willen consumeren of meer dan 1 gigabyte data heen en weer willen schuiven, niet alleen op basis van gebruik betalen, maar zullen zij ook een startbedrag van 9 dollar per platform moeten neerleggen. Daar krijgen ze dan wel een sla met een uptimegarantie van 99.95 procent voor terug.
Kosten Google App Engine |
Uitgaand dataverkeer |
0,12 dollar per GB |
Ingaand dataverkeer |
0,10 dollar per GB |
Processor |
0,10 dollar per uur |
Data-opslag |
0,15 dollar per GB per maand |
Gerepliceerde data-opslag |
0,45 dollar per GB per maand |
Mail |
0,0001 dollar per adres |
Always-on |
0,30 dollar per dag |
Het is maar de vraag of deze tabel je helpt bij het bepalen van je kosten. Vanwege de complexiteit van het betaalmodel is het lastig tevoren uit te rekenen wat je elke maand kwijt bent. Het beperken van je dagelijkse uitgaven is ook geen optie. Dat zou bijvoorbeeld kunnen betekenen dat bezoekers na drie uur 's middags niet meer bediend worden.
Tweakers-expert Paul van Assen wijst erop dat deze situatie niet noodzakelijk slechter is dan wanneer je je eigen systemen koopt. De dimensionering daarvan is vaak ook een gok. Voordeel van de cloud is dat je nu niet vastzit aan overcapaciteit, terwijl capaciteitstekorten razendsnel opgelost kunnen worden. Meerdere experts uit ons panel stellen echter dat als je veel volume hebt, het goedkoper is om je eigen hardware te kopen.
Overigens heeft Google sinds versie 1.5.0 van zijn App Engine ook een zogenoemd Backends-component. Volgens Google zou dit ideaal zijn voor ontwikkelaars die een grotere, langdurige of geheugenintensieve infrastructuur willen opzetten. Voorheen draaiden GAE-applicaties op kortlevende dynamische instances, maar daar kleefden voor sommige ontwikkelaars nadelen aan. Backends zijn langlevende door een ontwikkelaar beheerde en benaderbare sets van instances. Deze nieuwe mogelijkheid kent geen beperkingen qua aantallen requests en kunnen tussen de 128MB en 1GB aan geheugen gebruiken. Voor deze Backends, die er in vier gradaties zijn, moet per instance per uur worden afgerekend.
Applicatiebeheer
Behalve dat je alleen betaalt voor je daadwerkelijke verbruik, is ook gemak een belangrijke reden om softwaretoepassingen in een cloudsysteem onder te brengen. Omdat je applicaties bij Google draaien, hoef je zelf geen eigen servers meer te onderhouden, uitrollen is een kwestie van uploaden en om op te schalen hoef je alleen meer processorkracht te bestellen.
De Administration Console is een web-interface om maximaal tien applicaties te installeren, om instances te starten en om de datastore te configureren. Applicaties kunnen vervolgens aan een domeinnaam worden gekoppeld of als subdomein onder appspot.com worden gedraaid. Statistieken over de prestaties van het systeem vind je in het System Status Dashboard.
Wat vinden onze panelexperts?
Tweakers-panelexpert Wouter Westendorp ziet de Datastore als de grootste sta-in-de-weg voor portabiliteit. Dat betekent dat cloud-ontwikkelaars de schaalbaarheid van de opslag en de onafhankelijkheid van het platform tegen elkaar moeten afwegen. In ieder geval wordt aangeraden eigen wrappers te schrijven, zodat je de storage op zijn minst binnen de applicatie kunt abstraheren. Peter Smit is dan weer erg te spreken over de wrappers die Google zelf al voor zijn propriëtaire library's heeft gemaakt. Volgens hem zijn er ook goede oplossingen voor de Datastore. Daarnaast heeft Google aangegeven dat er aan MySQL-ondersteuning wordt gewerkt.
De meeste experts zouden geen applicaties in een andere taal herschrijven als dat alleen is om ze op een cloudplatform te kunnen laten draaien. De panelexperts vinden het alleen zinvol om te onderzoeken of bestaande Java- en Python-applicaties naar GAE kunnen worden overgezet. Met name het snelle schalen zou dan een belangrijk argument kunnen zijn.
Volgens Tweakers.net-developer ACM staat de complexiteit van applicaties een eventuele migratie in de weg. Hij vindt de Google-omgeving te star. Paul van Assen wijst er op dat de cloud-infrastructuur een hele andere manier van denken van de programmeur vraagt: veel werk moet parallel en asynchroon gebeuren. Volgens Peter Smit is dat een veel groter obstakel bij migraties dan de platformafhankelijke library's.
Google werkt op dit moment aan de ondersteuning van andere talen. PHP is dan een voor de hand liggende kandidaat. Maar deze taal speelt volgens Van Assen geen rol in enterprise-architecturen. Ook Westendorp heeft geen hoge pet van PHP op, en Java noemt hij zelfs al legacy-software. Zijn voorkeur gaat uit naar Python met Django, wat volgens hem 'een kwaliteitsframework met een professionele, stabiele en levendige community die voorziet in de ontwikkeling van het framework en gedegen extensies' is. Hans van den Bogert vindt echter ook Python nog niet volwassen genoeg voor zakelijke toepassingen.
PHP-programmeurs zijn volgens ACM makkelijker te vinden dan die voor Python en Java. Westendorp denkt weer dat de overstap van PHP naar Python -'een mix van PHP en JavaScript' - goed te doen is. Zij zijn immers al bekend met html, css, JavaScript, sql en xml. Tom van der Woerdt ziet de populariteit van Python dan ook snel toenemen. Hij schreef tot voor kort in PHP en doet nu alles in Python, in combinatie met een framework. Volgens hem is de overstap in een of twee weken te maken.
Conclusie
Met App Engine biedt Google een cloudomgeving die vooral programmeurs en techneuten zal aanspreken. De keuze voor een overstap is echter vooral een zakelijke aangelegenheid. Dat betekent dat een afweging op kosten en baten moet kunnen worden gemaakt. Googles prijsmodel maakt dat niet gemakkelijk.
Speciaal voor zakelijke gebruikers is er GAE for Business. Daarmee richt Google zich op aspecten als betrouwbaarheid, beschikbaarheid, continuïteit, schaalbaarheid en veiligheid. Zo kan de toegang tot applicaties worden afgeschermd met access control lists, bijvoorbeeld om het gebruik van een toepassing te beperken tot het intranet. Ook kunnen koppelingen met externe databases worden gemaakt en kunnen ssl-verbindingen naar de eigen infrastructuur worden gelegd. De SLA van GAE for Business belooft een beschikbaarheid van 99,9 procent.
GAE for Business gaat uit van het klassieke SaaS-prijsmodel. Google vraagt acht dollar per gebruiker, met een maximum van duizend dollar per maand. Maar deze prijs geldt alleen voor een intranet; de kosten voor openbare toepassingen zijn nog niet bekend. Deze dienst bevindt zich op dit moment dan ook nog in het preview-stadium.
Een laatste aandachtspunt blijft dat een bedrijf zich met de keuze voor het GAE-platform afhankelijk van de leverancier maakt. Zodra de Google-api's worden gebruikt, kunnen applicaties niet meer zomaar ergens anders worden gehost. Een belangrijke vraag is dan ook of het gemak van de cloudomgeving opweegt tegen de nadelen van vendor lock-in. Anders gezegd: wat bieden Java en Python op GAE dat je niet relatief eenvoudig zelf op kunt zetten?