# Windows Azure (besturingssysteem)

Windows Azure is het besturingssysteem van Azure Services Platform, het cloudplatform van Microsoft. Het is verantwoordelijk voor de uitvoering van applicaties en de opslag van data voor die applicaties.

## Uitvoeren van applicaties

De applicaties in Windows Azure worden uitgevoerd in de vorm van zogenaamde 'instances'. De instances draaien in de vorm van virtuele machines (VM's) op 64-bit Windows Server 2008. Microsoft heeft een speciale hypervisor ontwikkeld voor het uitvoeren van VM's in de cloud. Voor de developer zijn die VM's echter onzichtbaar, hij schrijft zijn applicaties in de vorm van "Web role" en "Worker role instances". Web role instances zijn verantwoordelijk voor de verbinding met de buitenwereld. Daarvoor wordt op de VM's die Web role instances uitvoeren IIS gedraaid en verbinding toegestaan via het HTTP- of HTTPS-protocol. Een load balancer zorgt ervoor dat de binnenkomende verbindingen gelijkmatig worden verdeeld over het beschikbare aantal instances.
De functie van Worker role instances is zoals de naam suggereert de eigenlijke uitvoering van de applicaties. Worker role instances aanvaarden geen inkomende verbindingen en houden zich enkel bezig met berekeningen. De input voor een Worker role komt uit een message queue in de dataopslag (storage) van Windows Azure. Die input kan komen van een Web role instance of een externe applicatie binnen het bedrijf van de gebruiker. De Worker role instance stuurt zijn output ofwel naar een andere message queue, ofwel naar de buitenwereld (uitgaande verbindingen worden wel toegestaan).
Binnen elke VM van Windows Azure draait ook een zogenaamde 'agent', die zorgt voor de interactie tussen de instances en het Windows Azure-besturingssysteem. De agent zorgt voor een API die de instances toestaat om Windows Azure-logboeken en foutmeldingen te schrijven. Elke VM in Windows Azure krijgt een eigen processor toegewezen, waardoor de optimale werking van elke applicatie gegarandeerd is. Windows Azure houdt rekening met de vraag naar een bepaalde applicatie. Het aantal instances dat actief is kan worden aangepast naargelang de vraag naar de applicaties en wanneer een instance stopt met werken wordt die onmiddellijk vervangen door een nieuwe.
Developers kunnen vanaf Microsoft Visual Studio 2008 van templates gebruikmaken voor het maken van Web en Worker role instances. Voorlopig wordt vooral van C# gebruikgemaakt, maar in principe kan elke Windows-programmeertaal worden gebruikt om cloudapplicaties te schrijven. Microsoft biedt ook een Windows Azure SDK aan, waardoor de gebruiker een Azure cloudomgeving kan simuleren op zijn eigen systeem om op die manier applicaties uit te testen alvorens hij ze in de cloud implementeert.

## Opslag van data

Data worden binnen Microsoft Azure opgeslagen in drie vormen: blobs, tabellen en queues. Blobs zijn blokken binaire data, opgeslagen in containers. Een blob kan maximum 50 GB groot zijn en metadata bevatten (bv. de locatie waar een foto is gemaakt). Wanneer de data meer gestructureerd moet worden opgeslagen, kan gebruik worden gemaakt van tabellen. Applicaties kunnen data in die tabellen aanspreken door gebruik te maken van ADO.NET of LINQ, maar de tabellen hebben geen vast gedefinieerd schema en zijn geen relationele databases. Tabellen in Windows Azure kunnen worden beschouwd als entiteiten met bepaalde eigenschappen, waarbij de eigenschappen verschillende types kunnen hebben (bijvoorbeeld string, boolean, int). De werking van queues ten slotte is hierboven al besproken. Queues dienen voornamelijk voor interactie tussen Web role en Worker role instances.
Van alle data die zijn opgeslagen in Windows Azure storage worden drie kopieën gemaakt (die constant worden gesynchroniseerd), zodat de kans op verlies van data minimaal blijft. De data binnen Windows Azure storage (inclusief queues) kan worden aangesproken door HTTP requests aan bepaalde URI's.