Introduction to DevOps

Introduction to DevOps

DevOps is a relatively new concept which has been gaining a lot of popularity and taking over the traditional way of software development.

The term DevOps is so broad and includes so many concepts that it became difficult to exactly define it and set the boundaries.

The simplest definition is that -

DevOps is an Intersection of Development and Operations.

but this is not sufficient -

  • where do the boundaries of DevOps start and end?
  • which part of Development is not DevOps?
  • which part of Operations is not DevOps?
  • Why was there even a need for DevOps?

Development and Operations are the two main components of the whole Application Release Process.

So, First of all, what is the Application Release Process? let's see -

Application Release Process

Whenever we are building an application we always have the same process of delivering that application to the end user. So, no matter what approach we use the main goal is to deliver the application to the end users.

A Typical Software Release Process looks something like this -

SRP.PNG

After following the above steps, the application is launched and made available to the end users. But that is not the end of the journey while the application is in use we have to check whether there are any problems with the application. if there are any issues faced by the user then we of course have to fix them.

Now, this is the initial launch of the application.

But this is not the end of Application Development you might want to make some improvements, and when those improvements are made you want to make them accessible to the users immediately.

So, after the initial launch of the application to keep track of multiple updates you version those changes.

We repeat this process over and over again, so this gives us the process of continuous delivery of changes, an endless cycle of improvements to our application.

devops.png

Now, the question is that what is the role of DevOps in this complete Process -

  • DevOps is about making this process of continuous delivery fast
  • with minimal bugs

Challenges DevOps tries to solve -

  • The very first one is the Miscommunication and lack of collaboration between developers and the operations team.

  • conflict of Interest - In a traditional setup where one team is only responsible for the development and the other team only for operations these two have different incentives that make it hard for them to work together.

  • Security - Just like the operations team make sure the stability of the system, the security team also evaluates the changes made to make sure it does not affect the system's security, which is a slow process. As we know DevOps is about removing any roadblocks that slow down the process, hence it includes this one.

  • Application testing - Similar to the security team in some projects there are separate teams or roles for application testing and often these tests are done manually when teams cannot rely on their automated tests, which slows down the process.

  • As mentioned before, many tasks used to be done manually, making the process slow and error-prone.

So here we see the main characteristic of all these issues is that they all slow down the release cycle.

We also see that in the case of security and testing DevOps may even go over only Development or only operations responsibilities and tasks and that's why to understand DevOps instead of focusing on its name and what it means, we should focus on what it tries to achieve.

  • DevOps tries to remove all these roadblocks and things that slow down the release process.
  • Instead of manual inefficient processes helps create fully automated streamlined processes for the release cycle.

What is DevOps?

Well by the official definition -

DevOps is the combination of cultural philosophies, practices and tools that increases an organization's ability to deliver applications and services at high velocity.

So DevOps is not just one set of tools or one specific concept the process of releasing the software fast and with high quality.

The main part was that development and operations teams should work together more often.

But wait, what on earth does that mean and how does it work in practice?

Since it's not specific enough so naturally, different companies started implementing DevOps in different ways. Hence, the actual implementation of DevOps looked pretty different from company to company but, since companies started adopting it. It gradually got a more concrete form with some of the common patterns across many companies. One of these patterns was that DevOps evolved in an actual role called a DevOps Engineer.

Where either -

  • Developers are doing DevOps as a job next to development or Operations is doing it.
  • Or someone is doing it exclusively as their only job.

Now the main question is how to become a DevOps Engineer.

DevOps in Practice

Tools and concepts one needs to learn as a DevOps Engineer -

  • Concepts of Software Development - As a DevOps Engineer, you are not Going to build an application but you need to understand the concept of -
    • how developers work
    • which git workflow they are using
    • how the application is configured
    • concepts of automated testing and so on.
  • Operating System and Linux basics - Now that application needs to be deployed on a server so that eventually users can access it. Hence we need some kind of infrastructure, and you as DevOps Engineer might be responsible for preparing the infrastructure to run the application. Since most servers run on the Linux Operating system, Hence you need -
    • Basic understanding of Linux
    • to be comfortable using CLI
    • Shell Commands
    • Understanding Linux file system
    • Understanding of server management
  • Networking and Security - Also need to have a basic understanding of Networking and Security -

    • Firewall, Proxy Servers
    • Load Balancer
    • HTTP/HTTPS
    • IP, DNS Name Resolution

      However to draw a line between IT Operations and DevOps one does not have to have advanced Networking and security skills.

  • Containers - Nowadays as containers have become the new Standard for software packaging models. This means you need to generally understand the concept of -
    • Virtualization & containers
    • managing containerized applications on a server
    • Docker as it is one of the most popular container technology

Responsibility of a DevOps Engineer -

So now on one side, we have Developers who are creating new features and bug fixes and on the other side, we have infrastructure or servers which are managed and configured to run the application.

but the question is how to get these features and bug fixes from the development team to the operation team to make them available to the end users.

So how do we release the new application versions?

That's the main task and responsibility of the DevOps Engineer, and with DevOps, the question is not just how to do this in any possible way but how we do this continuously and in an efficient, fast and automated way. Therefore we need to learn how to Build Automation & CI/CD pipelines

  • Infrastructure as a Service - Nowadays many companies are using virtual infrastructure on the cloud instead of creating and managing their physical infrastructure these are infrastructure as service platforms like AWS, Google Cloud, Asure etc, you need to learn at least one of those.
  • Container Orchestration - Now our application will run as a container and containers need to be managed. for smaller applications, docker-compose is enough but if you have a lot of containers, you need a more powerful Container Orchestration tool most powerful of which is Kubernetes. So you need to understand -
    • How Kubernetes work
    • How to administer and manage the cluster
    • How to deploy the application in it
  • Monitoring - One of your responsibility as a DevOps Engineer may be to set up monitoring for your running application, the underlying Kubernetes cluster and the servers on which the cluster is running to track performance and discover problems.

  • Infrastructure as Code - In our project we will need the same deployment environment multiple times for Production, testing and development. Creating infrastructure for one environment already takes a lot of time and is very error-prone. So, we don't want to do it manually multiple times. Since we want to automate as much as possible.

    Now, this can be done using the combination of two types of Infrastructure as code tools -

    • Infrastructure provisioning tools like Terraform
    • Configuration management tools like Ansible, CHEF etc

      So you as a DevOps engineer should now one of these tools to make your work more efficient as well as to make your environment more transparent so that you know exactly in which state it is so that it's easy to replicate & recover.

In addition to all the above things you also need to learn -

  • one Scripting language as you will be working closely with developers and system administrators
  • Version control to manage your code

That is all for now, Thank you for reading. I hope this Blog was helpful and you were able to take something out of it.

Resource

Everything mentioned in this Blog is from the youtube video that I watched

If you find this Blog useful do check out her video for an even better understanding.