<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture on Zhengdong.jzd 个人博客</title><link>https://xautjzd.github.io/tags/architecture/</link><description>Recent content in Architecture on Zhengdong.jzd 个人博客</description><generator>Hugo</generator><language>zh-cn</language><copyright>© jzd</copyright><lastBuildDate>Mon, 20 Apr 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://xautjzd.github.io/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>为什么你的系统撑不住了？——从单体到分布式的演进之路</title><link>https://xautjzd.github.io/posts/2026-04-20-distributed-systems/</link><pubDate>Mon, 20 Apr 2026 09:00:00 +0800</pubDate><guid>https://xautjzd.github.io/posts/2026-04-20-distributed-systems/</guid><description>&lt;blockquote&gt;
&lt;p&gt;双十一零点，某电商系统每秒涌入数十万笔订单。数据库连接池耗尽，接口响应时间从毫秒级飙升到数十秒，告警短信一条接一条涌来。工程师们盯着监控大屏，手忙脚乱地重启服务——然而每一次重启，都只是在用创可贴掩盖骨折。&lt;/p&gt;
&lt;p&gt;这不是虚构的故事，这是无数团队在业务快速增长时都会经历的&amp;quot;成长之痛&amp;quot;。而痛苦的根源，往往不是代码写得不好，而是&lt;strong&gt;架构选错了时机&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文将带你完整走过一段旅程：从单体系统的诞生与崩溃，到分布式架构的出现与代价，再到业界如何用一套成熟的工具箱应对这些挑战。这不是一篇罗列概念的字典，而是一张帮你理解取舍的&lt;strong&gt;工程地图&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="一一个系统的成长故事为什么走向分布式"&gt;一、一个系统的成长故事：为什么走向分布式？&lt;/h2&gt;
&lt;h3 id="11-单体架构一切从简单开始"&gt;1.1 单体架构：一切从简单开始&lt;/h3&gt;
&lt;p&gt;每个系统在诞生之初，几乎都是单体架构（Monolithic Architecture）——所有业务逻辑、数据访问、接口层打包在一个进程里，共享同一个代码库，部署一个包搞定所有事。&lt;/p&gt;
&lt;p&gt;这种架构在早期是完全合理的。它有真实的优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开发效率高&lt;/strong&gt;：本地一键启动，函数调用直接跨模块，IDE 里全局搜索无死角&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调试简单&lt;/strong&gt;：一个进程、一份日志、一个调用栈，问题藏不住&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;部署成本低&lt;/strong&gt;：CI/CD 流水线简单，运维不需要协调多个服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但随着业务增长，问题开始浮现。用户模块、订单模块、商品模块、支付模块全部耦合在一起——修改支付逻辑，要重新测试整个系统；商品服务的内存泄漏，会拖垮订单服务的响应；一个小功能上线，需要整个团队停下来做回归测试。&lt;/p&gt;
&lt;p&gt;更致命的是&lt;strong&gt;扩展性&lt;/strong&gt;：单体只能纵向扩展（Scale Up），也就是换更大的机器。但机器的 CPU、内存、磁盘 I/O 都有物理上限，而且扩容成本呈指数增长。当 QPS 达到某个量级，再贵的机器也撑不住。&lt;/p&gt;
&lt;h3 id="12-过渡期拆库分层但治标不治本"&gt;1.2 过渡期：拆库、分层，但治标不治本&lt;/h3&gt;
&lt;p&gt;面对单体的瓶颈，第一反应往往是&lt;strong&gt;垂直拆分&lt;/strong&gt;：按业务域把代码拆开，用户服务、订单服务、商品服务各自独立部署，通过 HTTP 或 RPC 互相调用。&lt;/p&gt;
&lt;p&gt;这是正确方向上的第一步，它确实降低了部分耦合，让团队可以相对独立地迭代各自的服务。然而，多数团队会在这里发现一个残酷的现实：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据库仍然是单点。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所有服务共享同一个数据库实例，数据库成为新的瓶颈和新的单点故障。更棘手的是，跨服务的业务操作（比如&amp;quot;下单同时扣库存&amp;quot;）涉及多张表、多个服务，如何保证数据一致性？用数据库事务？那就回到了紧耦合。不用？那数据就会不一致。&lt;/p&gt;
&lt;p&gt;这个阶段的架构，就像给一辆轿车换了更好的轮胎——跑得快一点了，但本质上它仍然不是一辆卡车。&lt;/p&gt;
&lt;h3 id="13-分布式架构的出现被逼出来的选择"&gt;1.3 分布式架构的出现：被逼出来的选择&lt;/h3&gt;
&lt;p&gt;分布式架构的出现，不是工程师们&amp;quot;追求技术先进性&amp;quot;的主动选择，更多是被现实逼出来的。驱动因素通常有以下几类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高并发压力&lt;/strong&gt;：电商大促、游戏开服、直播带货，流量在短时间内放大数十倍，单机或少量节点根本无法承载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;海量数据&lt;/strong&gt;：日志、行为数据、交易记录呈指数增长，单库存不下，单机查不动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高可用要求&lt;/strong&gt;：互联网服务需要 7×24 不间断，任何单点故障都意味着真实的业务损失&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全球化部署&lt;/strong&gt;：用户分布在不同地区，需要就近服务以降低延迟&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分布式的核心思想是：&lt;strong&gt;将一个大系统拆分为多个自治的小系统，让它们各自负责一部分职责，通过网络协同完成整体目标&lt;/strong&gt;。这样，每个部分可以独立扩展、独立部署、独立容错。&lt;/p&gt;
&lt;p&gt;听起来很美好——但代价是真实的，我们稍后会详细讲。&lt;/p&gt;
&lt;h2 id="二分布式系统是什么"&gt;二、分布式系统是什么？&lt;/h2&gt;
&lt;p&gt;在深入挑战之前，先建立一个清晰的认知框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分布式系统的定义&lt;/strong&gt;：多个独立的计算节点，通过网络通信协同完成任务，对外呈现为一个统一的整体系统。&lt;/p&gt;
&lt;p&gt;它有几个本质特征：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;节点自治&lt;/strong&gt;：每个节点有自己的 CPU、内存、存储，不共享内存（Shared-Nothing 架构）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络通信&lt;/strong&gt;：节点间通过 RPC、HTTP、消息队列等方式交换信息，网络是唯一的通道&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;并发执行&lt;/strong&gt;：多个节点同时工作，时序不可预测&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;局部视图&lt;/strong&gt;：没有任何一个节点能看到系统的全局状态&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分布式不是单一的架构，而是一类架构的统称。在不同场景下，它有不同的形态：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;形态&lt;/th&gt;
 &lt;th&gt;典型代表&lt;/th&gt;
 &lt;th&gt;核心目标&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;微服务架构&lt;/td&gt;
 &lt;td&gt;Spring Cloud、Kubernetes&lt;/td&gt;
 &lt;td&gt;业务解耦、独立部署&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;分布式存储&lt;/td&gt;
 &lt;td&gt;HDFS、Ceph、S3&lt;/td&gt;
 &lt;td&gt;海量数据存储与访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;分布式计算&lt;/td&gt;
 &lt;td&gt;Spark、Flink&lt;/td&gt;
 &lt;td&gt;大规模数据处理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;分布式数据库&lt;/td&gt;
 &lt;td&gt;TiDB、CockroachDB、Cassandra&lt;/td&gt;
 &lt;td&gt;数据水平扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="三分布式的代价你得为可扩展性付出什么"&gt;三、分布式的代价：你得为可扩展性付出什么？&lt;/h2&gt;
&lt;p&gt;这是很多团队低估的部分。分布式系统带来了可扩展性和高可用，但也引入了单体中根本不存在的问题。&lt;/p&gt;</description></item></channel></rss>