The anatomy of a horizontally scalable distributed application

Abracadabra
6 min readDec 23, 2020

Motivation of this post

It’s a daunting task for many engineers to design a fully horizontally scalable application. In practice, very few of us have the opportunities to build such systems end to end. The lack of hands on experience can be compensated by years of experience working indirectly on each technology(load balancer, sharding, etc). But it takes time to master all tools and design patterns.

In hindsight, I find such design is quite straightforward if one has the holistic picture of

  • what problems need to be solved(consistency, latency, availability, durability)
  • how each technology solve one specific problem
  • how should the technologies be assembled and the tradeoffs

Sadly, I’ve yet to find any book or online material trying to teach this piece of knowledge from the application infrastructure angle. There are books that go quite deep on each sub topic, like Designing Data-Intensive Applications. However, such books still didn’t teach readers how to think about system design from a practitioner’s perspective.

This post aims to address this problem. After reading, experienced engineers should feel comfortable with distributed system design problems at work or at job interviews. Engineers with limited knowledge on the concepts in this post will feel challenged. But they should know what to learn on the path of a competent architect.

--

--