Search

What is Blue Green Deployment?

Deployment is the process of updating code and other activities on the server to make software available for use.In the current situation, there is an increase in demand for continuous deployment to stay current with software updates, so as to provide the user with good quality application experience. There are many techniques available in the market for this, and in this article, we will be discussing about Blue Green Deployment.What is Blue-Green Deployment?Blue Green Deployment is a software release model that consists of two identical production environments; Blue and Green, configured in a way where one environment is live and the other is in staging (idle) state.The idea behind this is to redirect traffic between two environments running with a different version of the application.This process eliminates downtime and reduces the risk that happens due to deployment.  In case any error occurs with the new version, we can immediately roll back to the stable version by swapping the environment.In some organizations, it is also termed as Red Black Deployment.Working of Blue Green Deployment:To implement Blue-Green deployment, there should be two identical environments. Also, this requires Router or Load Balancer so that traffic can be routed to the desired environment.In the image, we have two production environments, Blue and Green. The Blue environment is one where current (let's say version 1) of the application is running and is live as well. All the traffic of the application is directed to Blue by Router or load balancer (as per the infra set up). Meanwhile, version 2 of the application is deployed and tested on Green Environment.Currently, at this stage, we can refer to Blue environment as Live and Green as idle or at staging state.Once the code for version 2 is tested and ready to be live for production, we redirect the traffic from Blue Environment to Green Environment, making Green as Live and Blue as a staging environment. If any problem is detected with the Infrastructure or application after version 2 is made live, we can roll back to the previous version just by swapping the environment.Blue Green deployment matches all requirements of seamless, safe and fully reversible conditions for ideal deployment, but there are some practices that need to be adopted for smooth process, for eg. automating the workflow so that there is minimum human intervention, reducing chances of manual error.Along with that, it is also important to keep monitoring in place for Blue Green application.Tools and Services for Set-Up:Based upon infrastructure and application, there are various services i.e. Docker, Kubernetes,  Cloud, Cloudfoundry etc available which can be used to implement Blue-Green Deployment.We will be discussing further on Blue Green deployment on Cloud and the steps to implement it.The advent of Cloud in Blue-Green Deployment:The advent of cloud computing in deployment has helped the system to reduce associated risks.Cloud utilities of infra management, billing and automation have made it easier to implement Blue-Green Deployment, making it a quicker task at a lower cost.AWS Services for Blue-Green Deployment:By utilizing AWS for Blue-Green Deployment, we can access many services that help in automation of deployment and infrastructure i.e. AWS CLI, SDK, ELB, Elastic Beanstalk, CloudFormation etc. There are a number of solutions that AWS provides which we can use, some of them being:DNS Routing with Route53Swapping of Autoscaling Group with ELBUsing Elastic Beanstalk and swapping ApplicationBlue-Green Deployment using AWS Code DeployCloning Stack in OpsWork and Updating DNS.We will discuss Using Elastic Beanstalk and swapping Application in detail:Using Elastic Beanstalk and swapping ApplicationElastic Beanstalk provides us with the ease in deployment. Once we upload application code with some version  on Elastic Beanstalk and provide information about application, it deploys our application in Blue Environment and provide its  URL. The above Environment configuration is then copied and used to launch the new version of application-i.e. Green Environment with its  different and own URL.This point of time our application is Up with two environments but traffic is going only to Blue Environment. For Switching the environment to Green and serving traffic to it, we need to choose other  Environment details from Elastic Beanstalk Console and Swap it using Action menu. It leads Elastic Beanstalk to perform DNS Switch and once DNS changes are done, we can terminate Blue Environment. In this way, traffic will be redirected to Green Environment.For Rollback, we need to invoke the Switch Environment URL again.Steps to perform Blue-Green deployment in AWS:Open Elastic Beanstalk console from AWS and select the Region where we need to set up an environment. Either we can launch a new environment or clone the existing environment. Deploy and test the new application environment. For deploying, the new version chooses Environment and name from the list. Click on upload and deploy. We can use screen form to upload source bundle. On the Overview page, choose Environment action and choose Swap environment URL.Choose the environment name, under Select an environment to swap column and click on Swap.Who Can Benefit from Blue-Green Deployments?Blue-Green Deployment provides us with minimum Down Time and reliable deployment.Blue-Green Deployment has become useful in deploying an application for Development Teams, but it can be used under the below scenarios:There should be identical and isolated environments.There should be the provision for router or Load Balancer.System should work with Continuous Update.Different Types of DeploymentThere are a number of deployment techniques being used in the industry to deploy the application. As a DevOps Engineer, it becomes important to know the insights about different techniques based on our infrastructure providing and choose the right technique as per the impact on the end-user. Blue-Green Deployment: Blue Green deployment provides us with high availability and rollback in case of critical bugs found. It consists of two environments running in parallel. One environment will be live and others will be in staging, thereby, making our application downtime free. A/B Deployment: A/B Deployment is similar to Blue-Green Deployment with the difference that we send a small amount of traffic to another Server (another environment). The usage of A/B Deployment is generally when we need to check the utilization of features in the application.Along with that, it can also be used to check user feedback on the new version. Canary Deployment: Canary deployment is used when we need to release the full features of the application in subsets. Generally in Canary, we have a set of servers assigned to a different set of users. This deployment is important when we need to deploy features along with getting feedback Rolling Deployment: In Rolling Deployment, there is a process where we replace currently running code server with a new version in a tandem way. Pausing the deployment is much easier in this.Advantages of Blue-Green DeploymentNo Downtime Deployment:  With Blue Green Deployment, whenever there is a critical bug found on the production server, traffic is redirected to other environments. This leads to no downtime for the end-user. Standby: Whenever there is a system failure, we can immediately perform rollback and recover safely without disturbing the end-user.  With Blue Green deployment, once we switch to the new version of application, the older version of the application is still available. Therefore, in case of recovery, we can easily swap the environment and redirect the traffic back to the old version. Blue Green has proven to be impactful in reducing risk in the application development process. Immediate Rollback: In some cases where the new feature is not working properly, we can switch to the older feature of application by performing a rollback. Testing in Prod Environment: There are scenarios when deploying a new set of code works fine on local, but when deployed in the larger infrastructure, it becomes problematic. By using Blue-Green Deployment, we can check the performance of code on the Prod server without disturbing users.Disadvantages of Blue-Green Deployment:Since many people are heading toward Blue-Green Deployment, there are some cases where this process is not recommended.In some cases, it involves risk which makes deployment more prone to failure and breakdown.Database Sync Up: Schema changes are complex to decouple. In the case of Blue Green deployment, syncing of database and data changes should be synchronized between the Blue and Green environment. In case of relational database, it can lead to discrepancies.QA/UAT Identify of Failure: In some scenarios, with large infra, it is possible that sometimes QA test cases will not detect errors/bugs in a non-live environmentDashboard Required: Since we have two identical production environments with a different version of code, while running the deployment it becomes important to monitor insights with packages and code at any point of time to trigger things.Cost: For Blue-Green Deployment, we have two sets of environments running in parallel all time, thus increasing the cost of two production environments and maintaining them.Conclusion:Blue Green deployment is one of favourable technique to deploy application . Since every deployment technique and application has its own pros and cons , therefore team should collaborate and work on choosing the right deployment technique for their application according to tools, and services used to host your application. For deployment technique to work on, there is no fixed approach that will suit and work in every scenario. there should be extensive research before settling for any deployment technique.

What is Blue Green Deployment?

5K
  • by Kanav Preet
  • 12th Jan, 2021
  • Last updated on 10th Mar, 2021
  • 8 mins read
What is Blue Green Deployment?

Deployment is the process of updating code and other activities on the server to make software available for use.

In the current situation, there is an increase in demand for continuous deployment to stay current with software updates, so as to provide the user with good quality application experience. There are many techniques available in the market for this, and in this article, we will be discussing about Blue Green Deployment.

What is Blue-Green Deployment?

Blue Green Deployment is a software release model that consists of two identical production environments; Blue and Green, configured in a way where one environment is live and the other is in staging (idle) state.

The idea behind this is to redirect traffic between two environments running with a different version of the application.

This process eliminates downtime and reduces the risk that happens due to deployment.  In case any error occurs with the new version, we can immediately roll back to the stable version by swapping the environment.

In some organizations, it is also termed as Red Black Deployment.

Working of Blue Green Deployment:

To implement Blue-Green deployment, there should be two identical environments. Also, this requires Router or Load Balancer so that traffic can be routed to the desired environment.

In the image, we have two production environments, Blue and Green. The Blue environment is one where current (let's say version 1) of the application is running and is live as well. All the traffic of the application is directed to Blue by Router or load balancer (as per the infra set up). Meanwhile, version 2 of the application is deployed and tested on Green Environment.

Working of Blue Green Deployment

Currently, at this stage, we can refer to Blue environment as Live and Green as idle or at staging state.

Once the code for version 2 is tested and ready to be live for production, we redirect the traffic from Blue Environment to Green Environment, making Green as Live and Blue as a staging environment. If any problem is detected with the Infrastructure or application after version 2 is made live, we can roll back to the previous version just by swapping the environment.

Working of Blue Green Deployment

Blue Green deployment matches all requirements of seamless, safe and fully reversible conditions for ideal deployment, but there are some practices that need to be adopted for smooth process, for eg. automating the workflow so that there is minimum human intervention, reducing chances of manual error.

Along with that, it is also important to keep monitoring in place for Blue Green application.

Tools and Services for Set-Up:

Based upon infrastructure and application, there are various services i.e. Docker, Kubernetes,  Cloud, Cloudfoundry etc available which can be used to implement Blue-Green Deployment.

We will be discussing further on Blue Green deployment on Cloud and the steps to implement it.

The advent of Cloud in Blue-Green Deployment:

The advent of cloud computing in deployment has helped the system to reduce associated risks.

Cloud utilities of infra management, billing and automation have made it easier to implement Blue-Green Deployment, making it a quicker task at a lower cost.

AWS Services for Blue-Green Deployment:

By utilizing AWS for Blue-Green Deployment, we can access many services that help in automation of deployment and infrastructure i.e. AWS CLI, SDK, ELB, Elastic Beanstalk, CloudFormation etc. There are a number of solutions that AWS provides which we can use, some of them being:

  • DNS Routing with Route53
  • Swapping of Autoscaling Group with ELB
  • Using Elastic Beanstalk and swapping Application
  • Blue-Green Deployment using AWS Code Deploy
  • Cloning Stack in OpsWork and Updating DNS.

We will discuss Using Elastic Beanstalk and swapping Application in detail:

Using Elastic Beanstalk and swapping Application

Elastic Beanstalk provides us with the ease in deployment. Once we upload application code with some version  on Elastic Beanstalk and provide information about application, it deploys our application in Blue Environment and provide its  URL. 

The above Environment configuration is then copied and used to launch the new version of application-i.e. Green Environment with its  different and own URL.

This point of time our application is Up with two environments but traffic is going only to Blue Environment. 

Using Elastic Beanstalk and swapping Application

For Switching the environment to Green and serving traffic to it, we need to choose other  Environment details from Elastic Beanstalk Console and Swap it using Action menu. It leads Elastic Beanstalk to perform DNS Switch and once DNS changes are done, we can terminate Blue Environment. In this way, traffic will be redirected to Green Environment.

Using Elastic Beanstalk and swapping Application

For Rollback, we need to invoke the Switch Environment URL again.

Steps to perform Blue-Green deployment in AWS:

  • Open Elastic Beanstalk console from AWS and select the Region where we need to set up an environment. 
  • Either we can launch a new environment or clone the existing environment. 
  • Deploy and test the new application environment. For deploying, the new version chooses Environment and name from the list. Click on upload and deploy. 
  • We can use screen form to upload source bundle. 
  • On the Overview page, choose Environment action and choose Swap environment URL.
  • Choose the environment name, under Select an environment to swap column and click on Swap.

Steps to perform Blue-Green deployment in AWS

Who Can Benefit from Blue-Green Deployments?

Blue-Green Deployment provides us with minimum Down Time and reliable deployment.

Blue-Green Deployment has become useful in deploying an application for Development Teams, but it can be used under the below scenarios:

  • There should be identical and isolated environments.
  • There should be the provision for router or Load Balancer.
  • System should work with Continuous Update.

Different Types of Deployment

There are a number of deployment techniques being used in the industry to deploy the application. As a DevOps Engineer, it becomes important to know the insights about different techniques based on our infrastructure providing and choose the right technique as per the impact on the end-user. 

  1. Blue-Green Deployment: Blue Green deployment provides us with high availability and rollback in case of critical bugs found. It consists of two environments running in parallel. One environment will be live and others will be in staging, thereby, making our application downtime free. 
  2. A/B Deployment: A/B Deployment is similar to Blue-Green Deployment with the difference that we send a small amount of traffic to another Server (another environment). The usage of A/B Deployment is generally when we need to check the utilization of features in the application.
    Along with that, it can also be used to check user feedback on the new version. 
  3. Canary Deployment: Canary deployment is used when we need to release the full features of the application in subsets. Generally in Canary, we have a set of servers assigned to a different set of users. This deployment is important when we need to deploy features along with getting feedback 
  4. Rolling Deployment: In Rolling Deployment, there is a process where we replace currently running code server with a new version in a tandem way. Pausing the deployment is much easier in this.

Advantages of Blue-Green Deployment

  1. No Downtime Deployment:  With Blue Green Deployment, whenever there is a critical bug found on the production server, traffic is redirected to other environments. This leads to no downtime for the end-user. 
  2. Standby: Whenever there is a system failure, we can immediately perform rollback and recover safely without disturbing the end-user.  With Blue Green deployment, once we switch to the new version of application, the older version of the application is still available. Therefore, in case of recovery, we can easily swap the environment and redirect the traffic back to the old version. Blue Green has proven to be impactful in reducing risk in the application development process. 
  3. Immediate Rollback: In some cases where the new feature is not working properly, we can switch to the older feature of application by performing a rollback. 
  4. Testing in Prod Environment: There are scenarios when deploying a new set of code works fine on local, but when deployed in the larger infrastructure, it becomes problematic. By using Blue-Green Deployment, we can check the performance of code on the Prod server without disturbing users.

Disadvantages of Blue-Green Deployment:

Since many people are heading toward Blue-Green Deployment, there are some cases where this process is not recommended.

In some cases, it involves risk which makes deployment more prone to failure and breakdown.

  1. Database Sync Up: Schema changes are complex to decouple. In the case of Blue Green deployment, syncing of database and data changes should be synchronized between the Blue and Green environment. In case of relational database, it can lead to discrepancies.
  2. QA/UAT Identify of Failure: In some scenarios, with large infra, it is possible that sometimes QA test cases will not detect errors/bugs in a non-live environment
  3. Dashboard Required: Since we have two identical production environments with a different version of code, while running the deployment it becomes important to monitor insights with packages and code at any point of time to trigger things.
  4. Cost: For Blue-Green Deployment, we have two sets of environments running in parallel all time, thus increasing the cost of two production environments and maintaining them.

Conclusion:

Blue Green deployment is one of favourable technique to deploy application . Since every deployment technique and application has its own pros and cons , therefore team should collaborate and work on choosing the right deployment technique for their application according to tools, and services used to host your application. 

For deployment technique to work on, there is no fixed approach that will suit and work in every scenario. there should be extensive research before settling for any deployment technique.

Kanav

Kanav Preet

Author

Kanav is working as SRE in leading fintech firm having experience in CICD Pipeline, Cloud, Automation, Build Release  and Deployment. She is passionate about leveraging technology to build innovative and effective software solutions. Her insight, passion and energy results in her engaging a strong clientele who move ahead with her ideas. She has done various certifications in  Continuous delivery & DevOps (University of Virginia), tableau , Linux (Linux foundation) and many more.

Join the Discussion

Your email address will not be published. Required fields are marked *

Suggested Blogs

Introduction to Docker, Docker Containers & Docker Hub

Docker is a tool that makes creating, deploying, and running applications easier with the use of containers. Now, what are containers? These can be described as something that makes it possible for developers to spruce up an application with all the parts needed for it. These could include libraries, for instance, along with other dependencies. Docker assembles all these and presents them as one package. The container gives the developer the assurance that the application will run on just about any Linux machine, no matter to what extent any of its customized settings in a particular machine could be at variance from those on the machine on which the code is written and tested.Who is Docker for:Docker is aimed to benefit both developers and system administrators. This makes it a part of many DevOps (developers + operations) toolchains. The main benefit that Docker carries for developers is that they can concentrate on their core job of writing the code without having to bog themselves down with which system it will run on.How Docker is useful in the IT industry:The most vital use of the Docker Enterprise container platform is that it offers value to a business by drastically bringing down its cost on infrastructure and maintenance. It can also do the same when it comes to migrating current. Best of all, all these can be done immediately upon installation. In this way, it saves time, as well. The following infographic illustrates how Docker brings down costs and increases productivity in an enterprise:Image sourceDocker container:Next, let us understand what a container in a Docker is. We can think of it as being a standard unit of software that has the purpose of packaging the code and all its dependencies together.It comes with all that an application needs to run, namely settings, code, system tools, runtime, and system libraries.The point of making a Docker container in this fashion is to help the application run in a fast and dependable manner between one computing environment and another. A Docker container image has these characteristics:LightweightStandaloneExecutableIn this sense, the container lies at the heart of a Docker.Docker containers that run on Docker Engine:Let us get down to understanding the Docker containers that power the Docker Engine.Standardization: Docker containers were created according to the industry standard for containers. The aim of doing this is that the containers could be made portable.Lightweight: Since containers share the machine’s OS system kernel; there is no need for an OS per application. What does this do? It increases server efficiencies and brings down the costs of the server as well as those associated with licensing.Security: Security is assured for applications in containers. It is a fact that  Docker comes with the industry-best default isolation capabilities.Let us explain a few Docker commands from the architecture shown above:docker run – Used for running a command in a new containerdocker start – For starting one or more stopped containersdocker stop – For stopping one or more running containersdocker build – Used for building an image form in a Docker filedocker pull – For pulling an image or a repository from a registrydocker push – Given for pushing an image or a repository to a registrydocker export – For exporting a container’s filesystem as a tar archivedocker exec – To run a command in a run-time containerdocker search – For searching the Docker Hub for imagesdocker volume- To create and attach to containers to store data.docker network- allows you to attach a container to as many networks as you like. You can also attach an already running container.docker attach – To attach to a running containerdocker commit – For creating a new image from a container’s changesdocker daemon – Having listened for Docker API requests, the Docker daemon (dockerd) manages Docker objects. These include networks, volumes, containers, and images. It also communicates with other daemons when managing Docker services.docker Images – A read-only template, an image has instructions that are used to create a Docker container. Many times, images are based on other images and carry some degree of customization. An image-based on ubuntu can install the Apache web server, your application, and the configuration details that the application needs to run.Understanding Docker Hub RegistryA registry service that is cloud-based; the Docker Hub Registry allows the user to do the following:Link to code repositoriesBuild images and test themStores images that are manually pushedLinks to Docker Cloud to help deploy images to a host.In summary, we can understand the Docker Hub Registry as a tool that offers a centralized resource for discovering a container image, managing distribution and change, facilitating collaboration between the user and team, and automating workflow throughout the development pipeline.Ref URL.Create a docker hub account.Pull a docker imagedocker pull ubuntupull a docker image with old versiondocker pull ubuntu:16.04create a custom tag to docker imagedocker tag ubuntu: latest admin/ubuntu: demologin to your docker hub registry “sh docker logindocker push admin/ubuntu: demotestingRemove all images in docker serverdocker image rm -f Pull your custom image from your docker accountdocker pull admin/ubuntu:demoInstallation Docker on Amazon Web Services (AWS) cloud:Why Amazon Web Services:AWS is a highly preferred cloud service. It enjoys a position of primacy in the global cloud services market due to the following reasons:Market pioneersUnshakeable customer faithCost-effectivenessEase and affordability of building a storage system with no worry of estimating usageSuitability for small businesses, since it is ideal for building a business from bottom to top.Advantages of AWS:Easy of usabilityAgilitySecurityReliabilityServices without capacity limitsCost-effectivenessFlexibility24×7 support.Steps to Install docker on Amazon Linux:We need Amazon web services account.Create AWS account and login to console. Choose Ec2 service from console.Click on Launch instance and choose Amazon Linux Ami Ec2 server free tier Eligible.Choose free tier Eligible Ec2 t2. Micro.Here we need configure instance details like region, subnets, vpc.Add storage. By default it will give us 8GB, and we can modify it after launching Ec2.Create security groups and check port 22 is open to allow SSH connection and we can add incoming ports in security groups.Review details of Ec2 instance and click on Launch.Create New key pair or if we have existing key pair, we can use the same; and download and click on Launch instance.Convert Keypair from .PEM file to. PPK using puttygen.  We can Download puttygen and putty from here.Login ec2 instance using putty and Ec2 Public Ip address.Click on SSH in Right panel and click Auth and add PPK key pair for ec2 to login.When we login to ec2 with New key pair we will get security alert. Click on YES and login as “Ec2-user”. If we need to login as root “sudo su – “.Update packages for security purpose using command “sudo yum update -y”.Now we need to install docker on Amazon Linux. Use command “ sudo yum install docker -y”.To check Docker version, we can see output below:Start docker with “sudo service docker start” command.Check Docker status.Now we can download any docker images by using “docker pull command”.Check if the docker container is running with “docker ps” command.To Login into docker container use “docker exec -it –user root container id bash.Check current docker containers and stopped container with “docker ps -a” command.To check downloaded docker images with “docker images” command.Conclusion:A tool with which creating, deploying and running applications is made much easier, a Docker is a set of packages that uses containers. It is of high value to both developers and system administrators, who can look at their core work without having to worry about writing the code, which runs on any system.Docker Enterprise is of immense value to the IT industry, as it brings down the maintenance and infrastructure costs. It can be deployed immediately and can be migrated easily.
5543
Introduction to Docker, Docker Containers & Do...

Docker is a tool that makes creating, deploying, a... Read More

Chaos Engineering

The 4th industrial revolution has swept the world. In just under a decade, our lives have become completely dependent on technology. The world has become a smaller place due to the internet and day by day we see an increase in the number of industries that are switching to the online platform. But this is still a new technology and emerging and developed economies are still trying to perfect the infrastructure and ecosystem which is needed to run these businesses online. This uncertainty makes failure more prevalent.  We generally came across headlines "Customers report difficulty in accessing bank mobile and online", "Bank Website down, not working" , "Service Unavailable" and such unpredictability is occurring on a regular frequency.  These outages/failures are often in complex and distributed systems, where often, several things fail at the same time, thereby compounding the problem. Finding the bugs and fixing them takes a couple of minutes to hours depending on system architecture, causing not only loss of revenue to the company but also loss of customer trust. The system is built to handle individual failures, but in big chaotic systems, failure of systems or processes may lead to severe outages. The term Microservice Death Star, refers to an architecture that is poorly designed, has highly interdependent complex systems that are slow, inflexible and can blow up and lead to failure. Image SourceStructure of microservices at AmazonImage SourceIn the old world, our system was more simplistic due to monolithic architecture. It was easy to debug errors and consequently fix them. Code changes were shipped once a quarter, or half-yearly. But today, architecture has changed a lot with migration to the cloud where innovation and speed of execution have become part for our system. The system is changing not in order of weeks and days but in order of minutes and hours. Usage of cloud-based and microservice architecture has provided us with a lot of advantages but come with complexity and chaos which can cause failure. It is an engineer’s responsibility to make the system as reliable as it can be.  Netflix's Way of Dealing with the system has taught us a better approach and has given birth to a new discipline "Chaos Engineering". Let's discuss more about it below.  Chaos Engineering and its Need:As Defined by a Netflix Engineer: "Chaos engineering is the discipline of experimenting on a software system in production to build confidence in the system's capability to withstand turbulent and unexpected conditions" Reference Link.Chaos engineering is the process of exposing a software system by introducing disruptive events, such as server outages or API throttling. In this process, we introduce  failure scenarios, faults, to test  the system’s capability of surviving against unstable and unexpected conditions. It also helps teams to simulate real-world conditions needed to uncover the hidden issues, monitoring blind spots, and performance bottlenecks that are difficult to find in distributed systems. This method is quite effective in preventing downtime or production outages before their occurrence. The Need for Chaos Engineering: How does it benefit? Implementing Chaos Engineering improves the resilience of a system.  By designing and executing Chaos Engineering experiments, we  get to know about weaknesses in the system that could lead to outages, which in turn can lose us customers. This helps improve incident response. It helps us to improve the understanding of the risk of the system by exposing threats to the system.  Principles of Chaos Engineering: The term Chaos Engineering was designed  by Engineers at Netflix. Chaos Engineering Experiments are designed based on the following four principles: Define system’s normal behaviour: First, the steady state of the system is defined, thereby defining some measurable outputs which can indicate the system’s normal behaviour. Creating Hypothesis:  During an experiment, we need a hypothesis for comparing to a stable control group, and the same applies here too. If there is a reasonable expectation for a particular action according to which we will change the steady state of a system, then the first thing to do is to fix the system so that we accommodate for the action that will potentially have that effect on the system.  Apply real-world events: Design and create experiments by introducing real-world events like terminating servers, network failures, latency, dependency failure, memory malfunction, etc. Observe Results: In this, we will be comparing steady-state metrics with the system after introducing disturbance. For monitoring we can use cloudwatch, Kibana, splunk etc or any other tool which is already part of the system architecture. If there will be a difference in results, it can be used to identify future incidents, and improvements can be made. Otherwise, if there is no difference, it can improve a higher degree of trust and confidence about application among team members. Difference Between Chaos Engineering And Testing : When we develop an application, we pass it through various tests that include Unit Tests, Integration Tests, and System Tests. With Unit testing, we write a unit test case and check the expected behaviour of a component that is independent of all external components whereas Integration testing checks the interaction of individual and inter-dependant components. But even extensive testing does not provide us with a guaranteed error-free system because this testing examines only pre-defined and single scenarios. The results don't cover new information about the application, system behaviour, performance, and properties. This uncertainty increases with the use of microservice architectures, where the system grows with passing time. Whereas in chaos, it generates a wide range and unpredictable outcome for experimenting on a distributed architecture to build confidence in the system’s capability and withstand turbulent conditions in production. Chaos Testing is a deliberate introduction of failure and faulty scenarios into our system to understand how the system will react and what could be its side effects. This type of testing is an effective method to prevent/minimize outages before they impact the system and ultimately the business.  Chaos Engineering Examples There are many chaos experiments that we can inject and test our system with, which mainly depend on our goals and system architecture.  Below is a list of the most common chaos tests: Simulating the failure of a micro-component and dependency. Simulating a high CPU load and sudden increase in traffic. Simulating failure of entire AZ(Availability Zone) or region. Injecting latency and byzantine failures in services. Exhausting memory on instances(cloud services) and allowing fault injection. Causing Host Failure. List of Tools Developed by Netflix: The Netflix Team has created a suite of tools that support chaos engineering principles and named it the Simian Army. The tools constantly test the reliability, security, or resiliency of its Amazon Web Services infrastructure. Chaos Monkey: It is a tool that is used to test the resilience of the system. It works by disabling one system of production and testing how other remaining systems respond to the outage. It is designed to test system stability by enforcing failures and later on checking the response of the system.The name "Chaos Monkey" is explained in the book Chaos Monkeys by Antonio Garcia Martinez "Imagine a monkey entering a 'data centre', these 'farms' of servers that host all the critical functions of our online activities. The monkey randomly rips cables, destroys devices, and returns everything that passes by the hand [i.e. flings excrement]. The challenge for IT managers is to design the information system they are responsible for so that it can work despite these monkeys, which no one ever knows when they arrive and what they will destroy." Reference link.Latency Monkey: This is useful in testing fault tolerance of service by creating communication delays to provoke outages in the network. Doctor Monkey: It checks the health status as well as other components related to health of the system i.e. CPU load to detect unhealthy instances and eventually fixing the instance. Conformity Monkey: It finds the instance that doesn't adhere to best practices against a set of rules and sends an email notification to the owner of the instance. Janitor Monkey: Ensures cloud service is working free of unused resources and clutter. Disposes of any waste. Security Monkey: It is an extension of Conformity Monkey. It finds security violations or vulnerabilities, such as improperly configured AWS security groups, and terminates the offending instances. Chaos Gorilla: It is similar to Chaos Monkey, but drops full Availability Zone while testing. Chaos Engineering and DevOps: When it comes to DevOps and running SDLC, implementing chaos principles in the system helps in understanding system ability against failure, which later on helps in reducing incidents in production. There are scenarios, where we quickly need to deploy the software in an environment, for all those cases we can perform chaos engineering in distributed, continuous-changing, and complex development methodologies to find unexpected failures. Advantages: Insights received after running chaos testing can lead to a reduction in production incidents for the future. Through Chaos Engineering, the team can verify the system's behaviour on failure so that accordingly it takes action. Chaos Engineering helps in the testing response of the team to the incident. Also, helps in testing if the raised alert has been notified to the correct team. On a high level, Chaos Engineering provides us an advantage by overall system availability. Chaos Experiments make the system more resilient to failures. Production outages can lead to huge losses to companies depending on the usage of the system, therefore chaos engineering helps in the prevention of large losses in revenue. It helps in improving the confidence and engagement of team members for carrying out disaster recovery methods and makes applications highly reliable. Disadvantages: Implementing Chaos Monkey for a large-scale system and experimenting can lead to an increase in cost. Carelessness or Incorrect steps in formation and implementation can impact the application, thereby hampering the customer. While implementing the project, it doesn't provide any Interface to track and monitor. It runs through scripts and configuration files. It doesn't support all kinds of deployment.  Conclusion:In the present world of Software Development Lifecycle, chaos engineering has become a magnificent tool which can help organizations to not only improve resiliency, flexibility, and velocity of the system, but also helps in operating distributed system. Along with these benefits, it has also provided us with remediation of the issue before it impacts the system. Implementation of Chaos Engineering is important and should be adopted for better outcomes. In the above article, we have shared a brief about chaos engineering and demonstrated how it can provide new insights to the system. Hope this article has provided you with valuable insights about chaos engineering. This is an extensive field and there is a lot more to learn about it.   
5408
Chaos Engineering

The 4th industrial revolution has swept the world... Read More

How to Become a DevOps Engineer

Who is DevOps engineer?        DevOps engineers are a group of influential individuals who encapsulates depth of knowledge and years of hands-on experience around a wide variety of open source technologies and tools. They come with core attributes which involve an ability to code and script, data management skills as well as a strong focus on business outcomes. They are rightly called “Special Forces” who hold core attributes around collaboration, open communication and reaching across functional borders.DevOps engineer always shows interest and comfort working with frequent, incremental code testing and deployment. With a strong grasp of automation tools, these individuals are expected to move the business quicker and forward, at the same time giving a stronger technology advantage. In nutshell, a DevOps engineer must have a solid interest in scripting and coding,  skill in taking care of deployment automation, framework computerization and capacity to deal with the version control system.Qualities of a DevOps Engineer Collated below are the characteristics/attributes of the DevOps Engineer.Experience in a wide range of open source tools and techniquesA Broad knowledge on Sysadmin and Ops rolesExpertise in software coding, testing, and deploymentExperiences on DevOps Automation tools like Ansible, Puppet, and ChefExperience in Continuous Integration, Delivery & DeploymentIndustry-wide experience in implementation of  DevOps solutions for team collaborationsA firm knowledge of the various computer programming languagesGood awareness in Agile Methodology of Project ManagementA Forward-thinker with an ability to connect the technical and business goals     Demand for people with DevOps skills is growing rapidly because businesses get great results from DevOps. Organizations using DevOps practices are overwhelmingly high-functioning: They deploy code up to 30 times more frequently than their competitors, and 50 percent fewer of their deployments fail.What exactly DevOps Engineer do?DevOps is not a way to get developers doing operational tasks so that you can get rid of the operations team and vice versa.  Rather it is a way of working that encourages the Development and Operations teams to work together in a highly collaborative way towards the same goal. In nutshell, DevOps integrates developers and operations team to improve collaboration and productivity.The main goal of DevOps is not only to increase the product’s quality to a greater extent but also to increase the collaboration of Dev and Ops team as well so that the workflow within the organization becomes smoother & efficient at the same time.DevOps Engineer has an end-to-end responsibility of the Application (Software) right from gathering the requirement to development, to testing, to infrastructure deployment, to application deployment and finally monitoring & gathering feedback from the end users, then again implementing the changes. These engineers spend more time researching new technologies that will improve efficiency and effectiveness.They Implement highly scalable applications and integrate infrastructure builds with application deployment processes. Let us spend some time in understanding the list of most important DevOps Engineers’ roles and responsibilities.1) The first and foremost critical role of a DevOps Engineer is to be an effective communicator i.e Soft Skills. A DevOps Engineer is required to be a bridge between the silos and bring different teams together to work towards a common goal. Hence, you can think of DevOps Engineers as “IT Project Managers”. They typically work on a DevOps team with other professionals in a similar role, each managing their own piece of the infrastructure puzzle.2) The second critical role of DevOps Engineer is to be Expert Collaborators. This is because their role requires them to build upon the work of their counterparts on the development and IT teams to scale cloud programs, create workflow processes, assign tenants and more.3) Thirdly, they can be rightly called “Mentors” as they spend most of the time in mentoring and educating software developers and architecture teams within an organization on how to create software that is easily scalable. They also collaborate with IT and security teams to ensure quality releases.Next, they need to be a “customer-service oriented” individuals. The DevOps Engineer is a customer-service oriented, team player who can emerge from a number of different work and educational backgrounds, but through their experience has developed the right skillset to move into DevOps.The DevOps Engineer is an important IT team member because they work with an internal customer. This includes QC personnel, software and application developers, project managers and project stakeholders usually from within the same organization. Even though they rarely work with external customers or end-users, but they keep close eye on  a “customer first” mindset to satisfy the needs of their internal clients.Not to miss out, DevOps engineer holds broad knowledge and experience with Infrastructure automation tools. A key element of DevOps is automation.  A lot of the manual tasks performed by the more traditional system administrator and engineering roles can be automated by using scripting languages like Python, Ruby, Bash, Shell, Node.js. This ensures a consistent performance of manual tasks by removing the human component and allowing teams to spend the saved time on more of the broader goals of the team and company.Hence, a DevOps engineer must possess the ability to implement automation technologies and tools at any level, from requirements to development to testing and operations.Few of other responsibilities of DevOps Engineer include -Manage and maintain infrastructure systemMaintaining and developing highly automated services landscape and open source servicesTake over the ownership for integral components of technology and make sure it grows aligned with company successScale systems and ensure the availability of services with developers on changes to the infrastructure required by new features and products.How to become a devops engineer?DevOps is less about doing things a particular way, and more about moving the business forward and giving it a stronger technological advantage. There is not a single cookbook or path to become a devops professional . It's a continuous learning and consulting process . Every DevOps tasks have been originated from various development , testing , ops team  consulting through consultants and running pilots, therefore it’s hard to give a generic playbook for how to get it implemented. Everyone should start with learning about the values, principles, methods, and practices of DevOps and trying to share it via any channel  and keep learning.Here’s my 10 golden tips to become a DevOps Engineer:    1.  Develop Your Personal Brand with Community Involvement    2. Get familiar with IaC(Infrastructure-as-Code) - CM    3. Understand DevOps Principles & Frameworks    4. Demonstrate Curiosity & Empathy    5. Get certified on Container Technologies - Docker | Kubernetes| Cloud    6. Get Expert in Public | Private | Hybrid Cloud offering    7. Become an Operations Expert before you even THINK DevOps    8. Get Hands-on with various Linux Distros & Tools    9. Arm Yourself with CI-CD, Automation & Monitoring Tools(Github, Jenkins, Puppet, Ansible etc)    10.Start with Process Re-Engineering and Cross-collaboration within your teams.Skills that DevOps engineer need to have If you’re aiming to land a job as a DevOps engineer in 2018, it’s not only about having a deep specialized skill but understanding how a variety of technologies and skills come together.One of the things that makes DevOps both challenging to break into is that you need to be able to write code, and also to work across and integrate different systems and applications. Based on my experience, I have finalized on the list of top 5 skill sets  which you might require to be a successful DevOps engineer:#1 - SysAdmin with Virtualization ExperienceDeployment is a major requirement in devops role and ops engineer are good at that , All is needed is a deployments automation engine(chef ,puppet ,ansible) knowledge  and its use-cases implementations . Nowadays , most of public clouds are running multiple flavors of virtualization so a must have 3 – 5 years of virtualization experience with VMware, KVM, Xen, Hyper-V is required along .#2 - Solution Architect RoleAlong with deployments or virtualization experience, understanding and implementation of all the hardware technologies in breadth is a must like storage and networking. Nowadays  there is a very high-demand for people who can design a solution that scales and performs with high availability and uptime with minimal amount of resources to feed on (Max utilization) .#3 - A Passionate Programmer/API ExpertiseBash, Powershell, Perl, Ruby, JavaScript, Go, Python etc are few of popular scripting languages one need to have expertise on  to become an effective DevOps Engineer. A DevOps engineer must be able to write code to automated repeatable processes. One need to be familiar with RESTFUL APIs.#4 - Integration Skillset around CI-CD toolA DevOps engineer should be able to use all his expertise to integrate all the open source tools and technique to create an environment that is fully automated and integrated. The goal should be for zero manual intervention from source code management to deployment state, i.e. Continuous Integration, Continuous Delivery and Continuous Deployment.#5 - Bigger Picture & Customer FocusWhile the strong focus on coding chops makes software engineering a natural path to a career in DevOps, the challenge for candidates who are coming from this world is that they need to be able to prove that they can look outside their immediate team and project. DevOps engineers are responsible for facilitating collaboration and communication between the Development and IT teams within an organization, so to succeed in an interview, you’ll need to be able to demonstrate your understanding of how disparate parts of the technical organization fit and work together.In nutshell, all you need are the list of tools and technologies listed below -Source Control (like Git, Bitbucket, Svn, VSTS etc)Continuous Integration (like Jenkins, Bamboo, VSTS )Infrastructure Automation (like Puppet, Chef, Ansible)Deployment Automation & Orchestration (like Jenkins, VSTS, Octopus Deploy)Container Concepts (LXD, Docker)Orchestration (Kubernetes, Mesos, Swarm)Cloud (like AWS, Azure, Google Cloud, Openstack)What are DevOps certifications available in the market? Are they really useful?In 2018, DevOps professionals are in huge demand. The demand for DevOps professionals in the current IT marketplace has increased exponentially over the years. A certification in DevOps is a complete win-win scenario, with both the individual professional and the organization as a whole standing to gain from its implementation. Completing a certification in the same will not only provide added value to one’s profile as an IT specialist but also advance career prospects faster than would usually be possible.The certifications related to DevOps are categorized into         1)  Foundation,         2) Certified Agile Process Owner &         3) Certified Agile Service ManagerThe introductory DevOps Certification is Foundation and certified individuals are able to execute the concepts and best practices of DevOps and enhance workflow and communication in the enterprise.Yes, these DevOps  certifications hold numerous benefits in the following ways:1. Better Job OpportunitiesDevOps is a relatively new idea in the IT domain with more businesses looking at employing DevOps processes and practices. There is a major gap between the demand for DevOps Certified professionals and the availability of the required DevOps professionals. IT professionals can take advantage of this huge deficit in highly skilled professionals by taking up a certification in DevOps for validation of DevOps skill set. This will ensure and guarantee much better job options.2. Improved Skills & KnowledgeThe core concept of DevOps revolves around brand new decision-making methods and thought processes. DevOps comes with a host of technical and business benefits which upon learning can be implemented in an enterprise. The fundamentals of DevOps consist of professionals working in teams of a cross-functional nature. Such teams consist of multi-disciplinary professionals ranging from business analysts, QA professionals, Operation Engineers, and Developers.3. Handsome SalaryRapid penetration of DevOps best practices in organizations and their implementation in the mentioned organizations is seeing massive hikes in the pay of DevOps professionals.This trend is seen to be consistent and sustainable according to industry experts the world over. DevOps professionals are the highest paid in the IT industry.4. Increased Productivity & EffectivenessConventional IT workplaces see employees and staff being affected by downtime which can be attributed to waiting for other employees or staff and other software and software related issues. The main objective of an IT professional at the workplace would be to be productive for a larger part of the time he/she will spend at the workplace. This can be achieved by minimizing the time spent waiting for other employees or software products and eliminating the unproductive and unsatisfying part of the work process. This will boost the effectiveness of the work done and will add greatly to the value of the enterprise and the staff as well.If you are looking out for the “official” certification programs for DevOps, below are some of the useful links:1) AWS Certified DevOps Engineer - Professional2) Azure certifications | Microsoft3) Google Cloud Certifications4) Chef Certification5) Red Hat Certificate of Expertise in Ansible Automation6) Certification - SaltStack7) Puppet certification8) Jenkins Certification9) NGINX University10) Docker - Certification11) Kubernetes Certified Administrator12) Kubernetes Certified Application Developer13) Splunk | Education Programs14) Certifications | AppDynamics15) New Relic University Certification Center16) Elasticsearch Certification Programme17)SAFe DevOps courseDevOps engineer examBelow are the list of popular DevOps Engineer exams and certifications details -DevOps Exam Syllabus Training Duration Minimal Attempts Exam Re-Take InformationAWS Certified DevOps EngineeAWS_certified_devops_engineer_professional_blueprint.pdf3 MonthsNo Minimal RequirementWaiting Period: 14 days before they are eligible to retake the exam.No limit on exam attempts until the test taker has passedRHCA certification with a DevOpsRED HAT CERTIFIED3 Days for each training• Red Hat Certificate ofWaiting Period: 1 weekconcentrationARCHITECT: DEVOPScourseExpertise in Platform-as-a-Service • Red Hat Certificate of Expertise in Atomic Host Container Administration • Red Hat Certificate of Expertise in Containerized Application Development• Red Hat Certificate of Expertise in Ansible Automation • Red Hat Certificate of Expertise in Configuration ManagementDocker Certification Associate ExamDCA ExamNo Minimal AttemptsWait 14 days from the day you fail to take the exam againCertified Kubernetes Associate ExamCKA Exam4-5 WeeksNo Minimal AttemptsWait 14 days from the day you fail to take the exam againChef Certification ExamChef Cert Exam8 HoursLinkMinimal 1 week time
3904
How to Become a DevOps Engineer

Who is DevOps engineer?        DevOps enginee... Read More