With the rise of containers, microservices, and resilience engineering practices, organizations are eager to enjoy the benefits of continuous deployment.
The premise of releasing often, although appealing, can be an uphill challenge. Together with the ability to continuously integrate, deploy and release changes, rolling those changes out to production, with automated scaling and minimal disruption, must be accomplished as well.
One practice that can help streamline the deployment process, and provide a way pull back a buggy change if need be, is called Canary release.
“Canary release is a technique to reduce the risk of introducing a new software version in production by slowly rolling out the change to a small subset of users before rolling it out to the entire infrastructure and making it available to everybody,” explained consultant Danilo Sato.
Canary testing gets its name from the phrase “canary in the coal mine,” referring to how miners used to bring canaries into the mines to serve as early-warning detectors for deadly methane, the presumption being that the canary would die if the odorless gas were in the air, warning miners of the danger.
Canary releases serve a similar role for the DevOps teams. It allows them to implement last mile delivery and reduces the risk of an annoying change bringing the house down. As such, it is an essential asset in the arsenal for the engineering teams operating under continuous delivery.
Canary releasing requires control of the deployment process and access to metrics that indicates the health status of the newly released service. If the new service fails or is insufficient to meet the business need, then the old service can be reverted with as minimal interruption to the end user. This flexibility and customer transparency is key to the right implementation of Canary release practices.
Voodoo to You
Canary release, as it is practiced now, is often a bunch of voodoo, a mix-and-mash of scripts that can modify the configuration of the load balancer, using various parameters including targeted demographics and the devices that consume the services.
Now, an open source project, VAMP (Very Awesome Microservices Platform), aims to bring some rigor and automation to the container deployment process. VAMP offers platform-agnostic microservices domain specific language (DSL), A-B testing, autoscaling, integrated metrics, and canary testing.
The company behind VAMP, Magnetic.io, received a $550,000 investment from Volta Ventures recently, indicating that this technology would have potential value in the enterprise market. The new investment will fuel the development of VAMP’s enterprise-grade features, grow the open source community and partner network, and boost international expansion.
VAMP can work standalone or integrate with container systems like Docker, the Mesosphere Data Center Operating System (DC/OS), Azure Container Service, Rancher and (soon) Kubernetes. It can even do canary-routing without any containers, although it doesn’t offer the autoscaling capabilities.
Opinionated platforms like Cloud Foundry also offer much simpler versions of Canary testing, usually as a rolling upgrade feature, but these are deeply integrated with their respective implementations. VAMP offers a vendor-neutral package that could offer protection to developers to target their deployment and release configuration independent of the underlying platform.
VAMP provides an abstraction over the existing deployment configurations for the container platforms. This abstraction is in a declarative form, addressing how the load balancers would be configured when releasing new container instances for an existing application. VAMP bridges this declaration with the actual deployment configuration that operates over the container platform.
VAMP also integrates with the load balancers like HAProxy, allowing relaying of the routing decisions and changes easily through the declarative format. In the sense of architecture, VAMP remains currently as an add-on over the existing platforms like DC/OS and provides a container platform-independent interface to the developers. The VAMP UI offers accessibility to create and modify the release configuration, allowing intuitive control of the release process.
Feature Image: New York street art by Theresa Kim.