No items found.
Product
|
Cloud costs
|
released
August 11, 2023
|
3
min read
|

Advanced Deployment Strategies

Updated

DevOps aims at automation and bridging the gap between Dev and Ops. Many organizations embrace DevOps practices to be ahead of their competition. It sets the stage for the development and operation teams with best practices for building and deploying applications/features. 

When developers create applications and features, there is one thing that needs attention - How are they going to deploy it? The strategy they are going to use, etc. Answers to these things are important as they might directly impact customers. Some organizations might use a rolling deployment strategy, which is more of a default strategy that comes even along while deploying on Kubernetes. It is time; we need to understand what lies beyond just rolling deployment strategy and explore the best possible ways to deploy our applications/features. 

Today, in this article, let us explore the different deployment strategies available and how to think beyond rolling deployments.

The Software Deployment Strategies

Software deployment strategies are crucial for efficiently and effectively releasing new or updated software applications. These strategies ensure smooth transitions, minimize downtime and mitigate risks. They provide organizations with various approaches to deploying software changes in production environments.

By adopting different deployment strategies, organizations can optimize their release processes. These strategies involve carefully managing the deployment of software changes to ensure reliability and user satisfaction. They allow continuous delivery while minimizing user impact and providing opportunities to monitor and roll back if issues arise.

Some deployment strategies involve incremental rollouts, where software changes are deployed gradually across the production environment, allowing organizations to monitor the impact of each release closely. Others involve deploying changes to a small subset of users or servers, allowing organizations to gather feedback and identify potential issues before a full-scale deployment.

Another strategy involves maintaining separate production environments, where one is active and serves live traffic while the other remains inactive. This strategy allows for thoroughly testing software changes in the inactive environment before swapping the active and inactive environments, minimizing downtime and providing a quick rollback option if needed.

These deployment strategies offer flexibility and control, enabling organizations to optimize their software release processes based on their specific requirements and goals. Organizations can ensure successful software deployments by selecting the appropriate strategy while minimizing disruptions and risks.

Thinking Beyond Rolling Deployment 

There is nothing unique about the Rolling deployment strategy. Even in Kubernetes, it comes along as a default strategy whether you mention it or not. But rolling deployment is not ideal when working with today's cloud-native applications and services. Firstly, modern cloud-native architectures often rely on distributed systems and microservices, where numerous interconnected components must be updated simultaneously. With a rolling deployment, updates are applied gradually, potentially causing compatibility issues or breaking the system's functionality if not carefully managed. Canary or blue-green deployments, on the other hand, provide more controlled mechanisms for updating and validating the entire ecosystem before directing traffic to the new version.

Moreover, Rolling deployments take a long time to complete. No environment isolation creates confusion; there is no clear separation or isolation between the environments where the new and old software versions are running. Also, one more thing to note is that the changes we rollout should be backward and forward compatible while using a rolling deployment strategy. 

Canary Deployment Strategy

Canary deployment strategy is often used to avoid unreliable deployments. This strategy involves gradually rolling out new software versions or updates by targeting a small group of users or servers while most continue using the stable version. This approach allows for thorough testing and monitoring of the new version's performance and stability before a full rollout in a real-world environment.

By gradually exposing a small portion of users to the new version, any issues or bugs can be quickly identified and mitigated, minimizing the impact on the overall system. If problems are detected, the deployment can be halted or rolled back, ensuring that the majority of users are unaffected. This strategy acts as an early warning system, allowing quick feedback loops and reducing the risk of widespread failures.

Canary deployments allow for performance monitoring and comparison between the new and stable versions, providing insights into how the update affects system metrics like response time, error rates, and resource utilization. This information helps make informed decisions about whether to continue with full deployment or make further adjustments.

Canary Deployments using Harness

To do canary deployments on Harness, you need to have the following prerequisites.

  • Harness CD free account
  • A Kubernetes cluster access
  • A sample application such as Guestbook. Fork it, and let’s use it in our tutorial. 

Let’s sign in to our Harness CD module and create a project. 

[Note: Make sure you have the Harness Delegate up and running to work with Harness CD.]

Next, create a pipeline and add the service, environment and execution steps as shown in the image below. 

Make sure to select the Canary deployment strategy in the execution.

In the ‘Service’ section, you need to add the manifest details.

Save everything and run the pipeline.

Blue-Green Deployment Strategy

