Codecademy Logo

DevOps Infrastructure

Infrastructure Definition

Infrastructure is the set of hardware and software components that are used to develop, test, deploy and host web services.

Examples of these components include servers, switches, routers, and operating systems.

Operations Team

Operations teams are traditionally responsible for managing an application’s infrastructure.

Services provided by the Operations team include infrastructure configuration, device management, incidence and security response, and ongoing maintenance.

virtualization

Virtualization is the process of running a simulated virtual computer on a host machine. These virtual computers, usually called virtual machines (VMs), are distinct environments each with their own operating system (OS), dependencies such as binaries/libraries, and users. Virtualization allows multiple virtual computers to be run on a single host machine.

Containerization

Containerization is a form of virtualization in which multiple virtual environments called containers can share the operating system of the host physical machine. Containers differ from virtual machines in that they share the underlying operating system. Containers are fast, lightweight and portable.

Cloud-based infrastructure

Cloud-based infrastructure refers to infrastructure and computing resources that are made available to users over the internet. Cloud resources are generally managed and housed by a dedicated third-party provider.

Serverless infrastructure

Serverless infrastructure refers to cloud services that allow businesses to develop applications without configuring infrastructure. Applications still run on servers, but the provisioning, configuration, and maintenance of servers are invisible to developers.

Infrastructure Configuration

Infrastructure configuration includes tasks such as resource provisioning, user access, and security management.

Manual Infrastructure Configuration

Historically, infrastructure configuration has been performed manually by people. This has led to high costs, inconsistency across configurations, and difficulty in pinpointing sources of errors.

Infrastructure as Code

Infrastructure as Code (IaC) is the act of defining infrastructure configuration in version controlled configuration files.

IaC Benefits

Infrastructure as Code (IaC) has the following benefits over manual infrastructure configuration:

  • Speed: Configuration can be faster since it is easily automated.
  • Consistency: Infrastructure state consistently matches what is specified in configuration files.
  • Visibility: Version control makes is easy to tell exactly when and where changes are made.
  • Cost: Fewer staff hours are spent configuring and troubleshooting infrastructure.

IaC Approaches

IaC tools take either a declarative approach or an imperative approach.

  • Declarative: configuration files describe the desired state of infrastructure.
  • Imperative: configuration files list the steps or commands needed for configuring infrastructure.

Monolithic Architecture

Monolithic architecture refers to an application existing within a single codebase which is all deployed onto the same infrastructure.

N-tier Architecture

N-tier architecture refers to an application architecture that is split into several distinct layers which can be hosted on separate servers. The most common type is three-tier architecture, with a presentation layer, logic layer, and data layer.

Microservices Architecture

Microservices architecture refers to an application architecture where features are distributed across many individual services that communicate with each other.

Environments

An environment, in the context of creating and deploying software, is the subset of infrastructure resources used to execute a program under specific constraints. Common examples include:

  • Local development environment
  • Integration environment
  • QA/Testing environment
  • Staging environment
  • Production environment

Local Development Environments

The local development environment is a developer’s computer where they create features of an application.

Integration Environments

The integration environment is where developers attempt to merge features into a unified codebase, often using version-control software like Git.

Testing Environments

The quality assurance (QA) / testing environment is where tests are executed to ensure the functionality and usability of a project.

Staging Environments

The staging environment mimics the final production environment.

Final performance tests can be executed before real users are involved.

Production Environments

The production environment refers to the infrastructure resources that support the application accessed by clients.

This infrastructure consisted of hardware and software components including databases, servers, APIs, and external services scaled for real-world usage.

in-house infrastructure

Traditional infrastructure (sometimes called “in-house infrastructure”) refers to infrastructure components that are housed on company premises and managed by company staff. Some challenges with traditional infrastructure include hardware failures, cyber-attacks, and high maintenance costs.

Learn More on Codecademy