System Design Series

Ryan Huang
Mastering the System Design Interview
3 min readSep 8, 2021
Photo by Spencer Davis on Unsplash

This article is a proposal for my blog series. I plan to write a systematic tutorial for system design, especially practical knowledge for interviews. This is a long learning journey for me. I hope you could find it helpful as well.

Foundation

So far, I’ve written a series to refresh memory about fundamental concepts:

After learning basic conceptual knowledge, we can continue our journey to learn more about practical systems. In a system design interview, referencing well-known solutions is always better than reinventing the wheels. So, we need to be knowledgeable about standard solutions used in the industry. In the next series, I will discuss several critical building blocks for modern web applications.

Building Blocks

Figure 1. System building blocks

We can break down most companies’ backend stacks into four layers: edge, application, platform, and infrastructure. Figure 1. shows the anatomy of the four layers. Most system design interviews do not require deep knowledge in the infrastructure layer (except infrastructure teams). So, we will focus on the platform, application, and edge layers.

Platform Layer

Messaging system: Design systems related to message queue, pub-sub, and event-driven architecture, etc.

  • Kafka — A Big Picture: Kafka has become the cornerstone for building messaging system. This article talks about core Kafka architecture.

Distributed Database: Design horizontally scalable and highly available databases.

Caching: Design in-memory cache clusters, like Memcached and Redis.

Distributed File/Blob Storage: Design scalable distributed file system.

Application Layer

Online Service (OLTP): architecture design patterns in micro-service that serve online traffic.

Data Processing (OLAP): system and design pattern for big data processing

Edge Layer

Architecture design patterns for clients (web/mobile), edge network, CDN network, etc.

Many people know the buzzwords of NoSQL, Spark, Flink, Kafka, etc. But this is not enough for system design interviews. While learning each system, we need to understand the fundamental design trade-offs and build a mental model of internal mechanisms. Then, during the interviews, we would be able to explain why we choose one system over another.

What’s Next?

Even with a solid understanding of each building block, combining those “lego” pieces into a complete application still requires skills, practice, and experience. In the final blog series, we can practice putting things together to build full-blown applications. We will closely study several web applications (also popular interview questions), e.g., Facebook messenger, Twitter feeds, Uber marketplace, Ticketmaster, Amazon shopping cart, recommendation system, etc. When we are fluent at stitching building blocks together into a complete application, we would be ready to ace our next system design interview.

--

--