Platform as a Service (PaaS) är numera ett etablerat begrepp och tjänsteerbjudande. Men hur skiljer sig Platform as a Service mot andra “..as a Service” och vad gömmer sig egentligen bakom begreppet?

I denna uppdragsberättelse rätar vi ut några av frågetecknen och tar pulsen på dagens tjänsteutbud.

Citerus fick nyligen i uppdrag att utveckla ett system för en kund vars verksamhet inte innefattade någon befintlig IT-lösning. Kunden saknade således en egen driftorganisation och för att slippa investera i något som inte föll inom ramarna för kundens kärnverksamhet fanns ett starkt önskemål att lägga driften i en molntjänst. Utmaningen att hitta en tjänst som kunde tillhandahålla både skalbarhet och rimlig tillgänglighet för ett överkomligt pris fick därför högsta prioritet från projektstart.

För att uppnå båda dessa önskemål fokuserade vi tidigt på den kategori av molntjänster som går under namnet Platform as a Service, PaaS. Dessa tjänster har varit uppmärksammade och omskrivna under en länge tid och erbjuds av ett flertal etablerade leverantörer på marknaden. Förhoppningen var att hitta en leverantör som kunde tillhandahålla de bastjänster vi behövde, så att projektet kunde fokusera på utveckling och support av systemet snarare än på den underliggande infrastrukturen.

Mjukvaran som utvecklas är en Javabaserad webbapplikation. Datalagret består av en dokumentdatabas (MongoDB) och en relationsdatabas (PostgreSQL), samt en meddelandebuss för asynkron meddelandehantering (RabbitMQ). En varken speciellt exotisk eller för den delen trivial utvecklingsstack.

Bland de kvalitetsattribut vi sökte hos molntjänsten fanns till exempel stöd för SSL, en pålitlig driftsättnings- och byggprocess, samt enkelhet i skalning av applikationen. Dessutom skulle tjänsten förstås kännas pålitligt, med bra support och en rimlig servicenivå (Service License Agreement, SLA).

Det finns idag ett ganska stort antal leverantörer på marknaden som säger sig tillhandahålla PaaS-tjänster. För detta uppdrag utvärderade vi under senvintern 2012 följande: Heroku, dotCloud, Cloud Foundry, Google App Engine, CloudBees samt AWS Elastic Beanstalk.

Dessvärre är begreppet PaaS idag stort och inte speciellt väldefinierat. Tjänsterna skiljer sig stort i inriktning och utbud. Vissa satsar på att tillhandahålla ett stort antal tjänster utan att ställa speciellt stora krav på hur applikationen ser ut, medan andra har mycket långt gående definitioner på hur applikationen ska vara uppbyggd och vilka API:er som kan användas. Ytterligare några tillhandahåller en väldigt begränsad tjänst som måste kombineras med ytterligare tjänster från andra leverantörer för annat än mycket enkla applikationer. Värt att notera är att fler och fler molntjänster finns tillgängliga hos leverantörer som specialiserat sig på en specifik produkt, som till exempel MongoDB eller PostgreSQL. Denna typ av leverantörer utvärderades dock inte för detta projekt.

Flera av tjänsterna är mer eller mindre sofistikerade lager som körs ovanpå Amazons EC2, medan andra driftas i egna moln. Att vara en del av EC2 kan innebära både för- och nackdelar; är EC2 redan en integrerad del av den befintliga teknikstacken, och applikationen i fråga har integrationspunkter, kan det sannolikt finnas en poäng i att välja en PaaS som också driftas där.

Det fysiska avståndet till molnettjänsten kan vara problematisk då prestanda påverkas när svarstiderna går upp. Detta ger ytterligare an parameter att ta hänsyn till vid val av tjänst.

Driftsättning och hantering av applikationerna sker typiskt via tjänsternas verktyg som installeras lokalt på utvecklingsdatorn. Många tjänster tillåter, utöver att driftsätta en färdig artefakt (i vårt fall en WAR-fil), även att man trycker sitt Git- eller Mercurial-arkiv till tjänsten. Det senare kan vara en fördel om man redan jobbar i någon av dessa versionshanteringssystem då det typiskt är en mindre mängd data som behöver skickas upp för varje driftsättning.

PaaS-marknaden är inte att betrakta som lika mogen som de Infrastructure as a Service-lösningar (IaaS) som idag är väletablerade. Flertalet tjänster är lanserade i betastadie och om det finns något SLA är detta ofta begränsat eller har en oklar kostnadsstruktur. Det här är också en marknad som är under konsolidering, där etablerade bolag som Salesforce.com (Heroku) och VMware (Cloud Foundry/Spring Source) köper mindre spelare för att få tillgång till den växande marknaden, samtidigt som Google och Amazon bygger egna lösningar.

