> For the complete documentation index, see [llms.txt](https://ret2basic.gitbook.io/ctfnote/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ret2basic.gitbook.io/ctfnote/computer-science/distributed-systems/introduction/scaling-techniques.md).

# Scaling Techniques

## "Scaling Up" vs. "Scaling Out"

1. **Scaling up**: improving capacity, e.g., increasing memory, upgrading CPUs, or replacing network modules.
2. **Scaling out**: expanding the distributed system by deploying more machines

## Scaling Out

In particular, "scaling out" includes 3 techniques:

1. **Hiding communication latencies**
   * **asynchronous** communication
   * **server** check form vs. **client** check form
2. **Partitioning and distribution**
   * E.g., **DNS**
   * tree of **domains** and **zones**
3. **Replication**
   * **Caching**
   * Leads to **consistency** problems
   * **OK** for Web users but **not OK** for electronic stock exchanges and auctions
