<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>技术管理 on 文艺技术笔记</title>
        <link>https://wenyiblog.top/tags/%E6%8A%80%E6%9C%AF%E7%AE%A1%E7%90%86/</link>
        <description>Recent content in 技术管理 on 文艺技术笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>文艺技术笔记 | 软件工程师文艺</copyright>
        <lastBuildDate>Mon, 29 Jun 2026 12:30:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/tags/%E6%8A%80%E6%9C%AF%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>架构的终极使命，是让所有故事都不发生</title>
        <link>https://wenyiblog.top/2026/06/boring-architecture-wins/</link>
        <pubDate>Mon, 29 Jun 2026 12:30:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/boring-architecture-wins/</guid>
        <description>&lt;h2 id=&#34;一场选型会的典型剧本&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e5%9c%ba%e9%80%89%e5%9e%8b%e4%bc%9a%e7%9a%84%e5%85%b8%e5%9e%8b%e5%89%a7%e6%9c%ac&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一场选型会的典型剧本
&lt;/h2&gt;&lt;p&gt;会议室里，PPT 翻到第 17 页，架构图已经画到了第四层。&lt;/p&gt;
&lt;p&gt;微服务拆分方案、事件驱动总线、CQRS + Event Sourcing、Service Mesh 全栈治理——每多一个组件，在场的人就多兴奋一分。技术负责人激情四射，仿佛不是在搭系统，而是在指挥一场交响乐。&lt;/p&gt;
&lt;p&gt;三年后回头看，活下来的系统往往是最无聊的那套：&lt;strong&gt;单体应用、关系型数据库、同步调用。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这不是段子。这是过去十年里，反复上演的一幕。&lt;/p&gt;
&lt;h2 id=&#34;80-的系统死在过度设计&#34;&gt;&lt;a href=&#34;#80-%e7%9a%84%e7%b3%bb%e7%bb%9f%e6%ad%bb%e5%9c%a8%e8%bf%87%e5%ba%a6%e8%ae%be%e8%ae%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;80% 的系统，死在过度设计
&lt;/h2&gt;&lt;p&gt;先厘清一个事实：绝大多数项目不是死于性能瓶颈，而是死于复杂度失控。&lt;/p&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;业务复杂&lt;/td&gt;
					&lt;td&gt;架构自嗨，分层过多&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;一次发布要改六个服务&lt;/td&gt;
					&lt;td&gt;微服务拆分&lt;/td&gt;
					&lt;td&gt;边界划分失败，拆了等于没拆&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;排查一个问题要跳五个中间件&lt;/td&gt;
					&lt;td&gt;可观测性&lt;/td&gt;
					&lt;td&gt;引入的组件比业务逻辑还多&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;系统跑了一年没人敢动&lt;/td&gt;
					&lt;td&gt;核心链路复杂&lt;/td&gt;
					&lt;td&gt;只有创始人能解释的设计&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;业务根本不需要这些。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;日活不到十万的系统，用 Kafka 做消息总线，相当于用高铁送外卖。数据量不到千万级就上 ClickHouse，相当于买个仓库只放一双鞋。&lt;/p&gt;
