
Computing a cluster
Put simply, a cluster is a set of computers (often called nodes) that work in tandem on the same workload and can distribute loads across all available members of the cluster to increase performance, while, at the same time, allowing for self-healing and availability. Note that the term server wasn't used before as, in reality, any computer can be added to a cluster. Made from a simple Raspberry Pi to multiple CPU servers, clusters can be made from a small two-node configuration to thousands of nodes in a data center.
Here is an example of a cluster:

Technically speaking, clustering allows workloads to scale performance by adding servers of the same kind with similar resource characteristics. Ideally, a cluster will have homogeneous hardware to avoid problems where nodes have different performance characteristics and, at the same time, make maintenance reasonably identical—this means hardware with the same CPU family, memory configuration, and software. The idea of adding nodes to a cluster allows you to compute workloads to decrease their processing time. Depending on the application, compute times can sometimes even decrease linearly.
To further understand the concept of a cluster, imagine that you have an application that takes historical financial data. The application then receives such data and creates a forecast based on the stored information. On a single node, the forecast process (processes on a cluster are typically named jobs) takes roughly six days to complete, as we're dealing with several terabytes (TB) of data. Adding an extra node with the same characteristics decreases the processing time to four days. Adding a third node further decreases the time it takes to complete to three days.
Note that while we added three times the number of compute resources, the compute time only decreased by approximately half. Some applications can scale performance linearly, while others don't have the same scalability, requiring more and more resources for fewer gains, up to the point of diminishing returns. Adding more resources to obtain minimal time gain is not cost-effective.
With all this in mind, we can point out several characteristics that define a cluster:
- It can help reduce processing times by adding compute resources
- It can scale both vertically and horizontally
- It can be redundant, that is, if one node fails, others should take the workload
- It can allow for increased resources to be available for applications
- It is a single pool of resources rather than individual servers
- It has no single point of failure