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

Post on 06-Jul-2015

928 views 0 download

Tags:

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 of Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud

Skalieren von SaaS Anwendungen

Patric BoscoloDeveloper EvangelistMicrosoft Deutschland GmbH

patbosc@microsoft.com

@patricsmsdn

http://blogs.msdn.com/patricb

Felix RiesebergDeveloper EvangelistMicrosoft Deutschland GmbH

feriese@microsoft.com

@felixrieseberg

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?

Laufzeitumgebung„as a Service“

Relationale Datenbank„as a Service“

Sichere Integration„as a Service“

Quelle: Bing Picture of the Day

12:3

8

Kommunikation ID

Akteure

Sensoren

APP

12:38

Data

Application Logic

12:38

notification

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/

ABERConsumerization

Logik

UNDSKALIERBAR

Quelle: Wally

Vertikale vs. Horizontale Skalierung

Vertikal == Mehr Resourcen Horizontal == Mehr Instanzen

Quelle: http://www.fanpop.com

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/

Meine App in der Cloud

Windows AzureGuest OS

Meine Cloud App

Virtualisiert in der „Fabric“

Messen und skalieren

• Testen

– TDD

– Testen unter Belastung (LoadTest)

• Feedback

– Windows Azure Diagnostics

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

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

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

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

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

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)

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

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

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

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, ...

Statless vs. Statefull Apps

http://myapp.cloudapp.net

LoadbalancerInstance 1

Instance 2

Different States

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

Globale Verfügbarkeit

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

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

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

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

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

Daten Synchronisation

Synchronisierung

• SQL Azure DataSync via Windows Azure Management Studio

Zusammenfassung

• Asynchrone Ausführung

• Wiederholte Ausführung

• Transaktionssicherheit

• Skalieren aller Schichten

• Cachen wo möglich

• Verwendung des CDN für Inhalte

• Datensynchronisation

Commercial Cloud Services

Resourcen

Twitter: patricsmsdn

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

Mail: patbosc@microsoft.com