&lt;p&gt;不是说这些技术不好，是业务阶段不配。&lt;/p&gt;
&lt;h2 id=&#34;无聊架构的三条铁律&#34;&gt;&lt;a href=&#34;#%e6%97%a0%e8%81%8a%e6%9e%b6%e6%9e%84%e7%9a%84%e4%b8%89%e6%9d%a1%e9%93%81%e5%be%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;无聊架构的三条铁律
&lt;/h2&gt;&lt;h3 id=&#34;铁律一新人第一天就能看懂&#34;&gt;&lt;a href=&#34;#%e9%93%81%e5%be%8b%e4%b8%80%e6%96%b0%e4%ba%ba%e7%ac%ac%e4%b8%80%e5%a4%a9%e5%b0%b1%e8%83%bd%e7%9c%8b%e6%87%82&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;铁律一：新人第一天就能看懂
&lt;/h3&gt;&lt;p&gt;真正的高手搭出来的架构，有一个朴素的标准——&lt;strong&gt;新人入职第一天就能看懂代码结构&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;没有炫技的分层，没有自创的中间件，没有只有创始人能解释的部署拓扑。请求从哪进来，数据存到哪，业务逻辑在哪，一目了然。&lt;/p&gt;
&lt;p&gt;反观那些&amp;quot;高大上&amp;quot;的架构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个用户注册请求，经过 API Gateway → 用户服务 → 事件总线 → 通知服务 → 邮件 Worker → 审计日志 Collector，六跳。&lt;/li&gt;
&lt;li&gt;出了问题？你得先搞懂哪一跳出了问题，然后再搞懂为什么那一跳会出问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;有句话说得好：代码是写给人看的，顺便让机器执行。架构也一样。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;铁律二无聊意味着可预测&#34;&gt;&lt;a href=&#34;#%e9%93%81%e5%be%8b%e4%ba%8c%e6%97%a0%e8%81%8a%e6%84%8f%e5%91%b3%e7%9d%80%e5%8f%af%e9%a2%84%e6%b5%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;铁律二：无聊意味着可预测
&lt;/h3&gt;&lt;p&gt;无聊不是贬义词，在工程领域它是最高赞美。&lt;/p&gt;
&lt;p&gt;可预测意味着：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入 A，一定得到输出 B&lt;/li&gt;
&lt;li&gt;出了问题，能在五分钟内定位&lt;/li&gt;
&lt;li&gt;凌晨三点，不会被告警叫醒&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那些&amp;quot;有趣&amp;quot;的架构呢？异步事件满天飞，数据最终一致但不保证顺序，重试机制叠了三层还是偶尔丢消息。每次出问题都像在破案，而且是那种没有监控录像的悬案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;凌晨三点的告警，是对架构最真实的审判。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;铁律三最好的架构是隐形的&#34;&gt;&lt;a href=&#34;#%e9%93%81%e5%be%8b%e4%b8%89%e6%9c%80%e5%a5%bd%e7%9a%84%e6%9e%b6%e6%9e%84%e6%98%af%e9%9a%90%e5%bd%a2%e7%9a%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;铁律三：最好的架构是隐形的
&lt;/h3&gt;&lt;p&gt;一个好的架构不会出现在技术分享会上，不会成为晋升答辩的亮点，不会写进年终总结的&amp;quot;技术突破&amp;quot;那一栏。&lt;/p&gt;
&lt;p&gt;但它让团队三年没出过 P0 事故。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&amp;ldquo;有趣&amp;quot;架构&lt;/th&gt;
					&lt;th&gt;&amp;ldquo;无聊&amp;quot;架构&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;技术分享会的主角&lt;/td&gt;
					&lt;td&gt;从不上台&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;晋升答辩的核心亮点&lt;/td&gt;
					&lt;td&gt;写不出技术突破&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;出了问题全员排查&lt;/td&gt;
					&lt;td&gt;出了问题五分钟修复&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;核心人离职后无人敢动&lt;/td&gt;
					&lt;td&gt;任何人接手都能跑&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;三年后开始还技术债&lt;/td&gt;
					&lt;td&gt;三年后还是那套代码&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;三个血泪教训&#34;&gt;&lt;a href=&#34;#%e4%b8%89%e4%b8%aa%e8%a1%80%e6%b3%aa%e6%95%99%e8%ae%ad&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;三个血泪教训
