↓ Ir para o conteúdo principal

← todas as notas

📎 Webclip

How to design a system for scale

Designing systems for scale is presented as a key skill for software engineers as applications and user bases grow. The issue compares three main techniques for scaling and says each one fits different needs, with trade-offs in flexibility, cost, and operational complexity.

Reading notes
#

  • Adding server clones is the simplest and cheapest way to scale from scratch, because identical servers can share incoming load through a load balancer.
  • This approach works best for stateless services, where any request can go to any server and return the same result.
  • The main difficulty with clones is stateful services, since shared state must be synchronized across servers.
  • Functional partitioning splits a system into smaller independent components, either by infrastructure role or by application service.
  • This lets different parts scale separately and lets teams work on separate services with less interference.
  • The trade-off is more management, more initial effort, and a limit beyond which partitioning makes the system too complex.
  • Data partitioning divides a dataset across multiple machines so each server handles only part of the data.
  • It can improve processing and storage, support growth by adding servers, and in the right setup allow very large scale.
  • Its challenges are tracking where data lives and handling queries that need more than one partition.