Givet hur pass omogen marknaden är prioriterade vi lösningar som lät oss bygga en, så långt som möjligt, portabel applikation. Förhoppningen är att vid behov kunna byta PaaS-leverantör med en relativt begränsad arbetsinsats. Denna ambition medförde att vissa väl restriktiva molntjänster fick väljas bort till förmån för mer öppna alternativ och fick även konsekvenser för teknikstacken, då till exempel valet av relationsdatabas (PostgreSQL) och meddelandebuss (RabbitMQ) delvis motiverades med deras tillgänglighet i olika molntjänster.

Dagens PaaS-tjänster är avsevärt mindre mogna än vad man kanske förväntar sig. Marknaden är under omstrukturering och sannolikt kommer vi se en hel del förändringar framöver; nya spelare kommer in, existerande läggs ner eller blir uppköpta av andra aktörer. Många aktörer finansieras av riskkapital och försöker fortfarande etablera fungerande affärsmodeller. Detta får konsekvenser både för val av leverantör och för hur vi bygger de system vi avser köra i en PaaS-tjänst.

Många frågor kvarstår; sannolikt är dock att en PaaS-tjänst kan reducera eller ta bort många av de vanliga utmaningarna kring infrastruktur och drift av system. Dessvärre är det nog  fortfarande en bit kvar innan det går så smidigt att köra sin applikation i molnet som dagens PaaS-leverantörer vill påskina.

Heroku – www.heroku.com

Heroku är kanske den mest kända PaaS-tjänsten till dags dato, och en av de mest mogna. Heroku hade initialt fokus på Ruby men har nu stöd även för andra språk så som Python, Java, Clojure, Scala och Node.js. Som utvecklare driftsätter man sitt system genom att trycka sitt Git-arkiv till tjänsten. Heroku har stöd för ett stort antal databaser och andra infrastrukturtjänster via så kallade add-ons. Heroku är ett dotterbolag till Salesforce.com

DotCloud – www.dotcloud.com

DotCloud tillhandahåller ett stort antal tjänster på Amazon EC2 (region US East), med stöd för ett flertal olika språk, inklusive Java. DotCloud är i produktionsdrift med både en enklare gratisversion och mer omfattande betaltjänster. Driftsättning sker via deras dotcloud CLI genom att ladda upp färdigbyggda artefakter eller genom att trycka Git- eller Mercurial-arkiv till tjänsten. Det går att nå de installerade tjänsterna, så som MongoDB och PostgreSQL, direkt över internet, även begränsad SSH-access tillhandahålls. Värt att notera är att betalningsmodellen är under omarbetning i syfte att närmare koppla kostnad till resursutnyttjande.

Cloud Foundry – www.cloudfoundry.com

Cloud Foundry är en PaaS som funnits under utveckling en längre tid. Cloud Foundry blev en del av Spring Source som senare köptes av VMware. Stöd finns för ett flertal språk, ramverk och tjänster, så som Java och Spring, Ruby on Rails och Sinatra, Grails, Scala och Lift. Tjänsten är i kostnadsfri betaversion utan SLA och utan någon indikation på framtida prissättning. Enligt uppgift är planen att lämna beta under 2012 och kommunicera prissättning i samband med detta. Cloud Foundry består av två delar, dels själva plattformen som är öppen källkod, cloudfoundry.org, dels en publik instans av plattformen som tillhandahålls av VMware.

Google App Engine – developers.google.com/appengine

App Engine är Googles PaaS-tjänst som initialt släpptes för Python men som sedan en tid även finns för Java. App Engine körs på Googles infrastruktur och innehåller ett antal fördefinierade tjänster så som autenticering via Google Accounts, datalagring i High Replication Datastore etc. Tjänsten ställer ganska långtgående krav på hur man utformar sin applikation och endast av Google fördefinierade API:er och tredjepartskomponenter är tillgängliga.

AWS Elastic Beanstalk – aws.amazon.com/elasticbeanstalk

Elastic Beanstalk är en tjänst från Amazon som sorterar under AWS. Det är en av de enklare tjänsterna och det som tillhandahålls är i praktiken en skalbar JVM-infrastruktur. Önskas andra tjänster, så som databaser, får man använda andra Amazon-tjänster eller köra dessa på egen hand via EC2.

CloudBees – www.cloudbees.com

CloudBees är en Java-orienterad molntjänst som när den först lanserades fokuserade på tjänster som versionshantering och kontinuerlig integration via Hudson/Jenkins. Den har nu kompletterats med stöd även för att köra de applikationer som byggs. Tanken här är att tillhandahålla en komplett tjänst för Application Lifecycle Managment, ALM, från utveckling till drift.