You need to update your web application when some of users are still active and modifying data. The web application update is best done when active users are not even aware of the update.
There are too many articles floating around implying that live update is only a deployment problem. However, we will soon see that it’s much more than just a deployment problem. Let’s go into more details.
THE CHALLENGE: IT’S LOT MORE THAN A BLUE GREEN DEPLOYMENT.
BLUE GREEN DEPLOYMENT
Users are connected to web application currently in production. Users are hitting the URL to load balancer and actual application server/web server is hidden from them.
Step 1: Application of current version is running at a set of instances shown in BLUE.
Step 2: New version of application is deployed on another set of instances, shown in GREEN. Users are still using blue. At this state GREEN version is usually smoke tested.
Step 3: Once GREEN version is ready. Its added to load balancer while Blue is not taking any new requests. Already in process requests are still being served by Blue.
Step 4: Blue version is now out. GREEN Version is taking all the requests. Deployment is complete and new version of your web a application is live.
WHAT IS THE REAL CHALLENGE
Most web application in today’s world are likely to have 3 separately deployed layers.
UI, API, and Data.
Now let’s say that currently deployed version is 1.0 for all the layers and new version are going to be 2.0.
In other words, we need to upgrade UI 1.0, API 1.0, Data 1.0 to UI 2.0, API 2.0 and Data 2.0.
If UI 1.0 is not compatible to API 2.0 or API 1.0 is not compatible with Data 2.0, there is no way you can achieve zero downtime with whatever deployment or DevOps approach you take. Why?
Let’s say some users are using your web application at same time you are trying to upgrade your web application. They have opened the web application when it was 1.0. They have UI1.0 open.
Now you have API 1.0 running and available and you want to switch to API 2.0. But UI 1.0 is not compatible with API 2.0, so UI 1.0 cannot use API2.0.
Also, Your API 2.0 will not work with Data 1.0 so if you needed API 2.0 you need to upgrade Data 1.0 to Data 2.0 first.