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 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.
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:
The local development environment is a developer’s computer where they create features of an application.
The integration environment is where developers attempt to merge features into a unified codebase, often using version-control software like Git.
The quality assurance (QA) / testing environment is where tests are executed to ensure the functionality and usability of a project.
The staging environment mimics the final production environment.
Final performance tests can be executed before real users are involved.
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.
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.
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 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 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 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 includes tasks such as resource provisioning, user access, and security management.
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 (IaC) is the act of defining infrastructure configuration in version controlled configuration files.
Infrastructure as Code (IaC) has the following benefits over manual infrastructure configuration:
IaC tools take either a declarative approach or an imperative approach.
Monolithic architecture refers to an application existing within a single codebase which is all deployed onto the same infrastructure.
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 refers to an application architecture where features are distributed across many individual services that communicate with each other.