Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
-
Upload
patric-boscolo -
Category
Technology
-
view
928 -
download
0
description
Transcript of Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Skalieren von SaaS Anwendungen
Patric BoscoloDeveloper EvangelistMicrosoft Deutschland GmbH
@patricsmsdn
http://blogs.msdn.com/patricb
Felix RiesebergDeveloper EvangelistMicrosoft Deutschland GmbH
@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