I'm creating a web application and wish to have the ability to stagger the deployment of recent develops and versions across our customers. For instance...

  • Deploy latest version of application and migrate a few test accounts into it for testing
  • When tests are happy, move say 5% of clients towards the latest version and monitor support problems and server load issues with individuals clients.
  • if it's still going ok, progressively move increasingly more clients to the brand new version until everybody is up-to-date.

Fogbugz and Kiln from FogCreek are utilizing a deployment system such as this. Read about this here...

The issue I'm attempting to solve right now is that different accounts around the system could be using different versions from the code.

Exactly what is a great way of controlling and controlling this? Can Apache do a few of the heavy-lifting here? I wish to avoid an excessive amount of overhead, or strange loader scripts to sort out where you can send the request. How can web applications like Fogbugz when needed cope with the issue? It is possible to recognised design pattern with this?

The customers are recognized using a domain title (eg user1.example.com, user-bob.example.com, etc).

You will find easily 100s of the way to do this so let us think at an advanced without speaking more knowledge about the architecture:

  • Large public sites like Yahoo and MSN handle design changes with random samples and hang snacks with lengthy timeouts to recognize who ought to be finding the new design.
  • For compensated upgrades and beta invites you need to have the ability to identify and tag which customer accounts will get the brand new 'design' or set of features upon their login. For example, the brand new updates to Digg v4 were for drenched-in and elected-in clients only. Facebook were built with a similar rollout across their system using the new profile pages.
  • You might wish to purchase beta testers. It is simple to use Amazon's Mechanical Turk or sites like custfeedback.com

The specifics will depend on both you and your architecture. Hopefully you've written your software with this particular functionality in your mind and hopefully you've provided easy methods to provide both application and database upgrades easily at deploy time. Magento (a wide open-source e-commerce platform) handles this perfectly. Each module is built-in a kind of a wordpress plugin and every of their components keep record that belongs to them version. Database upgrades are carried out quickly with install and upgrade scripts in line with the new/future version maintained in configuration files.

You might want to move your beta testers to an alternative domain or database which has more in depth logging and realtime analysis than your production machine. It was the technique pointed out within the Kiln blog publish - they recommended the website http://martinfowler.com/bliki/BlueGreenDeployment.html - eventually, nevertheless, you accomplish the segregation of the accounts and traffic, you eventually need to consolidate. You will need to perform your migration inside a maintenance window probably and obtain everybody as much as exactly the same version.

All the best!