Canary Islands Release Strategy Against Blue / Green

My understanding of canary production is that it is a partial release of a subset of production nodes with sticky sessions enabled. This way you can control and minimize the number of users / clients who have suffered if you ultimately issue a bad error.

My understanding of the blue / green release is that you have two mirrored production environments (β€œblue” and β€œgreen”), and you immediately push the changes to all nodes in blue or green, and then use the magic network to control that which users of the environment are redirected through DNS.

So, before I start, if something that I said so far is wrong, start with a fix!

Assuming I'm more or less on the go, then a few questions about two strategies:

  • Are there scenarios where a canary is preferable to blue / green and vice versa?
  • Are there scenarios in which a deployment model can simultaneously implement both strategies?
+102
deployment production-environment canary-deployment release-management blue-green-deployment
May 19 '14 at 19:49
source share
6 answers

Blue-green release is easier and faster.

You can make a blue-green version if you tested the new version in a test environment and are very sure that the new version will work correctly during the production process. Always using the toggles functions is a good way to increase confidence in the new version, since the new version works in the same way as the old one until someone switches the switching function. Destroying your application into small, independently released services is another, as there are fewer tests and fewer than you can break.

You need to make a canary if you are not completely sure that the new version will work correctly in production. Even if you are a thorough tester, the Internet is a large and complex place and always encounters unexpected problems. Even if you use function switches, it might be implemented incorrectly.

Deployment automation requires effort, so most organizations plan to use one strategy or another each time.

So, a blue-green deployment, if you are committed to practices that allow you to be sure of it. Otherwise send the canary.

The essence of blue-green is deployed immediately, and the essence of deploying a canary is deployed gradually, therefore, given a single user pool, I cannot imagine a process that I would describe as performing both at the same time, if you have several independent user pools, for example. Using various regional data centers, you can make blue-green in each data center and canary through data centers. Although, if you do not need canary deployment in a data center, you probably will not need it in data centers.

+77
Jun 03 '14 at 12:39 on
source share
β€” -

I wrote a detailed essay on this topic here: http://blog.itaysk.com/2017/11/20/deployment-strategies-defined

In my opinion, the difference is whether the new "green" version is available to real users. If so, then I would call it a canary. A common way to implement Canary is to use regular Blue / Green with the addition of intelligent routing of specific users to the new version. Read the post for a detailed comparison.

Aquamarine: enter image description here

Canaries: enter image description here

+61
Nov 20 '17 at 16:57
source share

Blue / green and canary releases address the same goal of software testing with a targeted audience before delivering software features to a wider audience. In the case of deployment canaries, they can share the same infrastructure, but in the case of blue / green, the entire infrastructure is duplicated with the router / DNS / reverseproxy in front to route traffic.

In a cloud environment where it’s easier to create scenarios & To recreate the infrastructure, a blue-green deployment is preferred because it allows the infrastructure to synchronize with automation. This is a great opportunity when you need to recreate the environment.

You can refer to the following articles for a more detailed comparison:

BlueGreen Deployment: http://martinfowler.com/bliki/BlueGreenDeployment.html

Canary Deployment: http://martinfowler.com/bliki/CanaryRelease.html

+5
Feb 13 '16 at 17:05
source share

Although both of these terms look pretty close together, they have subtle differences. One of them gives confidence in the release of your functionality, and the other - as you release.

Canaries

  1. A Canary release is a method that reduces the risk of introducing a new version of software into production by slowly deploying changes to a small group of users before deploying the entire infrastructure.

  2. Soon you will get an idea of ​​how the new version will work (integration with other applications, processor, memory, disk usage, etc.).

Blue; green:

  1. This is more about the predictable zero deployment downtime release.
  2. Easy rollback in case of failure.
  3. Fully Automated Deployment Process
+2
Jun 25 '18 at 17:00
source share

A good start to definitions. I think this will also help in deciding your strategy if you divide the definition of release into deployment and release (functionality).

Deployment (binaries)

The binary deployment action of your product on a (production) system.

Release (functionality)

Functionality management action for (groups) users.

Why? You usually have (several) two problems when "releasing": 1) Errors / backward compatibility / etc. 2) Validation / usability of new features

Then ask yourself before choosing a canary, blue-green, or any other gray / mixed mode strategy: what problems do we face when releasing / deploying a new version? And only then, if you know your problems, choose your strategy.

In addition, more complex deployment / release strategies can be implemented. For example, in some clouds / infrastructure you can have several production servers and transfer the load in different proportions to different servers and versions of your product, as well as control reliability before scaling the release / deployment for all users.

Feature Labeling

The action "setting" (cold or even hot), which functions are (not) available for (group) users

If you also do something like "function labeling", you can first expand, measure the reliability of your release in terms of backward compatibility / errors and gradually release new functions for different users or vice versa (reduce or even decrease the rollback functionality and / or binary files.). Labeling functions allows you to separate the availability of functionality from the deployment of binary files and gives a much more detailed decision-making than just "deployment / rollback"

+1
Mar 11 '19 at 13:02
source share

Here are some built-in definitions -

  • Blue-green deployment - when you deploy a new version of the application, a second environment is created. Once a new environment is verified, it originates from the old version. Old environment may be disabled.

  • A / B testing - two versions of the application work simultaneously. Some requests are sent to everyone. Developers can compare versions.
  • Canary Release - A new version of the microservice is launched along with older versions. This new version can then accept part of the requests, and the team can check how this new version interacts with the system as a whole.
0
Sep 06 '19 at 16:28
source share



All Articles