<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>System Design on Chen Kai Blog</title><link>https://www.chenk.top/en/categories/system-design/</link><description>Recent content in System Design on Chen Kai Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 27 Jul 2025 09:00:00 +0000</lastBuildDate><atom:link href="https://www.chenk.top/en/categories/system-design/index.xml" rel="self" type="application/rss+xml"/><item><title>System Design (8): Case Studies — URL Shortener, Chat System, News Feed</title><link>https://www.chenk.top/en/system-design/08-case-studies/</link><pubDate>Sun, 27 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/08-case-studies/</guid><description>&lt;p>The best way to learn system design is to practice it. Reading about individual components — caching, queues, load balancers — builds your vocabulary, but designing a complete system is where you learn to compose those components into something that actually works.&lt;/p>
&lt;p>This article walks through three classic system design problems end to end. Each follows the framework from the first article in this series: clarify requirements, estimate scale, design the architecture, deep dive into critical components, and identify bottlenecks.&lt;/p></description></item><item><title>System Design (7): Data Pipelines — Batch, Stream, and the Lambda Architecture</title><link>https://www.chenk.top/en/system-design/07-data-pipelines/</link><pubDate>Thu, 24 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/07-data-pipelines/</guid><description>&lt;p>Every second, a large e-commerce platform generates thousands of data points: page views, search queries, add-to-cart events, purchases, inventory changes, price updates, and delivery status changes. This raw data is useless in its original form — scattered across dozens of services, stored in different formats, and arriving at unpredictable rates. The system that transforms this raw data into actionable insights — real-time dashboards, personalized recommendations, fraud detection alerts, business reports — is the data pipeline.&lt;/p></description></item><item><title>System Design (6): Microservices vs Monoliths — The Honest Tradeoff</title><link>https://www.chenk.top/en/system-design/06-microservices-vs-monoliths/</link><pubDate>Tue, 22 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/06-microservices-vs-monoliths/</guid><description>&lt;p>In 2020, the team behind Segment — a customer data platform processing billions of events per month — published a blog post titled &amp;ldquo;Goodbye Microservices.&amp;rdquo; They had decomposed their monolith into over 140 microservices, and the result was not the engineering utopia they expected. Instead, they spent most of their time fighting the complexity of the distributed system itself: service discovery failures, cascading timeouts, inconsistent deployment pipelines, and an explosion of inter-service communication bugs. They consolidated back to a monolith and reported dramatic improvements in developer productivity and system reliability.&lt;/p></description></item><item><title>System Design (5): Message Queues and Event-Driven Architecture</title><link>https://www.chenk.top/en/system-design/05-message-queues/</link><pubDate>Sat, 19 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/05-message-queues/</guid><description>&lt;p>In 2011, LinkedIn&amp;rsquo;s engineering team was struggling with a problem that many growing companies face. Their monolithic application had become a web of tightly-coupled services, each making synchronous calls to half a dozen others. When any single service went down, cascading failures rippled through the entire system. Deploying a change to one service required coordinating with every team whose service it called.&lt;/p>
&lt;p>Their solution was Apache Kafka — a distributed event log that decoupled producers from consumers. Instead of Service A calling Service B directly, Service A writes an event to Kafka, and Service B reads it when it is ready. If Service B is down, the events wait. If Service B is slow, it processes at its own pace. The producer does not need to know or care about the consumer.&lt;/p></description></item><item><title>System Design (4): Caching — Where to Cache, What to Evict, and When Caching Hurts</title><link>https://www.chenk.top/en/system-design/04-caching-strategies/</link><pubDate>Thu, 17 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/04-caching-strategies/</guid><description>&lt;p>There is an old joke in computer science that the two hardest problems are cache invalidation, naming things, and off-by-one errors. The joke works because cache invalidation really is that hard. But caching is also the single most effective technique for improving system performance. A well-placed cache can reduce latency by 100x, cut database load by 90%, and save thousands of dollars in infrastructure costs per month.&lt;/p>
&lt;p>The trick is knowing where to cache, what patterns to use, and — critically — when caching will make your system worse instead of better.&lt;/p></description></item><item><title>System Design (3): API Design — REST, gRPC, GraphQL, and Choosing Wisely</title><link>https://www.chenk.top/en/system-design/03-api-design/</link><pubDate>Tue, 15 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/03-api-design/</guid><description>&lt;p>In 2015, Facebook published a blog post introducing GraphQL, describing how their mobile app was drowning in REST API calls. A single news feed screen required data from posts, users, comments, likes, and media — each a separate endpoint, each returning far more data than the client needed. The over-fetching was killing mobile performance on slow networks. GraphQL was their solution, but it was not a universal solution.&lt;/p>
&lt;p>Every API style exists because it solves a specific set of problems well, and every API style creates new problems. The skill is matching the right protocol to the right context.&lt;/p></description></item><item><title>System Design (2): DNS, CDN, and Load Balancing — The First Three Hops</title><link>https://www.chenk.top/en/system-design/02-dns-cdn-load-balancing/</link><pubDate>Sat, 12 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/02-dns-cdn-load-balancing/</guid><description>&lt;p>In 2017, a single misconfigured DNS record at a major cloud provider took down a significant portion of the internet for several hours. Thousands of websites became unreachable — not because their servers were down, but because the system that translates domain names into IP addresses stopped working correctly. The incident was a stark reminder that the infrastructure we take for granted — DNS, CDN, load balancers — is the foundation everything else rests on.&lt;/p></description></item><item><title>System Design (1): Thinking in Systems — Load, Latency, and the Art of Estimation</title><link>https://www.chenk.top/en/system-design/01-thinking-in-systems/</link><pubDate>Thu, 10 Jul 2025 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/system-design/01-thinking-in-systems/</guid><description>&lt;p>A friend once asked me to help debug a performance problem. Their photo-sharing app worked fine in development but collapsed under production traffic. The database was melting, the API gateway was timing out, and users were seeing 504 errors. When I asked how many requests per second the system was handling, the answer was &amp;ldquo;I don&amp;rsquo;t know.&amp;rdquo; When I asked what the expected load was, the answer was &amp;ldquo;I didn&amp;rsquo;t think about that.&amp;rdquo;&lt;/p></description></item></channel></rss>