1982 views • Backend System Design
Canary Deployments is a deployment pattern that rolls out the changes to a limited set of users before doing it for 100%.
We compare the vitals side-by-side from the old setup and the canary servers to ensure everything is as expected. If all is okay, then we incrementally roll out to a wider audience. If not, we immediately roll back our changes from the canaries.
Canary Deployment thus acts as an Early Warning Indicator to prevent a potential outage.
In 1920, coal miners used to carry caged canaries with them. If the gases in the mines were highly toxic the canaries would die and that alerted the miners to evacuate immediately, thus saving their lives.
In canary deployment, the canary servers are the caged canaries that alert us when anything goes wrong.
Canary deployments are implemented through a setup where a few servers serve the newer version while the reset serves the old version.
A router (load balancer / API gateway) is placed in front of the setup and it routes some traffic to the new fleet while the other requests continue to go to the old one.
The selection is use-case specific, but the common strategies are:
Say you own the Auth service that is written in Java and you chose to re-write it in - Golang. When taking it to production, you would NOT want to make a direct 100% roll-out given that the new codebase might have a lot of bugs.
This is where canary is super-helpful when we a fraction of servers serving requests from Golang server while others from the existing setup. We now forward 5% traffic to the new ones and observe how it reacts.
Once we have enough confidence in the newer setup, we increase the roll-out fraction to 15%, 50%, 75%, and eventually 100%. Canary setup thus gives us a seamless transition from our old server to a newer one.
If you like what you read subscribe you can always subscribe to my newsletter and get the post delivered straight to your inbox. I write essays on various engineering topics and share it through my weekly newsletter.
944 views • 46 likes • 2022-05-27
One of the simplest deployment strategies that make deployment a breeze is Rolling Deployment. It is the most widely ado...
1309 views • 60 likes • 2022-05-18
Deployments are a pain if we are unsure about our release changes. But sometimes even if we know our changes well, somet...
1982 views • 117 likes • 2022-05-16
Deployments are stressful; what if something goes wrong? What if you forgot to handle an edge case that was also missed ...
A set of courses designed to make you a better engineer and excel at your career; no-fluff, pure engineering.
Being a passionate engineer, I love to talk about a wide range of topics, but these are my personal favourites.
Arpit's Newsletter read by 17000+ engineers
🔥 Thrice a week, in your inbox, an essay about system design, distributed systems, microservices, programming languages internals, or a deep dive on some super-clever algorithm, or just a few tips on building highly scalable distributed systems.
Powered by this tech stack.