wie skaliert man software as a service applikationen in der windows azure cloud

39
Skalieren von SaaS Anwendungen Patric Boscolo Developer Evangelist Microsoft Deutschland GmbH [email protected] @patricsmsdn http://blogs.msdn.com/patricb Felix Rieseberg Developer Evangelist Microsoft Deutschland GmbH [email protected] @felixrieseberg

Upload: patric-boscolo

Post on 06-Jul-2015

930 views

Category:

Technology


0 download

DESCRIPTION

Skalierung heißt eine Applikation möglichst vielen Benutzern mit der selben Funktionalität zur Verfügung zu stellen. In dieser Präsentation beschäftigen wir uns mit den unterschiedlichen Vorgehensweisen um Applikationen erfolgreich zu skalieren.

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]