DevOps101: A beginner's perspective
Image by vectorjuice on https://www.freepik.com/

DevOps101: A beginner's perspective

DevOps has become a popular topic for boosting productivity in companies, regardless of their industry.? This disruptive model is being adopted by various organizations every day.

When you say DevOps, it is primarily focused on achieving continuous delivery and continuous integration (CI/CD) where it seeks software development and software release to be fast, secure, and reliable. Software companies can produce more software of high quality for internal or external use while saving money.

While there are various topics being generated that talk about DevOps on the web, this article will cover some topics that I learned during my first year in DevOps.

Concepts

Concept 1. Cloud computing

Have you heard of Amazon Web Service (AWS), Microsoft Azure, or Google Cloud Platform? Learning cloud computing is crucial if you want to break into the DevOps field as it is now the standard industry practice for deployment of infrastructure and web/mobile applications.?Cloud platforms like Amazon Web Services, Microsoft Azure, or Google Cloud Platform are used by most organizations to host applications and manage infrastructure.?Being a DevOps professional requires a good understanding of cloud computing and experience in implementation using cloud platforms.

There are various ways to start learning about cloud computing. However, learning both concepts and knowing how to implement the concepts would be more beneficial (it's a must if you want to break into DevOps). It's like learning what a Lambda function does as a concept and how to implement it on the AWS console. Or learning about the Azure Virtual Machines concept and knowing how to create one on the Azure platform will enforce your understanding.

No alt text provided for this image
An example of creating a lambda function with a .Net runtime environment using AWS console


No alt text provided for this image
Creating an Azure Function with a Node.js runtime on a Linux OS (using Azure Console)


Before I entered into DevOps, I attempted to take cloud certifications (AWS Cloud Practioner, Azure Fundamentals) in order for me to have a basic understanding of the concepts. It is because while preparing for the exam, I have to go through a review of the concepts and performed the creation of resources just to give me an idea of what the resources in the console would look like. I even ended up working on writing down code via the command line interface (CLI).

Concept 2. Cloud Infrastructure

Heard of cloud networking, virtualization, target groups, private subnets, Nat Gateways, etc.? Cloud infrastructure is composed of multiple components that are integrated into a single architecture to support business operations.?A typical solution can be made up of components such as

  • Compute Infrastructure (AWS EC2, AWS Lambda Function, Azure Virtual Machines, Azure Container App, Azure App Services)

No alt text provided for this image
Creating an Azure Container App service for a booking app using Azure console


  • Storage Infrastructure (AWS S3 Bucket, Azure Blob Storage )
  • Database Infrastructure (Amazon Relational Database Service/RDS, Azure SQL Database)

No alt text provided for this image
Creating a Postgres DB in AWS Console


  • Network Infrastructure (Amazon VPC, Amazon API Gateway, Azure Virtual Network)

No alt text provided for this image
Created a Rest API Gateway using AWS Console


Example use case of a DevOps Request:

The application engineers are creating a microservice that involves the usage of an API Gateway, a lambda function, and an SQS queue (Amazon Simple Queue Service) where the API Gateway accepts the traffic and forwards it to the SQS queue. After the receiving message, the Amazon Simple Queue Service will trigger a Lambda function to process the message.
No alt text provided for this image
Image generated using LucidChart.app


Technically, you can create the cloud resources through the AWS console (Azure Portal) or CLI (similar to the first few images of this article), however, you can programmatically configure and manage cloud resources using infrastructure tools offered by cloud platforms.

As a DevOps practitioner, one way to learn how to implement cloud architectures (especially if you are not familiar with the resources) may involve creating the resources and connecting them using the portal or console (Azure / AWS). However, the goal here is to automate the creation of these resources using infrastructure as code tools.


Concept 3. Microservices Architecture

What is a microservices architecture and why is it an important concept to learn when you want to break into DevOps?

Monolithic Apps

Who's not familiar with monolithic applications? For many years, monolithic architectural design was the common pattern for application development prior to the rise of microservices. It means that in every aspect of the web application, including the entire code, the functions are created as one unified unit.

For instance, all of the code for an online store application's components, such as user authentication, payment processing, the shopping cart, the product catalog, the product review section, and so on, would be contained in a single code base as a single monolithic application.

Everything is constructed, implemented, and scaled as a single unit. This means that the program must be created in a single language and use a single technological stack and runtime. If there are multiple teams working on different components of the application, they must cooperate to ensure that the application is completed.

No alt text provided for this image
Image taken from https://medium.com/design-microservices-architecture-with-patterns/architecture-comparison-monolithic-vs-microservices-4109265c4806


These single unit applications are often effective until the components of the application became too large and scaling them became a blocker. That's where the microservices have evolved.

Microservice is an architectural pattern that is focused on a group of services that can be independently deployed. Every individual service i.e. payment service versus a catalog service, has their own personalized business rules and its own database that fulfill a specific objective i.e. process payment.

Each microservice will have their own process and code base for testing, deployment, and scaling.

Concept 4. Manual vs. Automated Deployments

Automation solves the problem of optimizing a system process by reducing human inputs, resulting in reduced errors, accelerated delivery speed, enhanced quality, can lowered resources costs, and streamlined business processes.

But before going into that, let's discuss some problems with the manual deployment. With deploying resources manually, the chances of getting simple errors (i.e. incorrect spelling or missed variable name) can lead to consume time for troubleshooting and fixing.

Another issue is that you've received an emergency call asking for an infrastructure support because a server have crashed. How will you set up a new machine? How will you replicate the process to all environments like development, staging and production? What if you have multi-resource infrastructure with 50 azure functions connecting to 4 Azure API gateways in 3 microservices?

With each manual deployment, there is a need to adjust specific values to match the particular environment either before or after the deployment process. This results in a significant amount of additional effort.

Addressing these issues involves implementing automated deployment tools (also known as) infrastructure as code (IAC). Once configured, this tool executes the process automatically, minimizing errors nearly entirely (excluding user-related errors). The tool requires only a single setup effort and operates with remarkable ease.

Concept 4. CI/CD (Continuous integration and Continuous deployment)

Automating the software build, test, delivery and deployment functions reduces manually intensive, error-prone processes. CI/CD is a method to help developers incorporate code changes, spot the bugs faster and these help the operations teams deploy and update software, quickly and easily.

Continuous Integration (CI) represents a DevOps practice in software development, wherein developers frequently combine their code modifications into one repository. Subsequently, when codes are merged, there will be automated builds and tests executed against the code. This practice primarily revolves around the software release's frequent build or integration phase.

The aim of CI is to identify and resolve code issues as early as possible. This can result to having a quality software and reduced time required to fix issues before the final release.

No alt text provided for this image
CICD Process by semaphoreci.com


Continuous Deployment (CD) happens when the code has been built and tested and is ready for release to a certain environment. The aim of CD is to assure that the codebase is ready to be deployed. Imagine doing all changes together in fixing the bugs altogether just before the final release?


要查看或添加评论,请登录

社区洞察

其他会员也浏览了