DEV Community

Anurag Vishwakarma
Anurag Vishwakarma

Posted on

The three pillars of how to scale any system horizontally

Image description

Horizontally scaling a system to handle more load is vital but comes with challenges. There are three core strategies to scale out: distributing, caching, and asynchronous processing. Each approach also involves tradeoffs to consider.

Distributing

Distributing spreads the workload across multiple hardware resources or systems:

  • Common tactics include load balancing and sharding data across nodes
  • Benefits
    • Handles more users and transactions without single point of failure
    • If one node fails, others take over for reliability
  • Drawbacks
    • Increases complexity around networking, deployment, and data consistency
    • Sharding introduces specific data consistency challenges

Caching

Caching stores frequently accessed data in fast access storage:

  • Benefits
    • Reduces load on backend systems
    • Lowers response times by avoiding repeat queries
  • Drawbacks
    • Potential for increased stale data
    • Requires managing scaling of cache resources

Asynchronous Processing

Async decouples non-critical tasks using queues and events:

  • Benefits
    • Improves user experience by keeping app responsive
    • Enables better resource use by spreading loads
  • Drawbacks
    • Increases complexity around failure handling and consistency
    • Eventual delays can still degrade consistency

In distributed systems, there are inevitable messy tradeoffs to make.

Read more on my blog.

Top comments (0)