&lt;/h2&gt;&lt;h3 id=&#34;教训一微服务拆得太早&#34;&gt;&lt;a href=&#34;#%e6%95%99%e8%ae%ad%e4%b8%80%e5%be%ae%e6%9c%8d%e5%8a%a1%e6%8b%86%e5%be%97%e5%a4%aa%e6%97%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;教训一：微服务拆得太早
&lt;/h3&gt;&lt;p&gt;某创业团队，日活三千，拆了十二个微服务。每个服务独立部署、独立数据库、独立监控。听起来很规范。&lt;/p&gt;
&lt;p&gt;结果呢？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一次下单操作要调用四个服务，延迟从 200ms 变成 1.2s&lt;/li&gt;
&lt;li&gt;数据库事务变成了分布式事务，Saga 模式写了一千行补偿代码&lt;/li&gt;
&lt;li&gt;团队只有六个人，每人要维护两三个服务，精力严重分散&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;六个人用十二个微服务，不是架构先进，是给自己找活干。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;后来全部合并回单体，用模块化分包的方式组织代码。上线速度快了三倍，Bug 少了七成。&lt;/p&gt;
&lt;h3 id=&#34;教训二消息队列滥用&#34;&gt;&lt;a href=&#34;#%e6%95%99%e8%ae%ad%e4%ba%8c%e6%b6%88%e6%81%af%e9%98%9f%e5%88%97%e6%bb%a5%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;教训二：消息队列滥用
&lt;/h3&gt;&lt;p&gt;一个内部管理系统，日操作量不到一万。架构师引入了 Kafka 做事件驱动。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;解耦！异步！削峰！&amp;ldquo;选型会上说得很美。&lt;/p&gt;
&lt;p&gt;实际上呢？系统从来没有遇到过需要削的峰，从来没有超过 QPS 500 的并发。Kafka 的三个 Broker 常年 CPU 使用率 2%，消息积压为零。&lt;/p&gt;
&lt;p&gt;但引入的代价是实实在在的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;消息丢失了要排查 Consumer Group 的 Offset&lt;/li&gt;
&lt;li&gt;消息重复了要做幂等处理&lt;/li&gt;
&lt;li&gt;消息顺序乱了要加排序逻辑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;为了解决一个不存在的问题，引入了三个真实的问题。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;教训三中台化陷阱&#34;&gt;&lt;a href=&#34;#%e6%95%99%e8%ae%ad%e4%b8%89%e4%b8%ad%e5%8f%b0%e5%8c%96%e9%99%b7%e9%98%b1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;教训三：中台化陷阱
&lt;/h3&gt;&lt;p&gt;某公司花一年搭数据中台，接了八条业务线。理想很丰满：统一口径、统一指标、统一服务。&lt;/p&gt;
&lt;p&gt;现实很骨感：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每条业务线的指标定义都不一样，统一不了&lt;/li&gt;
&lt;li&gt;中台团队响应速度跟不上业务节奏，业务线开始绕过中台自己搞&lt;/li&gt;
&lt;li&gt;中台变成了&amp;quot;瓶颈台&amp;rdquo;，所有人的请求都排队等它处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一年后，中台团队从 30 人缩到 5 人，维护一个谁都不用的统一报表系统。&lt;/p&gt;
&lt;h2 id=&#34;什么时候该用有趣的架构&#34;&gt;&lt;a href=&#34;#%e4%bb%80%e4%b9%88%e6%97%b6%e5%80%99%e8%af%a5%e7%94%a8%e6%9c%89%e8%b6%a3%e7%9a%84%e6%9e%b6%e6%9e%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;什么时候该用&amp;quot;有趣&amp;quot;的架构？
&lt;/h2&gt;&lt;p&gt;当然，不是说永远不要用复杂架构。关键判断标准很简单：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;当你不用它就真的扛不住的时候。&lt;/strong&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;日活 &amp;lt; 10万&lt;/td&gt;
					&lt;td&gt;单体 + 关系型数据库&lt;/td&gt;
					&lt;td&gt;微服务 + 分布式数据库&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;日活 10万-500万&lt;/td&gt;
					&lt;td&gt;模块化单体或粗粒度服务&lt;/td&gt;
					&lt;td&gt;细粒度微服务 + Service Mesh&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;日活 &amp;gt; 500万&lt;/td&gt;
					&lt;td&gt;微服务 + 消息队列 + 分库分表&lt;/td&gt;
					&lt;td&gt;继续单体硬扛&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;峰值 QPS &amp;lt; 1000&lt;/td&gt;
					&lt;td&gt;同步调用&lt;/td&gt;
					&lt;td&gt;事件驱动 + 异步补偿&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;数据量 &amp;lt; 1亿条&lt;/td&gt;
					&lt;td&gt;MySQL / PostgreSQL&lt;/td&gt;
					&lt;td&gt;ClickHouse / TiDB&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;架构的复杂度应该跟着业务的复杂度长，而不是跟着技术人的野心长。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;一个反直觉的真相&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e4%b8%aa%e5%8f%8d%e7%9b%b4%e8%a7%89%e7%9a%84%e7%9c%9f%e7%9b%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一个反直觉的真相
&lt;/h2&gt;&lt;p&gt;技术人最容易犯的错误，是把架构当成了作品。&lt;/p&gt;
&lt;p&gt;作品要表达自我，要展示能力，要让同行觉得&amp;quot;这哥们水平真高&amp;rdquo;。但架构不是艺术品，它是基础设施。基础设施的最高境界是——&lt;strong&gt;你根本意识不到它的存在&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你每天走在平坦的马路上，不会觉得路面设计有多厉害。但如果路上每隔十米就有一个减速带、一个环岛、一个立交桥，你会疯掉。&lt;/p&gt;
&lt;p&gt;架构也是如此。好的架构就是那条平坦的马路，让你把全部注意力放在目的地上，而不是路上。&lt;/p&gt;
&lt;h2 id=&#34;把精力留给真正值得兴奋的地方&#34;&gt;&lt;a href=&#34;#%e6%8a%8a%e7%b2%be%e5%8a%9b%e7%95%99%e7%bb%99%e7%9c%9f%e6%ad%a3%e5%80%bc%e5%be%97%e5%85%b4%e5%a5%8b%e7%9a%84%e5%9c%b0%e6%96%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;把精力留给真正值得兴奋的地方
&lt;/h2&gt;&lt;p&gt;选无聊的架构，不是因为技术人不应该有追求。而是因为技术人最大的追求，应该是解决真正的业务问题。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户的留存率为什么在下降？&lt;/li&gt;
&lt;li&gt;新功能上线两周了，使用率不到 10%？&lt;/li&gt;
&lt;li&gt;竞品的某个功能为什么做得比你好？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题，比 CQRS 怎么实现、Service Mesh 怎么配置、分布式事务怎么补偿——&lt;strong&gt;重要一万倍&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;架构的终极使命，不是让技术人兴奋，而是让所有故事都不发生。没有故障、没有事故、没有凌晨三点的夺命连环 call。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后你终于可以安心地想一些真正重要的事。&lt;/strong&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
