More Related Content

More from Maarten Balliauw(20)


Windows Azure Web Sites - Things they don’t teach kids in school

  1. Windows Azure Web Sites Things they don’t teach kids in school Maarten Balliauw @maartenballiauw
  2. Who am I? Maarten Balliauw Technical Evangelist, JetBrains AZUG Focus on web ASP.NET MVC, Windows Azure, SignalR, ... MVP Windows Azure & ASPInsider Big passion: Windows Azure @maartenballiauw Shameless self promotion: Pro NuGet -
  3. Agenda Windows Azure Web Sites Architecture Project Kudu Kudu kung-fu
  4. Windows Azure Web Sites
  5. Web Sites in Seconds Start Simple Your way Go Live start free, scale up and out with, php or deploy live in seconds, as you go, friction-free node.js, develop on easily monitor and without the headaches Windows, OSX or performance, rapidly Linux diagnose and fix issues
  6. demo Windows Azure Web Sites
  7. Architecture
  8. Web Sites are not in IIS until a request comes in!
  9. Load balancer Layers 1st layer: Windows Azure load balancer 2nd layer: IIS + ARR ARR “Reverse proxy” Verifies hosting database (plans, quotas, …) Negotiates best node to run your site on Site not used much? Put it on a highly loaded machine
  10. Web servers %SYSTEM32%inetsrvconfigapplicationHost.config is taken out of the loop SQL Azure No refreshing of all app pools when file is saved Storage “File share” hosted on other machines Using “WA drive” on blob storage Dynamic website activation service Verifies runtime database (plans, quotas, …) Site not used for a while? Remove it from the server
  11. 1st request (cold site) Web Worker IIS ARR (LB) Azure Runtime Other LB DB databases Storage Controller
  12. xth request (hot site) Web Worker IIS ARR (LB) Azure LB Other databases Storage Controller
  13. Your app not being used for a while?
  14. Provisioning, publishing, metering Provisioning and publishing Storage and database != launching a website on web farm Metering By web servers once a site is loaded Reported back to runtime database
  15. Provisioning, publishing, metering Web Worker IIS ARR SQL Azure (LB) Site Site Blob storage (W3WP.exe) Site (W3WP.exe) (W3WP.exe) Runtime Windows Azure Worker DB Role Other Azure Metering databas LB es DWAS Provisioning / API Frontend Storage Deployment Controller X-Drive Server
  16. What I find awesome… Windows Azure Web Sites runs on Windows Azure Cloud Services ARR nodes are in fault/update domains Web Workers are in fault/update domains Storage nodes are in fault/update domains Data is on SQL Azure Files are on blob storage
  17. demo Let’s find some proof…
  18. Need more proof? Windows Azure Services for Windows Server ( ng/en/us/services.aspx) Or: post/2012/07/24/Hands-on- Windows-Azure-Services-for- Windows.aspx
  19. Project Kudu
  20. Project Kudu “The engine behind git deployments on Windows Azure” Open source ( Provides git deployments Provides builds Provides sandboxing Provides hosting
  21. demo Project Kudu
  22. Kudu kung-fu
  23. demo Application log streaming
  24. Log streaming All logs from the LogFiles/Application folder Or configure it when querying: azure log tail <site> -p http Settings DIAGNOSTICS_LASTRESORTFILE -> file to log to when diagnostics go wrong DIAGNOSTICS_LOGGINGSETTINGSFILE -> settings file (json) DIAGNOSTICS_TEXTTRACELOGDIRECTORY -> default folder DIAGNOSTICS_TEXTTRACEMAXLOGFILESIZEBYTES-> log rotation (bytes) DIAGNOSTICS_TEXTTRACEMAXLOGFOLDERSIZEBYTES -> max log size (bytes)
  25. demo Managing settings and secrets!
  26. demo Staging and production
  27. demo Multi-tier Deploying a specific project file
  28. Multi-tier remarks… One .deployment file per branch [config] project=MultiTier.WebApi/MultiTier.WebApi.csproj How do I deploy all tiers in a separate website? .deployment file per branch and every tier in a branch or customize the build
  29. Customizing the build process Check .deployment file [config] command=<whatever command> Write in batch file, bash script, PHP, JavaScript, …
  30. demo Customizing deployments An introduction
  31. What can I do in scripts? A lot  (but not too much… there’s a sandbox) Environment variables: DEPLOYMENT_SOURCE DEPLOYMENT_TARGET DEPLOYMENT_TEMP MSBUILD_PATH + everything you feed it through the management portal
  32. demo Customizing deployments Sample deployment script
  33. Great… but why? We’ve seen the multi-tier scenario We can download stuff (NuGet package restore, pull in external Git repos before build) We can run stuff (msbuild, nuget.exe, curl, php, node, …)
  34. demo Customizing deployments What about running unit tests?
  35. Need. Moar!
  36. Moar out of the box REST API DropBox support Creating a custom handler django/
  37. Need. MOAR!!!
  38. A private Kudu build in web sites?
  39. A private Kudu build in web sites? Build and FTP the artifacts/debug/KuduService to your website Add USE_PRIVATE_KUDU=1 app setting Enjoy the ride! (but don’t call support, you’re on your own) See
  40. Conclusion
  41. Key takeaways Windows Azure Web Sites are high density Hosted on Cloud Services Kudu is our best friend Settings and secrets Muliple environments Multiple tiers Build customization Unit tests Kudu-in-Kudu
  42. http://blog.maartenballiauw. be @maartenballiauw Thank you!

Editor's Notes

  1. Maarten
  2. Launch PhpStorm, create new websiteExplain command line toolsazure site create WAWSdeepdive --location &quot;North Europe&quot; --gitConfigure gitAdd index.php &lt;phpphpinfo();Commit and pushDisplay in browser and go through “environment”COMPUTERNAME “RD….”NUMBER_OF_PROCESSORS -&gt; x-large instancesAll ARR___ variables (cookies for affinity and so on)WAWebSiteSID for determining the website SIDApparently C:\\DWASFiles\\Sites\\WAWSdeepdive seems “da bomb”Browse through the portal and note:All URLS for FTP and SCM are different hostnames and thus potentially a different group of serversazure site delete WAWSdeepdive
  3. Clone from git, run buildWhile build runs, explain what’s happening (NPM stage, …)Run Kudu.Webas administratorCreate a site, show folders, …KuduExec! – browse the filesystem and so onExplore someCd .. Until no more is possible and dir – show \\\\10,x,x,x
  4. Show logging applicationExplain nothing special configuredEnable through portalShow stream: azure site log tailmysite(other options are download)Configure verbosity
  5. Create an application and use ConfigurationManager.AppSettings[&quot;MyKey&quot;] tospecify a ‘dev’ variable or somethingShow environment variable printingUpdate setting in portalFTP into the system and note that the web.config is UNTOUCHED!We can use this for storing secrets
  6. Show Hg repository in which I have created two branches: the default one and a “staging” oneConfigure one production websiteConfigure one staging websiteExplain hostnames, scaling, configuration and so on
  7. Explain solution structure: two web projectsCreate .deployment fileAdd:[config]project = MultiTier.WebApi/MultiTier.WebApi.csproj
  8. Create .deployment fileAdd:[config]command=deploy.cmdAdd deploy.cmd@echo offecho Stacked is TEH AWESOME!echo We are deploying to %MYENV%- Set environment variable in portal
  9. Too long for slides!Run azure site deploymentscript --basicOr azure site deploymentscript –aspWAPRun through script
  10. Explain unit test projectDeploy with successDeploy with failure