Things to Know When Planning Your Continuous Delivery Process
In today’s world, any action that takes more than a few seconds to complete is considered slow. Software is the most important asset for any type of organization. The importance of having a high availability solution cannot be quantified. If our software is not accessible and fast responding – on the server and UI levels – users will lose trust in the software and abandon it.
This is relevant for software vendors in two main cases:
- Responding to unplanned downtime incidents
- Upgrading the software with new features or capabilities
This article will focus on the latter and will attempt to answer the important question: how to upgrade your software without downtime or customer impact? For the purpose of illustration, we will examine Slack as a use case.
If you haven’t heard of Slack, it’s an application that allows organizations to communicate across their business about technical topics, and automates processes. Slack has a server in the cloud that behaves as a platform for the web, desktop, and mobile client applications.
All communications are carried out based on an SSL protocol so the data is encrypted between the clients and the server. It’s important to remember that the same database server assists several organizations; therefore data segregation is mandatory.
Slack, being a communication and automation platform used by large organizations such as NASA, Jet.com and more, must be at the forefront of technology, and at the 5 nines level of service.
Trying to achieve the highest level of service, Slack encountered several challenges. The first one is reliability during planned downtimes.
High Availability Architecture
When the Slack team wants to update their application, they have many components to focus on. This makes it impossible to upgrade them all without incurring application downtime. Each of these components is crucial for the basic functionality of the application, so they must be available for the user to have access to the software. Here enters the need for a high-availability solution.
A high-availability solution promises to keep software running at all times (even during upgrades), but requires professional design of the application structure and demands a different deployment of all server-side components. When an application is designed for high-availability, all server-side components are replicated, and a special tool to manage these instances of the same component is introduced.
This tool will usually be a Load Balancer, and implements a predefined algorithm to identify the component/instance where the next message should be directed. This new type of design structure gives a lot of power to the application in load management, which affects the application speed and allows for a smooth and unified upgrade process. Production teams can now upgrade each component on its own, while having an identical component “in the air,” responsive to users requests. Using this method provides a highly available and scalable application, which can be upgraded without affecting its users.
Continuous Deployment as part of Continuous Delivery
There are many phases of updating an application, including understanding which components are being upgraded, planning which regression testing is required for the relevant Go to the full article.