Transcript
Page 1: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Skalieren von SaaS Anwendungen

Patric BoscoloDeveloper EvangelistMicrosoft Deutschland GmbH

[email protected]

@patricsmsdn

http://blogs.msdn.com/patricb

Felix RiesebergDeveloper EvangelistMicrosoft Deutschland GmbH

[email protected]

@felixrieseberg

Page 2: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Meine Applikation in der Cloud

4 Skalierbare Applikation in der Cloud

1 Ausgangspunkt?

3 Was bietet mir der Plattform Anbieter?

2

Was muss meine Applikation tun?

Page 3: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Laufzeitumgebung„as a Service“

Relationale Datenbank„as a Service“

Sichere Integration„as a Service“

Page 4: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Quelle: Bing Picture of the Day

Page 5: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

12:3

8

Kommunikation ID

Akteure

Sensoren

APP

Page 6: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

12:38

Data

Application Logic

12:38

notification

Page 7: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Windows Azure Toolkits

• iOS Toolkithttps://github.com/microsoft-dpe/wa-toolkit-ios

• Android Toolkithttps://github.com/microsoft-dpe/wa-toolkit-android

• Windows Phone 7 Toolkithttp://watwp.codeplex.com/

Page 8: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

ABERConsumerization

Page 9: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Logik

Page 10: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

UNDSKALIERBAR

Page 11: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Quelle: Wally

Page 12: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Vertikale vs. Horizontale Skalierung

Vertikal == Mehr Resourcen Horizontal == Mehr Instanzen

Page 13: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Quelle: http://www.fanpop.com

Page 14: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Windows Azure + IDE Unterstützung

• Visual Studio + Windows Azure SDK 1.6http://www.microsoft.com/windowsazure/sdk/

• Eclipse + Windows Azure SDK für Javahttp://www.interoperabilitybridges.com/projects/windows-azure-sdk-for-java.aspx

• Windows Azure SDK für PHPhttp://www.interoperabilitybridges.com/projects/php-sdk-for-windows-azure.aspx

• Mehr finden Sie unter ...

http://www.microsoft.com/windowsazure/sdk/

Page 15: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Meine App in der Cloud

Windows AzureGuest OS

Meine Cloud App

Virtualisiert in der „Fabric“

Page 16: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Page 17: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Messen und skalieren

• Testen

– TDD

– Testen unter Belastung (LoadTest)

• Feedback

– Windows Azure Diagnostics

– Windows Azure Diagnostics Managerhttp://www.cerebrata.com/Products/AzureDiagnosticsManager/

Page 18: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Middle Tier

Synchrone AusführungMeine Superawesome Webseite

http://myapp.cloudapp.net

WebApp Frontend

ClientThread

Executes

SQL Azure

Storage

Client Request #1

Client Request #2 Blocking

Client Response #1

• Jeder Thread ist genau für ein Request zuständig• Blockiert bei jedem Schritt der Ausführung • Gibt erst nach Abschluss der Ausführung (Operationen)

das Resultat zurück (Respond & Repeat)• Jeder ausstehende Request wird im Thread-Stack gespeichert• Thread blockiert die abarbeitung der Threads im Thread-Stack• Durch das Anlegen eines weiteren Threads,

wird lediglich ein weitere Thread abgearbeitet

Result

Page 19: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Asynchrone AusführungMeine Superawesome Webseite

http://myapp.cloudapp.net

WebApp Frontend

ClientThread Middle Tier

SQL Azure

Storage

Client Request #1 ExecutesReq 1

Client Request #2ExecutesReq 2 Response 2

Client Response #2

Response 1Client Response #1

• Threads arbeiten wann immer Sie bereit sindDie Reihenfolge der Abarbeitung ist zufällig

• Die Requests werden in der App Datastructure verwaltet• Threads blockieren nicht mehr währen der Ausführung von Operationen• Threads können mehrere simultane Requests abarbeiten

Page 20: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Microsoft Visual Studio Item1.cs

Too

lbo

xT

ea

m E

xp

lore

rS

olu

tio

n E

xp

lore

r

Item3.csItem2.cs

void UploadImage(Stream image, CloudBlob destBlob){

// Add image to list in SQL AzureAddImageToSQLAzure(destBlob.Uri);

//Upload image to blob storageUploadImageToBlob(image, destBlob);

}

async Task UploadImageAsync(Stream image, CloudBlob destBlob){

//Add imaage to list in SQL Azure Taskvar t1 = AddImageToSQLAzureAsync(destBlob.Uri);

//Upload image to blob storagevar t2 = UploadImageToBlobAsnc(image, destBlob);

await TaskEx.WhenAll(t1, t2);}

Item1.cs

Any CPUDebug

File Edit View Build Debug Team Data Tools Test Analyze Windows Help

Page 21: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Microsoft Visual Studio Item1.cs

Too

lbo

xT

ea

m E

xp

lore

rS

olu

tio

n E

xp

lore

r

Item3.csItem2.cs

void uploadImageToBlob(Stream image, CloudBlob destBlob){

destBlob.UploadFromStream(image);}

async Task UploadImageToBlobAsync(Stream image, CloudBlob destBlob){

// Task.Factory.FromAsync method creates a Task or Task<T>// to represent a Begin/End async invocationawait Task.Factory.FromAsync<Stream>(destBlob.BeginUploadFromStream,

destBlob.EndUploadFromStream,image,null);

}

Item1.cs

Any CPUDebug

File Edit View Build Debug Team Data Tools Test Analyze Windows Help

Page 22: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Async Support in der Cloud

• Async Features– .net 4.0 Async CTP funktioniert mit Windows Azure,

