Skip to main content

Multiple Staging Deployment of Azure Web Sites using Slots

How are you dealing the website management before going live with a new version? I have in mind different environments like production, testing, integration, development, persist the old version of the web site into a location that give you possibility to swap between the new one and old one if you have issues.


If you are using Azure Websites you will discover a new feature that gives you the possibility to have multiple staging environments live in the same time. Switching between them is done in real time. Before going further, you should know two things. One, we are not referring to staging environment, this is something more that staging and this feature is available only for Standard plan.
From now, you can deploy a new version of your web site into a separate slot, that is isolated 100% from the production one. There you can test how it’s behave, performance issues and so on. You can have as many slots as you want, each slot is accessible using a unique URL. Anytime, you can switch between them, putting another slot in production (swap). When a swap is done, the web site that was in production will replace the slot with is going in production. The mechanism is pretty simple, because in your slots, the websites are already loaded, resources allocated and so on. Only the DNS is changed. In this way the downtime is eliminated and no requests are dropped.
If during a SWAP something bad is happening and an error occurs, Azure will make automatically a rollback and the original version will be restored.
Be aware, you will pay for each slot that you have, like a normal website. For example if you have 2 slots (INT and TESTING) and another slot that is live, that you will pay 3 X Standard Web Sites.
When you create a new slot, you have the possibility to clone the configuration also. This is a pretty nice feature, especially when you have custom configuration in place. When you make s swap between slots the fallowing information will change:

  • Connection strings
  • General, Diagnostic and Monitoring setting
  • Handler Mapping

Also, there are other configuration that are not changed when you make a swap:

  • Publishing endpoints
  • Scale settings
  • Custom Domain Name
  • Bindings and SSL Certificates

I really like that scale settings are not swap between instances. In this way, we can have in slots normal configuration (one instance of our websites) and in production to have 10 or 20, based on our needs. Don’t forget that database connection string is changed when a swap is made. Because of this you need to change the one from slot to the production one before making a swap.
If you want to find more about this please visit http://azure.microsoft.com/en-us/documentation/articles/web-sites-staged-publishing/

Comments

Popular posts from this blog

Windows Docker Containers can make WIN32 API calls, use COM and ASP.NET WebForms

After the last post , I received two interesting questions related to Docker and Windows. People were interested if we do Win32 API calls from a Docker container and if there is support for COM. WIN32 Support To test calls to WIN32 API, let’s try to populate SYSTEM_INFO class. [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_INFO { public uint dwOemId; public uint dwPageSize; public uint lpMinimumApplicationAddress; public uint lpMaximumApplicationAddress; public uint dwActiveProcessorMask; public uint dwNumberOfProcessors; public uint dwProcessorType; public uint dwAllocationGranularity; public uint dwProcessorLevel; public uint dwProcessorRevision; } ... [DllImport("kernel32")] static extern void GetSystemInfo(ref SYSTEM_INFO pSI); ... SYSTEM_INFO pSI = new SYSTEM_INFO(

Azure AD and AWS Cognito side-by-side

In the last few weeks, I was involved in multiple opportunities on Microsoft Azure and Amazon, where we had to analyse AWS Cognito, Azure AD and other solutions that are available on the market. I decided to consolidate in one post all features and differences that I identified for both of them that we should need to take into account. Take into account that Azure AD is an identity and access management services well integrated with Microsoft stack. In comparison, AWS Cognito is just a user sign-up, sign-in and access control and nothing more. The focus is not on the main features, is more on small things that can make a difference when you want to decide where we want to store and manage our users.  This information might be useful in the future when we need to decide where we want to keep and manage our users.  Feature Azure AD (B2C, B2C) AWS Cognito Access token lifetime Default 1h – the value is configurable 1h – cannot be modified

What to do when you hit the throughput limits of Azure Storage (Blobs)

In this post we will talk about how we can detect when we hit a throughput limit of Azure Storage and what we can do in that moment. Context If we take a look on Scalability Targets of Azure Storage ( https://azure.microsoft.com/en-us/documentation/articles/storage-scalability-targets/ ) we will observe that the limits are prety high. But, based on our business logic we can end up at this limits. If you create a system that is hitted by a high number of device, you can hit easily the total number of requests rate that can be done on a Storage Account. This limits on Azure is 20.000 IOPS (entities or messages per second) where (and this is very important) the size of the request is 1KB. Normally, if you make a load tests where 20.000 clients will hit different blobs storages from the same Azure Storage Account, this limits can be reached. How we can detect this problem? From client, we can detect that this limits was reached based on the HTTP error code that is returned by HTTP