A blue-green deployment strategy is often preferred to overcome unreliable deployments due to its inherent ability to mitigate risks and ensure a smooth transition between different versions of an application or service. This strategy involves maintaining two identical environments, referred to as the blue and green environments, with one serving as the production environment while the other remains inactive. By deploying new updates or changes to the inactive environment (green), the risk of disrupting the live system (blue) is minimized. This approach allows for thorough testing, troubleshooting, and validation of the green environment before routing traffic to it. If any issues or failures are encountered, the deployment can be easily rolled back by redirecting traffic to the stable blue environment.

Organizations can use the blue-green deployment strategy to ensure end-users are not negatively affected by faulty deployments. This approach ensures that only stable and thoroughly tested versions are made available to users, minimizing the risk of service disruption, downtime, or errors. As a result, this strategy helps maintain high availability and reliability, ultimately leading to an improved user experience and higher customer satisfaction.

Blue-Green Deployments Using Harness

Follow everything from the previous Canary deployment set up until you select the deployment strategy step. In the execution strategy, you need to select ‘Blue Green’.

This is how your pipeline should look like when you add the Blue/Green deployment strategy. 

Save and run the pipeline.

Software Deployment Best Practices

No matter which deployment path you choose, you need to have some best practices in place to make sure your engineering teams are well prepared for any unexpected events in case if they occur. 

  • Define clear success criteria: Before implementing a deployment, clearly define what success looks like. Determine the key metrics or indicators that will help you evaluate the performance and impact of the new feature or update.
  • Feature toggles: Implement feature toggles or flags that allow you to enable or disable specific features or updates. This gives you the flexibility to control the release and easily roll back changes if necessary.
  • Automated testing: Implement a robust automated testing strategy to ensure that the new changes are thoroughly tested before the deployment. This includes unit tests, integration tests, and any other relevant testing methodologies. Using Harness CI module, you can test your application using different testing frameworks and tools. 
  • Rollback plan: Have a well-defined rollback plan in place in case significant issues are detected during the deployment. This allows you to revert to the previous version quickly and minimize any negative impact on users or systems.
  • Documentation and templatize: Document the entire deployment process, including configuration settings, monitoring parameters, and any troubleshooting steps. Communicate the process to your team members and stakeholders, ensuring everyone is aware of the deployment strategy and its goals. Create templates using Harness templates feature to make sure the pipeline settings are preserved and can be propagated further to the team members. 
  • Post-deployment Evaluation: Conduct a thorough post-deployment evaluation by collecting relevant logs and checking the health of the application/service by connecting your health source, such as Prometheus, DataDog, AppDynamics, etc. You can easily do this by using Harness Continuous Verification feature. 

Rolling vs Canary vs Blue/Green: When to Choose What?

In general, rolling deployments are a good choice for applications that are not mission-critical and can tolerate some downtime. This strategy is suitable for small to medium-sized applications. Canary deployments are helpful when introducing new features or significant changes to an application. They are suitable for large and mission-critical applications that need to be monitored closely. Blue/Green deployments are ideal for applications that need to be highly reliable and have high availability requirements with zero downtime tolerance. They are suitable for critical systems and applications that demand rapid rollback capabilities.

Conclusion

As technology evolves and software development becomes more complex, embracing more advanced deployment strategies like canary and blue/green is becoming increasingly important, rather than solely relying on traditional rolling deployments. Both canary and blue/green deployments enhance overall system reliability and availability. These strategies empower teams to minimize risks, accelerate innovation, improve reliability, and scale easily. By adopting these approaches, organizations can stay ahead of the competition, deliver high-quality software efficiently, and provide an exceptional user experience in today's rapidly evolving digital landscape.

Sign up now

Sign up for our free plan, start building and deploying with Harness, take your software delivery to the next level.

Get a demo

Sign up for a free 14 day trial and take your software development to the next level

Documentation

Learn intelligent software delivery at your own pace. Step-by-step tutorials, videos, and reference docs to help you deliver customer happiness.

Case studies

Learn intelligent software delivery at your own pace. Step-by-step tutorials, videos, and reference docs to help you deliver customer happiness.

We want to hear from you

Enjoyed reading this blog post or have questions or feedback?
Share your thoughts by creating a new topic in the Harness community forum.

Sign up for our monthly newsletter

Subscribe to our newsletter to receive the latest Harness content in your inbox every month.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Platform