Introduksjon til Cloudfoundry


vmware lanserte Cloudfoundry beta i april 2011. Cloudfoundry er en open source PaaS (platform as a service) som gjør det enkelt å utnytte skyen for både interne og eksterne applikasjoner. I denne bloggposten vil jeg gå gjennom hva Cloudfoundry er og til slutt vil vi deploye en Sinatra-applikasjon til skyen.


Konkurrenter

Google App Engine var en av de første PaaS-leverandørene. Java-applikasjoner som kjører der er kraftig begrenset: Man kan kun bruke Google BigTable, man kan ikke kjøre egne tråder, man kan ikke har requests som varer lenger enn 30s, man har et subsett av java-api-et tilgjengelig etc.. Det er mange gode grunner for disse begrensningene, men ikke dermed sagt at det er noe hyggelig å jobbe med.

I  juni 2010 lanserte Amazon sin Beanstalk tjeneste. Tanken her var at det skulle være like enkelt som App Engine, men uten noen av begrensningene. Beanstalk har fått masse oppmerksomhet og fungerer helt strålende for java-war-applikasjoner. Applikasjonene kjører i tomcat og kan benytte Amazon SimpleDB, Microsoft SQL Server eller Oracle. Rammeverket håndterer som forventet alt av skalering og monitorering.

April 2011 gikk så vmware hen og lanserte Cloudfoundry. Cloudfoundry er basert på helt andre tanker enn sine to konkurrenter. Først og fremst er cloudfoundry åpen kildekode under Apache 2-lisens. Dette åpner for helt andre muligheter. Plutselig kan man kjøre samme cloud-software lokalt på sin laptop som man kjører hosted på cloudfoundry.com. Det har også dukket opp firmaer som tilbyr cloudfoundry på Amazon sin IaaS (Amazon EC2), bl.a. RightScale. Et annet element som skiller Cloudfoundry fra Beanstalk er administrasjonsapplikasjonen vmc. Blant annet er deployment utrolig raskt og enkelt iom at applikasjonen kun laster opp endringer. Kontroll på instanser er latterlig enkelt, og bruk av applikasjonstjenester er plug and play.

Filosofi

Som Rod Johnson forteller i webinaret så er mye av filosofien bak cloudfoundry den samme som for Spring Framework. Det skal være enkelt å utføre avanserte oppgaver, man skal ikke bli låst til en leverandør og man skal bli mer produktiv. Det ser ut som de er på vei mot å oppfylle disse målene, men det er fortsatt et stykke igjen.

Rammeverk

Cloudfoundry støtter en imponerende mengde rammeverk. Selvsagt støtter de Java og Spring Framework, men de støtter også Rails, Sinatra, Grails, Node.js, Lift og Scala med Spring. Foreløpig har jeg kun testet Node.js og Sinatra implementasjonene og de fungerte som en drøm forventet.

Applikasjonstjenester

På nåværende tidspunkt kan man velge mellom tre databaser: MySql, MongoDB og Redis. Foreløpig har jeg kun testet med MongoDB, men det fungerer strålende. Det var utrolig enkelt å bytte mellom å kjøre applikasjonen lokalt med lokal MongoDB for så å flytte applikasjonen til Cloudfoundry.

Hvordan deploye

Registrer deg som interessert på cloudfoundry.com. Etter et par dager bør du få tilsendt brukernavn og passord til tjenesten. I mellomtiden kan du installere administrasjonsverktøyet. Verktøyet krever Ruby 1.8 og Rubygems >= 1.72.

mac:~ olemartin $ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
mac:~ olemartin $ gem -v
1.8.5

For å være sikker på at man har siste versjon av rubygems kan man gjøre følgende:

mac:~ olemartin $ sudo gem update --system
Latest version currently installed. Aborting.

Installer vmc:

mac:~ olemartin $ sudo gem install vmc
Successfully installed vmc-0.3.10
1 gem installed
Installing ri documentation for vmc-0.3.10...
Installing RDoc documentation for vmc-0.3.10...

Før du får gjort noe som helst så må du logge inn:

mac:~ olemartin $ vmc login
Email: xxxxxxxx@bekk.no
Password: **********
Successfully logged into [http://api.cloudfoundry.com]

Applikasjonen vi skal deploye er en veldig enkel Sinatra-applikasjon:

require 'rubygems'
require 'sinatra'

get '/' do
"Hello Bekk Open reader!"
end

Vi lagrer dette i filen app.rb og prøver å pushe den til cloudfoundry

mac:~ olemartin $ vmc push
Would you like to deploy from the current directory? [Yn]:
Application Name: hellobekkopen
Application Deployed URL: 'hellobekkopen.cloudfoundry.com'?
Detected a Sinatra Application, is this correct? [Yn]:
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M or 1G) 64M
Creating Application: OK
Would you like to bind any services to 'hellobekkopen'? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

“Drumroll”, og vi har en applikasjon kjørende hos cloudfoundry. Ta en titt på hellobekkopen.cloudfoundry.com for å se en fantastiske applikasjonen :-) Hvis lasten blir for høy så kan jeg øke antall instanser applikasjonen kjører på ved en enkel vmc instances hellobekkopen +10.

Jeg har også lagt opp en litt mer avansert applikasjon som benytter Node.js og MongoDB på taxireceipt.cloudfoundry.com. Koden til denne applikasjonen ligger på GitHub.

Oppsummering

I forbindelse med lansering arrangerte vmware et webinar. Opptaket kan man se på vmwares youtube-kanal. I tillegg kan man gjerne følge med på #cfoundry og @cloudfoundry på twitter. Til slutt så er det verdt å merke seg at cloudfoundry er i beta, og jeg anbefaler ingen å kjøre kritisk kode på rammeverket for øyeblikket.

Last ned kildekode og delta i diskusjonene på cloudfoundry.org.