Windows Azure – operativsystem i molnet

Windows Azure betraktas enklast som ett operativsystem som körs i ”molnet” men även det påståendet kan behöva en förklaring. Vad vi menar med ett operativsystem i det här avseendet är egentligen en exekveringsmiljö för applikationer och tjänster som bidrar med det mest rudimentära vi kan tänkas oss behöva i våra kommande projekt och lösningar. Till exempel ett delat filsystem, schemaläggning av processer, monitorering av applikationers hälsa, lastbalansering och tillgänglighetstjänster samt en hel del mer som vi vanligtvis antingen får bygga själva i vår applikation eller använda ett underliggande ramverk (som ofta ingår i operativsystem) för. Med modeordet molnet så avses helt enkelt två saker:

1. En plattform att installera och exekvera tjänster i

2. En plattform för lagring och hämtning av data

Windows Azure är alltså en plattform för att installera och sedan automatiskt både exekvera och hantera tjänster med sin bakomliggande data för att vi som utvecklare ska få möjligheten att lägga så mycket tid som möjligt på att lösa de problem som vår verksamhet kräver att vi löser istället för att fokusera på detaljer i operativsystemet.

Azure Platform Windows Azure kan också ses från ett annat perspektiv och det är med dess fyra primära funktionsområden som jag tänkte fortsätta den här artikeln.

1. Automatisk hantering av tjänster

2. En plattform för exekvering och beräkning

3. Lagring och hämtning av data

4. En rik utvecklarmiljö

Automatisk hantering av tjänster

Med hjälp av Windows Azure kommer du som utvecklar lösningar att skapa tjänster som utför den logik som din applikation och lösning består utav. Dessa tjänster beskrivs sedan också med regler för exempelvis hur många instanser av denna tjänst som behövs för att se till att dina kunder och användare har tillgång till lösningen. Reglerna kan också innefatta metadata om vad som känneteckar att din tjänst mår bra, eller om det behövs ytterligare instanser på grund av hög last eller felaktigheter i lösningen. Baserat på detta regelverk som beskrivs med deklarativa språk som exempelvis XML kan sedan Windows Azure driftsätta dina tjänster i molnet och erbjuda en automatisk hantering och övervakning utan att du har någon egen dedikerad IT-drift. Faktum är också att även en ”råare”drift av tjänster kommer att erbjudas på Windows Azure genom att låta utvecklare ladda upp en egen virtuell hårddisk, anpassad för Hyper-V.. I det falletkan inte automatisk hantering och övervakning erbjudas i samma utsträckning som tidigare nämnts.

En plattform för exekvering och beräkning

På eller i Windows Azure kan du bygga lösningar som exponerar publika gränssnitt antingen som webbapplikationer eller som rena tjänster och låta din lösningar kommunicera med dessa. Arkitekturen möjliggör också att det går att skapa bakomliggande tjänster som asynkront utför tunga eller långa beräkningar, anropar andra tjänster eller processerar mycket data, utan att lösningens upplevelse externt påverkas. Det gäller visserligen att lära sig att utveckla lösningar asynkront, med hjälp av exempelvis köer, men det är ingenting som skiljer sig markant från hur vi behöver förändra vårt beteende även när vi utvecklar lokala applikationer. Även för lokala applikationerhar hårdvara med flera processorer och kärnor utvecklats så pass mycket att parallella uppgifter är något som varje utvecklare måste lära sig skapa och planera för.

Lagring och hämtning av data

De flesta applikationer och lösningar består av data som måste flyttas fram och tillbaka mellan tjänster och klienter. Därför är det kanske inte någon överraskning att även Windows Azure bidrar med en plattform för att just se till att data kan hanteras i molnet. Däremot så ska datatjänsterna i Azure inget jämföras med någon relationsdatabas, stöd för det finns istället i SQL Services som jag tar upp nedan. Istället ska vi se datatjänsterna i Windows Azure som en lokal datalagring för att se till att våra tjänster kan agera asynkront och alltid vara tillgänliga. I tjänsterna finns stöd för lagring av blobar (t.ex. bilder eller filer), tabeller för metadata och även köer för kommunikation mellan olika tjänster och roller inne i tjänster. I framtiden är det också tänkt att denna plattform ska innefatta filströmmar (file-streams), cache och lås. Ambitionen är också att ge utvecklaren möjligheten att specificera vart i världen som den primära användningen av data kommer att ske, vilket kan resultera i att datats fysiska lagring sker på servrar nära den geografiska regionen för att förbättra exempelvis svarstider.

Azure Application Architecture

Denna bild visar på en rekommenderad arkitektur för tjänster byggda på Windows Azure med den vita ramen som en gräns för vart vår tjänst börjar och slutar. Innnför tjänsten tas anrop emot av en lastbalanserare som vidarebefordrar alla anrop till en av de aktiva “web role”-instanserna som i sin tur bestämmer vad som ska göras med anropet, eventuellt lagrar data lokalt i den underliggande dataplattformen och via kö-strukturen annonserar för de bakomliggande “worker-role”-instanserna att det finns jobba att göra på det lokala datat. Både “web-roles” och “worker-roles” kan i sin tur också göra anrop mot externa tjänster, men det är bara “web-role”-instanserna som kan bli anropade utifrån. Med vissa API’er kan vi också får direkt åtkomst till lagringsstrukturerna.

En rik utvecklarmiljö

Initiellt så erbjuder Windows Azure en hanterad miljö med .NET Framework vilket möjliggör utveckling av lösningar med vilket .NET språk som helst och då kanske helst ASP.NET baserade tjänster- och webblösningar. Men ambitionen och visionen är att erbjuda en öppen plattform för att på så sätt möjliggöra att ytterligare arkitekturer och språk ska kunna exekvera på Windows Azure. Java, Ruby, Python och PHP är bara några av de tekniker som planeras att stödjas framöver. Visual Studio är idag den plattform som har starkast integration av utvecklarverktygen och plattformen, men tack vare att SDK:t till Windows Azure är kommando-baserat så finns det också exempel på Eclipse-tillägg som gör att även utvecklare som idag inte sitter med Visual Studio kan prova att bygga sina lösningar i molnet. Kommunikationen med plattformen Windows Azure kan också ske med plattformsobereoende protokoll som SOAP och REST vilket även det möjliggör interoperabilitet och flexibla lösningar.