Skalieren von SaaS Anwendungen Patric Boscolo, Developer Evangelist, patbosc@microsoft.com, Microsoft Deutschland GmbH
Windows Azure Cloud Services Developer Resources
Windows Azure Windows Azure Services Cloud Services Developer Resources
Was ist eine SaaS Anwendung? Twitter VLOG UNIVERSITY #15 Datacenter ab 50 /mtl Hotmail 99 Facebook Video -20% Dashboard
Verteilte Anwendung Client Phone Sicher Server Global Connected
Everything is failing all the time You are responsible!
Was muss ich tun? Was kann der Anbieter für mich tun?
Skalierung? Vertikale Skalierung Horizontale Skalierung Horizontale Skalierung Horizontale Skalierung Mehr Ressourcen Mehr Instanzen
IDE Unterstützung Visual Studio + Windows Azure SDK 1.6 http://www.windowsazure.com/en-us/develop/net/ Eclipse + Windows Azure SDK für Java http://www.windowsazure.com/en-us/develop/java/ Windows Azure SDK für PHP http://www.windowsazure.com/en-us/develop/php/ Powershell + node.js http://www.windowsazure.com/en-us/develop/nodejs/ Mehr finden Sie unter... http://www.windowsazure.com/en-us/develop/overview/
Deployment Staging / Production Compute Emulator Project Binaries Service Configuration Service Definition
Wie verhält sich meine App unter Last?
#1 Production vs. Development
MESSEN & SKALIEREN Unit Test Load Test Windows Azure Diagnostics Windows Azure Diagnostics Manager http://www.cerebrata.com/products/azurediagnosticsmanager
There is no place like 127.0.0.1 Production
#2 scale all parts
Meine Superawesome Webseite http://myapp.cloudapp.net Meine Superawesome Webseite http://myapp.cloudapp.net Meine Superawesome Webseite http://myapp.cloudapp.net Scale me too!!! ;-) n Webroles 1 Database It s better to have 50 times 1GB db, then a single 50GB db. How to scale a db? Partitioning (Alpha, User, Usage, Date)
#3 retry, again and again
Transient Conditions 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
#4Work Async
Client WebApp Frontend Client Request #1 Client Response #1 Synchrone Ausführung Meine Superawesome Webseite http://myapp.cloudapp.net Thread Executes Result SQL Azure Middle Tier Storage Client Request #2 Blocking 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
Client WebApp Frontend Asynchrone Ausführung Client Response Request #1 Client Client Response Request #2 #2 Meine Superawesome Webseite http://myapp.cloudapp.net Thread Req 1 Req 2 Response 2 Response Executes 1 Executes SQL Azure Middle Tier Storage Threads arbeiten wann immer Sie bereit sind Die 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
Solution Explorer Team Explorer Microsoft Visual Studio Item1.cs File Edit View Build Debug Team Data Tools Test Analyze Windows Help Debug Any CPU Toolbox Item1.cs Item2.cs Item3.cs void UploadImage(Stream image, CloudBlob destblob) { // Add image to list in SQL Azure AddImageToSQLAzure(destBlob.Uri); } //Upload image to blob storage UploadImageToBlob(image, destblob); async Task UploadImageAsync(Stream image, CloudBlob destblob) { //Add image to list in SQL Azure Task var t1 = AddImageToSQLAzureAsync(destBlob.Uri);
Solution Explorer Team Explorer Microsoft Visual Studio Item1.cs File Edit View Build Debug Team Data Tools Test Analyze Windows Help Debug Any CPU Toolbox Item1.cs Item2.cs Item3.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 invocation await Task.Factory.FromAsync<Stream>(destBlob.BeginUploadFromStream, destblob.enduploadfromstream, image, null); }
#5 CDN and Optimization
evtl. viele hops oder poor links weniger hops CDN Closest Point of Presence X Blob Storage X 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 URLs http://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 Superawesome WebApp http://myapp.cloudapp.net <img src="http://azxxxx.vo.msecnd. net/images/logo.2011-09- net/images/logo.2011-11- 16.png" 22.png" /> CDN logo.2011-09-16.png logo.2011-11-22.png logo.2011-09-16.png logo.2011-11-22.png Vereinfacht das Rollback / Versionierung Ermöglicht A/B Tests
CDN für Web Apps CDN support für Webseiten http://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ützen http://blogs.msdn.com/b/scicoria/archive/2011/07/10/hosted-service-as-a-windows-azure-cdn-origin-tips.aspx
#6 Use Caching
Loadbalancer Instance 1 http://myapp.cloudapp.net Instance 2 Different States
Windows Azure 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
#8 Traffic Manager
Windows Azure Traffic Manager Direct users to the service in the closest region with the Windows Azure Traffic Manager foo-us.cloudapp.net Traffic Manager Policies Monitoring foo-europe.cloudapp.net foo-asia.cloudapp.net
Tables and Queues CDN Caching ACS Traffic Manager Production vs. Development Scale all Parts Retry (Transient Fault Handling) Work Async
Tables and Queues CDN Caching ACS Traffic Manager Production vs. Development Scale all Parts Retry (Transient Fault Handling) Work Async
www.windowsazure.com //blogs.msdn.com/hsirtl mailto: patbosc@microsoft.com