wenn man die AsyncCtpLibrary.dll mit ausliefert. (Copy Local)

• Windows Azure Storage Queues– Integriertes „load balancing“– Dequeue und Requeue via „InvisibilityTimeout“

• Async Design Patterns erhöhen die Gefahr von „Race Conditions“– Murphys Law– Transaktionssicherheit gewährleisten– Problematik der „Retries“ beachten (Retry Logic)

Page 23: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Quelle: http://www.flickr.com/photos/32975477@N02/4566833793/

Page 24: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Verfügbarkeit

• Transient Condition– Network, Datacenter, Service ...

• Beispiel– SQL Azure Error 40501

„The service is currently busy. Retry the request after 10 seconds.“

• Transient Fault Handling Framework– http://windowsazurecat.com/2011/02/transient-fault-handling-framework/

• Wiederholen von externen Aufrufen– SQL Azure

– Windows Azure Storage

– Service Bus

– 3rd Party Services

Page 25: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Meine Superawesome Webseite

http://myapp.cloudapp.netMeine Superawesome Webseite

http://myapp.cloudapp.netMeine Superawesome Webseite

http://myapp.cloudapp.net

n Webinstanzen1 Datenbank

Scale me too!!! ;-)

• Es ist besser 50 mal 1GB Datenbanken zu haben, als eine 50 GB Datenbank• Wie skaliert man Datenbanken?

• Partitionierung• Alphabetisch• User• Last• Datum

Page 26: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Ist meine Applikation

• ... horizontal skalierbar?gibt es Abhängigkeiten, ist Sie virtualisierbar ...

• ... unter Last erreichbarasynchrone Ausführung von Requests, wiederholen von nicht abgeschlossenen Requests, ...

• ... Transaktionssicher?wird die Datenkonsistenz sichergestellt, Protokollierung der Schreibvorgänge, Datensicherung, ...

Page 27: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Statless vs. Statefull Apps

http://myapp.cloudapp.net

LoadbalancerInstance 1

Instance 2

Different States

Page 28: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Windows Azure AppFabric Caching

• Cache für Daten die über mehrere Instanzen hinweg zur Verfügung stehen sollen.– Session State, Shopping Cart, ...

• AppFabric Caching ist ein hosted distributed cache– Global Verfügbar– Low latency, hosted per subregion– ACS unterstützung

• Vorteile– Einfache Administration– ASP.net Session State und Output Cache providers– Nearcache für aktuelle Daten ohne Serializierungskosten

Page 29: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Globale Verfügbarkeit

Page 30: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Content Delivery Network (CDN)

X

CDN

X

weniger hops

evtl. viele “hops” oder “poor links”

Closest Point of Presence

Blob Storage

Public Container

DNS name resolves to closest POP

Blob header determines time-to-live at the edge

Page 31: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Content Delivery Network (CDN)

• 24 global verteilt CDNs (99.95% Erreichbarkeit)

• Einrichten eines CDN via Management Portal– Generiert 2 URLs für unterschiedliche Zugriffe

• Direkter Zugiriff:http://myacct.blob.core.windows.net/images/myimage.jpg

• Zugiff via CDN:http://azXXXX.vo.msecnd.net/images/myimage.jpg

– CNAME Mappings für CDN URLshttp://blog.smarx.com/posts/using-the-new-windows-azure-cdn-with-a-custom-domain

• CDN für WebApps und Windows Azure Storage– CSS, Images, ...

• Smooth streaming verfügbar als CTP

Page 32: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Lebenszeit von Inhalten im CDN

• Per Default wird Content für 72 Std. gehalten

• Einstellen der TTL via „cache control header“x-ms-blob-cache-control: public, max-age=<value in seconds>

– Stunden, Tage, Wochen

– Längere Lebenszeit reduziert:

• Kosten, Latenzzeiten, andere Caches

• Verwendung von Versionierten URLs um Inhalte bei Bedarf zu ändern

Page 33: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Versionierte URLs

CDN

Superawesome WebApp

http://myapp.cloudapp.net

… <imgsrc="http://azXXXX.vo.msecnd.net/images/logo.2011-09-16.png" />…

logo.2011-09-16.pnglogo.2011-09-16.png

logo.2011-11-22.png

… <imgsrc="http://azXXXX.vo.msecnd.net/images/logo.2011-11-22.png" />… logo.2011-11-22.png

• Vereinfacht das Rollback / Versionierung

• Ermöglicht A/B Tests

Page 34: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

CDN für Web Apps

• CDN support für Webseitenhttp://blog.smarx.com/posts/using-the-windows-azure-cdn-for-your-web-application

– Normale URL: http://foo.cloudapp.net/default.aspx

– CDN URL: http://azXXXX.vo.msecnd.net/default.aspx

– Cached from: http://foo.cloudapp.net/cdn/default.aspx

• CNAME & HTTPS support• Achtung! Die „cache control headers“ müssen

angepasst werden um das ASP.net OutputCache Modul zu unterstützenhttp://blogs.msdn.com/b/scicoria/archive/2011/07/10/hosted-service-as-a-windows-azure-cdn-origin-tips.aspx

Page 35: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Daten Synchronisation

Page 36: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Synchronisierung

• SQL Azure DataSync via Windows Azure Management Studio

Page 37: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Zusammenfassung

• Asynchrone Ausführung

• Wiederholte Ausführung

• Transaktionssicherheit

• Skalieren aller Schichten

• Cachen wo möglich

• Verwendung des CDN für Inhalte

• Datensynchronisation

Page 38: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Commercial Cloud Services

Page 39: Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Resourcen

Twitter: patricsmsdn

Blog: http://blogs.msdn.com/patricb

Mail: [email protected]