Scalability is a system’s ability to add resources to keep up with growing demand. A system with great scalability will be able to do this without interrupting services.
Vertical scaling means adding computing resources to existing systems. This can be achieved in a variety of ways such as increasing network speeds or the available storage or RAM of servers.
Vertical scaling is relatively simple and affordable, however, the application could experience downtime as a result of performing upgrades.
Horizontal scaling means increasing system resources by adding nodes (i.e. servers) to the system. Each node is able to serve the same application and a load balancer distributes requests across the nodes.
Horizontal scaling is complex to setup but can be achieved without any downtime for existing servers.
Elasticity is the ability of a system to add or subtract resources automatically in response to fluctuating demand. An elastic system reduces resources when demand slows, helping to avoid unnecessary costs with pay-per-use infrastructure services.
In software development, dependencies are external files and programs that are not part of an application but are used by it.
According to RedHat, “Orchestration is the automated configuration, management, and coordination of infrastructure.”
Orchestration software, such as Kubernetes, controls many components working together in harmony. This software can
- Deploy containers across many servers
- Restart failed containers
- Roll out updates without any downtime
- Horizontally scale containerized applications
Immutable infrastructure means that servers are not changed once they are created. Instead, when infrastructure configurations change, new servers are created and old ones are destroyed.
Immutable infrastructure and the use of configuration files guarantees that all servers are created in the same manner and eliminates the risk of configuration drift.
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.
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.
Infrastructure as Code
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:
- 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.