<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Distributed Systems on Chen Kai Blog</title><link>https://www.chenk.top/en/tags/distributed-systems/</link><description>Recent content in Distributed Systems on Chen Kai Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 30 May 2026 09:00:00 +0000</lastBuildDate><atom:link href="https://www.chenk.top/en/tags/distributed-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Product Thinking (1): Architecture Design — From Monolith to Autonomous Agents</title><link>https://www.chenk.top/en/product-thinking/01-architecture/</link><pubDate>Sat, 30 May 2026 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/product-thinking/01-architecture/</guid><description>&lt;h2 id="the-shape-of-a-system" class="heading-anchor">The Shape of a System&lt;a href="#the-shape-of-a-system" class="heading-link" aria-label="Permalink to this section" title="Copy link to this section">#&lt;/a>
&lt;/h2>&lt;p>Every architecture is a frozen argument. It records what you believed about the problem at the time you committed the code. Looking back across four systems I built over eighteen months — a marketing content platform (~70k lines TypeScript), a zero-dependency skill routing engine, an autonomous research agent (~315k lines Python), and a multi-model coding orchestrator — I can trace how my architectural instincts shifted. Not always forward. Sometimes sideways. But there is a clear progression: from &amp;ldquo;keep it in one process&amp;rdquo; to &amp;ldquo;let the agents govern themselves.&amp;rdquo;&lt;/p></description></item><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 (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>Databases (7): Distributed Transactions — 2PC, Saga, and Why Consensus Is Hard</title><link>https://www.chenk.top/en/databases/07-distributed-transactions/</link><pubDate>Sun, 28 Apr 2024 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/databases/07-distributed-transactions/</guid><description>&lt;p>Everything we covered about transactions in Article 3 assumed a single database server: one machine, one transaction log, one lock manager. When your data spans multiple machines—through sharding, using microservices with separate databases, or replicating with strong consistency—you face the hardest problem in distributed systems: how do you get multiple machines to agree?&lt;/p>
&lt;hr>
&lt;h2 id="the-distributed-transaction-problem" class="heading-anchor">The Distributed Transaction Problem&lt;a href="#the-distributed-transaction-problem" class="heading-link" aria-label="Permalink to this section" title="Copy link to this section">#&lt;/a>
&lt;/h2>&lt;p>Consider an e-commerce system with separate services for orders and inventory, each with its own database:&lt;/p></description></item><item><title>Databases (6): Replication and Partitioning — Scaling Beyond One Machine</title><link>https://www.chenk.top/en/databases/06-replication-and-partitioning/</link><pubDate>Fri, 26 Apr 2024 09:00:00 +0000</pubDate><guid>https://www.chenk.top/en/databases/06-replication-and-partitioning/</guid><description>&lt;p>A single database server can handle a remarkable amount of load — a well-tuned PostgreSQL instance can serve tens of thousands of queries per second. But eventually you hit a wall. Maybe you need more read throughput than one CPU can provide. Maybe you need your data to survive a data center fire. Maybe your dataset exceeds what fits on a single disk. That is when you need replication and partitioning.&lt;/p></description></item></channel></rss>