<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 架构师必备</title>
	<atom:link href="https://www.phppan.com/tag/%e6%9e%b6%e6%9e%84%e5%b8%88%e5%bf%85%e5%a4%87/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 04 Apr 2026 01:19:58 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>架构师必备：要懂点信息架构</title>
		<link>https://www.phppan.com/2025/08/architects-must-know-a-little-about-information-architecture/</link>
		<comments>https://www.phppan.com/2025/08/architects-must-know-a-little-about-information-architecture/#comments</comments>
		<pubDate>Sun, 17 Aug 2025 11:56:36 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[信息架构]]></category>
		<category><![CDATA[架构师必备]]></category>

		<guid isPermaLink="false">https://www.phppan.com/?p=2407</guid>
		<description><![CDATA[看信息架构还是很多年前的事情了，大概是在 2010 年吧，有一本叫《Web 信息架构》的书，当时还在一线，想去 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>
<p>看信息架构还是很多年前的事情了，大概是在 2010 年吧，有一本叫《Web 信息架构》的书，当时还在一线，想去做一个架构师，看到架构两个字就冲动买了下来。</p>
<p>有道是「买书一时爽，读书火葬场」</p>
<p>当然，这本书后面还是看完了，和想象中的不一样，但是也提升了自己某些方面的认知，现在回想起来还是有一些作用的，至少知道了一些信息架构的基本逻辑，在 battle 的时候也有一些逻辑来讲了。</p>
<p>最近回顾架构师必备的一些知识点，回想起来，也是必备点之一，于是温故一下。</p>
<h2 data-id="heading-0">为什么架构师要懂信息架构</h2>
<p>大多数技术架构师在设计系统时，90% 以上的精力放在了技术实现上，却忽略了最终用户如何使用这个系统。</p>
<p>以下这样的场景我们应该都见过：</p>
<ul>
<li>功能强大的 ERP 系统，员工需要培训一个月才能熟练使用</li>
<li>配置灵活的中台管理系统，业务人员宁愿用 Excel 也不愿意打开</li>
<li>技术先进的数据平台，分析师找个报表要点击七八次</li>
</ul>
<p>这些系统在技术层面可能已经不错了，但在信息组织和呈现上却是不尽人意。</p>
<p>作为架构师，我们不仅要考虑系统怎么实现，还要<strong>考虑信息怎么组织、怎么流转、怎么被用户理解和使用</strong>。这就是信息架构要解决的问题。</p>
<h2 data-id="heading-1">信息架构到底是什么</h2>
<p>提到信息架构，很多技术同学的第一反应是：&#8221;这不是产品经理或 UX/UI 设计师的事吗？&#8221;</p>
<p>有些偏了。用一个简单的类比来解释一下：</p>
<p>如果把系统比作一座大楼，技术架构就像是大楼的钢筋混凝土结构，决定了楼能建多高、承重多少。而信息架构则像是大楼的空间布局和导视系统，决定了人们在楼里能不能找到想去的地方。</p>
<p>更准确地说，信息架构 = 信息 + 架构。</p>
<p>这里的「信息」是指用户需要理解和使用的所有内容：</p>
<ul>
<li><strong>功能</strong>：系统能做什么（订单管理、库存查询、报表统计）</li>
<li><strong>内容</strong>：系统展示什么（商品信息、客户资料、交易记录）</li>
<li><strong>概念</strong>：系统如何定义事物（什么是&#8221;订单&#8221;、&#8221;客户&#8221;、&#8221;库存&#8221;）</li>
<li><strong>流程</strong>：任务如何完成（下单流程、退货流程、审批流程）</li>
</ul>
<p>同时也包括用户在 Web 上可以看到的文本、图片、影音等元素。</p>
<p>而&#8221;架构&#8221;则是如何组织这些信息：</p>
<ul>
<li><strong>分类</strong>：按什么逻辑分组（按部门？按流程？按对象？）</li>
<li><strong>层级</strong>：分几层，每层放什么</li>
<li><strong>关联</strong>：不同信息之间如何连接</li>
<li><strong>路径</strong>：用户如何找到需要的信息，如导航，搜索</li>
</ul>
<p>根据维基百科的定义：信息架构（英语：Information Architecture，缩写IA）是在信息环境中，影响系统组织、导览、及分类标签的组合结构。它是也基于信息架构方法论，并运用内容管理技术来管理和组织信息的一个专门学科。</p>
<p>理查德·索·乌尔曼（Richard Saul Wurman）在 1976 年创造了&#8221;信息架构&#8221;这个术语。他当时面对的问题，在今天看来更加严峻——信息爆炸。</p>
<h2 data-id="heading-2">人类认知的局限与信息架构的价值</h2>
<p>人类感官系统每秒可以接收 <strong>高达 10 亿比特</strong>的信息（如视网膜、听觉系统等能高速采集大量感官数据），但我们<strong>大脑用于行为和认知的信息处理速度</strong>却极为有限。</p>
<p>根据 <strong>2025 年 4 月发表于《Neuron》期刊</strong>的综述文章《<em>The unbearable slowness of being: Why do we live at 10 bits/s?</em>》，美国加州理工学院的研究团队通过实验和信息论分析发现：</p>
<blockquote><p><strong>人类大脑在执行诸如打字、说话、阅读、听力理解等任务时，信息处理速度平均只有约 10 比特/秒</strong>。</p></blockquote>
<p>量化理解大概是这样：</p>
<ul>
<li><strong>英语听力理解</strong>：约 13 比特/秒</li>
<li><strong>打字行为</strong>：约 10 比特/秒（100词/分钟 ≈ 10 bits/s）</li>
<li><strong>语言表达、复杂任务处理</strong>：也普遍维持在 10 bits/s 左右</li>
</ul>
<p>这就像：</p>
<blockquote><p>“感官系统是一个每秒吸入瀑布的超级吸尘器，而大脑处理系统是只能一滴一滴滴水的慢筛子。”</p></blockquote>
<p>刻意注意一下，你会发现你每天会见到很多的人和事，实际能在你脑海里面留下印象的寥寥无几。</p>
<p>我们大脑处理信息的速度这么慢，其实就像你用一个老旧手机加载高清视频，根本带不动。这时候，最重要的不是往里塞更多内容，而是<strong>怎么把内容排好、简化、分清主次</strong>。这就是信息架构的价值：它就像一个聪明的「内容管家」，帮你把复杂的信息分门别类、有序呈现，让大脑不至于崩溃。不是你记不住，而是信息没被安排好。</p>
<p>我们刷网页、看报告、看PPT，很多时候不是内容不好，而是太乱，不知道看哪里，不知道重点在哪。大脑每秒只能处理 10 比特的信息，就像一个只能看一小角的手电筒，所以<strong>信息架构的作用就是：把重要的东西放在光照能到的地方</strong>，其他的先收起来，或者慢慢来。这种结构化的呈现，既是对读者的呵护，也是对注意力的尊重。</p>
<p>无论我们是在做一份 PPT 汇报、写一篇文章，还是在设计一个产品页面，真正的挑战不是“讲得多厉害”，而是<strong>让人听懂、记住，并且愿意继续往下看</strong>。这就要求我们站在对方的认知角度去思考，用结构帮他减少思考负担。换句话说：<strong>做内容不是堆信息，是搭桥——在信息和人之间，搭一座他们能走得过去的桥。</strong></p>
<h2 data-id="heading-3">架构师会遇到的信息架构场景</h2>
<p>架构师在实际工作中会遇到的信息架构场景：</p>
<ol>
<li><strong>系统功能菜单设计</strong>：虽然通常由产品负责，但架构师需要评估：功能模块如何分组？菜单层级是否合理？是否与底层服务划分一致？</li>
<li><strong>业务概念统一</strong>：同一个业务实体在不同模块中的命名是否一致？比如&#8221;客户&#8221;在 CRM 中叫 Customer，在订单中叫 Buyer，在财务中叫&#8221;付款方&#8221;，这种不一致会从代码层面影响到用户理解。在实际工作过程中，微服务的拆分和设计，领域建模，数据加设计都需要基于业务概念统一来做。</li>
<li><strong>API 对外暴露的信息组织</strong>：对外 API 的资源如何分类和命名？开发者文档的组织结构？这直接影响外部开发者对系统的理解。</li>
<li><strong>错误信息体系</strong>：用户能看到的错误提示如何分类？错误码如何设计才能让用户（包括运维人员）快速理解问题？再远一些会涉及监控系统和监控指标的设计。</li>
<li><strong>多端信息一致性</strong>：Web、App、小程序等多端的功能和信息如何保持一致？哪些功能在哪些端出现？</li>
<li><strong>系统集成时的信息映射</strong>：当多个系统集成时，如何统一不同系统中的概念和术语？如何设计统一的信息视图？</li>
</ol>
<p><strong>架构师的技术决策会直接影响用户（包括最终用户、运维人员、开发者）对系统的理解和使用</strong>。</p>
<h2 data-id="heading-4">构建信息架构的核心系统</h2>
<p>信息架构不是简单的分类和排序，一般包含四个核心系统：</p>
<h3 data-id="heading-5">1. 组织系统：如何分类信息</h3>
<p>组织系统是信息架构的基础，它决定了我们用什么维度和逻辑来分类信息。就像图书馆需要决定是按主题、作者还是出版时间来排列书籍，系统设计时也需要选择合适的组织原则——是按业务流程、用户角色、数据对象，还是使用场景来组织功能和内容。这个选择没有绝对的对错，关键在于是否符合用户的心智模型和使用习惯。</p>
<p>常见的组织方式包括：按字母或时间的精确型组织（适合已知查找目标的场景）、按主题或任务的模糊型组织（适合探索式浏览的场景），以及混合型组织。比如电商系统，商品分类采用层级主题（服装&gt;男装&gt;衬衫），订单查询采用时间序列，用户中心采用任务分组（我的订单、我的收藏、账户设置）。每种组织方式服务于不同的用户需求和使用场景。到底按照什么维度进行单一归类还是进行矩阵归类，这就是我们的组织系统要解决的问题。</p>
<p>架构师在设计时最容易犯的错误是按技术实现来组织信息，而不是按用户理解来组织。比如把&#8221;用户注册&#8221;放在&#8221;用户服务&#8221;模块下，把&#8221;下单&#8221;放在&#8221;订单服务&#8221;模块下，看似合理，但用户可能期望在&#8221;开始购物&#8221;这个流程中完成所有操作。好的组织系统应该让用户感觉自然和直观，而不是需要理解你的技术架构才能找到想要的功能。</p>
<h3 data-id="heading-6">2. 标签系统：如何命名信息</h3>
<p>标签系统定义了如何命名系统中的各个信息节点，包括功能名称、按钮文案、图标选择等所有用户可见的标识。它就像路标系统，决定了用户能否快速理解每个元素的含义和作用。一个好的标签应该既准确又易懂，既符合业务语言又贴近用户认知。比如，同样是查看历史数据的功能，叫&#8221;数据回溯&#8221;还是&#8221;历史记录&#8221;，给用户的感受完全不同。</p>
<p><strong>标签设计的核心挑战在于平衡专业性和通俗性</strong>。企业内部可能习惯了专业术语，比如&#8221;SKU管理&#8221;、&#8221;履约中心&#8221;、&#8221;清结算&#8221;，但对于普通用户来说，&#8221;商品管理&#8221;、&#8221;订单处理&#8221;、&#8221;对账&#8221;可能更容易理解。图标的选择也是如此，一个购物车图标比一个抽象的立方体更能让人联想到&#8221;订单&#8221;。标签系统需要建立一套统一的命名规范和词汇表，确保同一概念在整个系统中保持一致，避免用户困惑。</p>
<p>架构师虽然不直接负责界面设计，但在定义服务、接口、数据模型时的命名选择，会深刻影响最终的标签系统。同样是&#8221;用户&#8221;这个概念，在不同模块里分别叫User、Account、Member、Customer，这种不一致性很容易延续到界面层，造成用户理解困难。</p>
<h3 data-id="heading-7">3. 导航系统：如何浏览信息</h3>
<p>导航系统定义了用户在系统中移动的方式和路径，它不仅包括显式的菜单、面包屑、标签页，还包括隐式的链接、快捷操作、上下文跳转等。一个好的导航系统应该让用户始终知道三件事：我在哪里（当前位置）、我能去哪里（可达路径）、我怎么回去（返回机制）。就像商场的导购图，不仅要标明店铺位置，还要提供多条到达路径，以及紧急出口的位置。</p>
<p>导航设计需要考虑不同用户的使用模式：新手用户倾向于使用全局导航逐层探索，熟练用户更喜欢搜索和快捷入口，专家用户可能需要自定义常用功能。因此，一个完整的导航系统通常包含多个层次：全局导航提供整体框架、局部导航处理模块内跳转、关联导航连接相关内容、面包屑提供位置感和返回路径。比如在订单详情页，除了顶部菜单和面包屑，还应该有&#8221;查看客户信息&#8221;、&#8221;相关订单&#8221;、&#8221;物流追踪&#8221;等关联导航。</p>
<p>架构师在设计系统时，需要预见导航的技术实现需求。单页应用（SPA）还是多页应用（MPA）？URL 路由如何设计才能支持深度链接和分享？页面状态如何保存以支持后退操作？权限控制如何影响导航的显示？这些技术决策都会影响导航系统的用户体验。更重要的是，导航路径往往反映了业务流程，一个清晰的导航系统背后，必然是清晰的业务逻辑和合理的功能划分。</p>
<h3 data-id="heading-8">4. 搜索系统：如何检索信息</h3>
<p>搜索系统让用户能够直接定位到需要的信息，而不必通过层层导航来寻找。它包括搜索入口的位置、搜索范围的定义、搜索结果的组织和筛选机制等。一个优秀的搜索系统不仅要能精确匹配用户输入，还要能理解用户意图——当用户搜索&#8221;退货&#8221;时，系统应该同时返回退货政策、退货申请入口、历史退货记录等相关结果。搜索的核心价值在于缩短用户到达目标的路径，特别是当信息量庞大或用户明确知道要找什么时。</p>
<p>搜索系统的设计需要解决几个关键问题：搜索什么（全文搜索还是特定字段）、如何搜索（精确匹配还是模糊匹配）、结果如何排序（相关性、时间、热度）、如何优化（搜索建议、历史记录、热门搜索）。比如在 B 端系统中，订单搜索可能需要支持订单号精确查询、客户名称模糊查询、时间范围筛选、状态过滤等多种方式。搜索结果的呈现也很重要——是简单列表还是分类聚合？是否需要高亮关键词？是否提供&#8221;没找到想要的结果&#8221;时的引导？</p>
<p>搜索系统和导航系统是互补而非互斥的关系。导航系统适合探索式浏览，帮助用户了解系统全貌和信息关系；搜索系统适合目标明确的查找，让用户快速直达目标。实际使用中，用户常常在两者间切换：先通过搜索快速定位到大概区域，再通过导航浏览相关内容；或者通过导航了解系统结构后，使用搜索来快速访问常用功能。架构师需要确保两个系统使用一致的信息组织逻辑和命名体系，让用户无论通过哪种方式都能找到相同的内容。</p>
<p>不是所有系统都需要搜索功能，但当信息量达到一定规模时，搜索就变得必不可少。</p>
<p>决定是否需要搜索功能，可以考虑三个因素：</p>
<ul>
<li>内容丰富度：信息量是否足够大</li>
<li>内容性质：是否需要精确查找</li>
<li>使用场景：用户是否有明确的查找目标</li>
</ul>
<p>比如配置中心，当配置项超过几百个时，分类浏览就不够用了，搜索功能变得必需。</p>
<h2 data-id="heading-9">常见的信息架构类型</h2>
<h3 data-id="heading-10">1. 层级结构（树状结构）</h3>
<p>这是最常见的信息架构类型。就像公司的组织架构图，从一个根节点开始，逐层向下展开，每个节点下面有多个子节点。最典型的例子就是 Windows 的文件夹系统，或者企业官网的菜单结构。</p>
<p>当信息之间有明确的从属关系，需要从大类到小类逐步细化时，层级架构能让用户通过逐步深入的方式找到目标。它解决的是&#8221;如何把大量信息有条理地组织起来&#8221;的问题。</p>
<p>企业官网、电商的商品分类、文档管理系统、组织机构管理等。比如京东的商品分类：家用电器 &gt; 电视 &gt; 液晶电视 &gt; 65英寸。</p>
<p>其优点是结构清晰，容易理解；扩展方便，随时可以加新分类；适合信息量大但关系明确的场景；用户学习成本低。</p>
<p>缺点是层级太深用户会迷失（一般不超过3-4层）；同一个信息可能属于多个分类，不知道放哪里；跨分类查找很困难；移动端展示受限，层级多了不好操作。</p>
<h4 data-id="heading-11">2. 矩阵结构</h4>
<p>允许从多个维度访问同一信息，像 Excel 表格一样，用多个维度来组织信息，用户可以从不同角度切入找到同一个内容。比如招聘网站，你既可以按职位类型找，也可以按地区找，还可以按薪资范围找，最后都能找到同一个职位。</p>
<p>当同一个信息需要从多个角度访问时，矩阵架构避免了「这个东西到底该放在哪个分类下」的纠结。它解决的是「一个内容多种查找方式」的问题。</p>
<p>电商的筛选功能（品牌+价格+功能）、招聘网站、房产网站、多维度报表系统等。比如链家找房：可以按区域、价格、户型、面积等多个维度组合筛选。</p>
<p>其优点是灵活性高，满足不同用户的查找习惯；信息不用重复存储也能多处访问；特别适合需要多条件筛选的场景；能够展示信息的多个属性。</p>
<p>缺点是维度太多用户会选择困难；实现复杂，需要良好的标签和索引系统；可能产生大量无结果的组合；对信息的标准化要求高。</p>
<h3 data-id="heading-12">3. 线性型架构（流程结构）</h3>
<p>信息按固定顺序排列，用户只能顺序浏览，像看书一样，从第一页翻到最后一页，用户按照预定的顺序一步步前进。最典型的就是安装向导、注册流程、购物结算流程，用户必须完成当前步骤才能进入下一步。</p>
<p>当任务有明确的先后顺序，需要引导用户一步步完成时，线性架构能确保用户不遗漏任何环节。它解决的是「如何引导用户完成复杂任务」的问题。</p>
<p>注册流程、下单流程、问卷调查、教程引导、多步骤表单等。比如 12306 买票：选择车次 → 选择座位 → 填写乘客 → 确认订单 → 支付。</p>
<p>其优点是用户不会迷路，始终知道在哪一步；适合新手，降低学习成本；确保必要信息都被收集；可以在每步做验证，减少错误。</p>
<p>缺点是不够灵活，用户不能跳过或改变顺序；如果流程太长用户容易放弃；返回修改很麻烦；不适合老用户，每次都要走完整流程。</p>
<h3 data-id="heading-13">4. 网状型架构（关系结构）</h3>
<p>信息之间没有固定的层级关系，通过标签或关联连接。像维基百科或社交网络，信息之间通过各种关系相互连接，没有固定的层级或顺序。用户可以从任何一点开始，通过链接跳转到相关内容，形成自己的浏览路径。</p>
<p>当信息之间的关系复杂、非层级化，需要展示多对多关系时，网状架构能够灵活地表达这种复杂性。它解决的是&#8221;如何表达信息之间的复杂关联&#8221;的问题。</p>
<p>知识库系统、社交网络、推荐系统、相关内容展示等。比如知乎的问题页面，会显示相关问题、相似回答、用户的其他回答等多种关联。</p>
<p>其优点是最灵活，能表达复杂关系；鼓励探索，用户可能发现意外的有价值信息；没有死胡同，总有路径可走；适合内容关联性强的场景。</p>
<p>缺点是用户容易迷失方向，不知道自己在哪；没有明确的开始和结束；信息架构难以可视化和理解；搜索和导航设计要求高，否则用户找不到想要的内容。</p>
<p>实际工作中，我们很少只用一种架构类型，通常是混合使用。比如电商网站：商品分类用层级型、商品筛选用矩阵型、购买流程用线性型、商品推荐用网状型。关键是根据不同的信息类型和用户任务，选择最合适的架构方式。</p>
<h2 data-id="heading-14">小结一下</h2>
<p>信息架构设计要求我们不仅要梳理清楚系统中有哪些信息、这些信息如何命名才能让用户理解，还要思考如何组织这些信息才符合用户的认知模式、如何设计导航和搜索才能让用户高效地找到目标。每一个节点的命名、每一条连线的关系、每一个层级的划分，都会直接影响后续的界面设计和用户体验。</p>
<p>信息架构是连接业务逻辑和用户界面的桥梁。向上，它需要准确理解和表达业务需求，确保所有功能和内容都有合适的位置；向下，它为界面设计提供清晰的框架，让设计师知道需要设计哪些页面、页面之间如何跳转、每个页面应该包含什么内容。一个清晰的信息架构图，能够让团队成员快速达成共识，减少后期因为结构调整带来的返工成本。</p>
<p>作为架构师，我们在设计系统时不能只关注技术实现，还要站在用户视角思考信息的组织方式。好的信息架构应该是&#8221;隐形&#8221;的——用户使用时感觉自然流畅，不需要思考就能找到想要的功能。这需要我们在前期投入足够的时间去理解用户需求、分析使用场景、设计合理的分类体系和命名规范。只有把信息架构的基础打好，后续的框架层和表现层设计才能水到渠成，最终构建出既强大又易用的系统。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2025/08/architects-must-know-a-little-about-information-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>架构师必备：解决技术问题当从第一性原理开始</title>
		<link>https://www.phppan.com/2025/08/architects-must-start-from-first-principles-when-solving-technical-problems/</link>
		<comments>https://www.phppan.com/2025/08/architects-must-start-from-first-principles-when-solving-technical-problems/#comments</comments>
		<pubDate>Sat, 02 Aug 2025 23:29:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[架构师]]></category>
		<category><![CDATA[架构师必备]]></category>
		<category><![CDATA[第一性原理]]></category>

		<guid isPermaLink="false">https://www.phppan.com/?p=2402</guid>
		<description><![CDATA[前两天系统陆续告警，海外服务器访问图片 CDN 经常会出现异常，连接慢，超时，或者下载到一半了失败，错误日志如 [&#8230;]]]></description>
				<content:encoded><![CDATA[<section id="nice" style="color: #000000;" data-tool="mdnice编辑器" data-website="https://www.mdnice.com">
<p data-tool="mdnice编辑器">前两天系统陆续告警，海外服务器访问图片 CDN 经常会出现异常，连接慢，超时，或者下载到一半了失败，错误日志如下：</p>
<pre data-tool="mdnice编辑器"><code>&gt; Connection broken: IncompleteRead(49292 bytes read, 2611057 more expected)', 
&gt;IncompleteRead(49292 bytes read, 2611057 more expected
</code></pre>
<p data-tool="mdnice编辑器">当看到这些，第一个反应就是加重试和延长超时时间，有一些缓解，但是还是会出错。</p>
<p data-tool="mdnice编辑器">当某天下午又有问题出现后，忽然想起，重试和延长超时时间并不是解决本质的问题，只是缓解了问题。</p>
<p data-tool="mdnice编辑器">从第一性原理，尝试脱离业务查找图片 CDN 无法访问的问题，尝试发现直接访问存储的外网地址是正常的，但是通过 CDN 会有问题，ping cdn 的域名，延时还能接受。现在看只能是回源的问题，于是找云服务商来定位日志，最终的原因是回源没有带源站地址，导致海外访问受限（为什么，这点云没有做详细解释，模模糊糊说是跨境的问题，因为在国内，之前的配置是没有问题的）。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">什么是第一性原理？</span></h1>
<p data-tool="mdnice编辑器">这个词听起来很高大上，其实道理很简单。</p>
<p data-tool="mdnice编辑器">想象你是个外星人，刚刚来到地球，看到人类在用轮子运输货物。你不会想&#8221;轮子就应该是圆的&#8221;，而是会问&#8221;为什么需要运输？&#8221;&#8221;什么形状最省力？&#8221;通过基础的物理定律，你会发现圆形确实是最优解。</p>
<p data-tool="mdnice编辑器">这就是第一性原理的精髓——<strong style="color: #0e88eb;">抛开所有的经验、惯例和「理所当然」，回到最基础的事实和逻辑，重新推导解决方案。</strong></p>
<p data-tool="mdnice编辑器">在技术领域，我们太容易被各种「最佳实践」、「业界标准」、「大厂方案」所影响。遇到问题，第一反应往往是去搜索现成的解决方案，或者套用以前的经验。这本身没错，但当这些方法都不管用时，就需要回到问题的本质了。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">为什么我们需要第一性原理？</span></h1>
<p data-tool="mdnice编辑器">做技术久了，你会发现一个有趣的现象：很多所谓的「技术难题」，其实根本不是技术问题。</p>
<p data-tool="mdnice编辑器">比如，系统性能差，大家就想着优化代码、加缓存、扩容。但如果从第一性原理出发，先问问「用户真正的需求是什么？」，可能会发现某些功能根本没人用，直接下线就解决了性能问题。（有些问题不用解决，解决问题本身就行）</p>
<p data-tool="mdnice编辑器">再比如，团队总是出线上故障，常规思路是加强测试、完善监控、制定流程。但深入分析会发现，80%的故障都源于某个老旧模块，与其不断打补丁，不如花时间重构它。</p>
<p data-tool="mdnice编辑器">技术圈有个词叫「过度工程」，说的就是用复杂的方案解决简单的问题。为什么会这样？因为我们太习惯于在既有框架内思考，忘记了问题的本质可能很简单。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">技术思维的三个陷阱</span></h2>
<p data-tool="mdnice编辑器">在日常工作中，有三种思维陷阱特别容易让我们偏离问题的本质：</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">1. 经验主义陷阱</strong></p>
<p data-tool="mdnice编辑器">&#8220;上次遇到类似问题就是这么解决的。&#8221;</p>
<p data-tool="mdnice编辑器">经验是财富，但也可能是枷锁。技术在变，业务在变，用户在变，昨天的解决方案未必适合今天的问题。</p>
<p data-tool="mdnice编辑器">曾经见过一个案例，某电商网站的订单系统经常超时。后台小哥凭经验判断是数据库性能问题，花了大量时间优化 SQL、加索引、分库分表。结果呢？问题有所减轻，但是还是会出现。</p>
<p data-tool="mdnice编辑器">后来从头分析才发现，真正的瓶颈是订单生成时要调用外部服务做各种校验和预处理，其中一个服务响应特别慢。如果一开始就从基础事实出发——「订单生成需要多长时间？时间都花在哪里？」——问题早就解决了。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">2. 权威崇拜陷阱</strong></p>
<p data-tool="mdnice编辑器">「Google是这么做的，肯定没错。」</p>
<p data-tool="mdnice编辑器">大厂的方案确实值得学习，但照搬往往水土不服。Google 的解决方案是基于它的业务规模、技术栈、团队能力设计的，这些前提条件你都具备吗？</p>
<p data-tool="mdnice编辑器">记得有个创业公司，看到大厂都在搞微服务，也把自己不到 10 人的团队、日活 1 万左右的产品拆成了十几个服务。结果呢？运维成本暴增，开发效率直线下降，最后不得不重新合并服务。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">3. 工具依赖陷阱</strong></p>
<p data-tool="mdnice编辑器">「用了最新的框架，一定能解决问题。」</p>
<p data-tool="mdnice编辑器">技术圈总是充满各种新工具、新框架、新概念。但工具只是工具，关键是要解决什么问题。</p>
<p data-tool="mdnice编辑器">曾经见一个项目，前端框架从 jQuery 升级到 Angular，又换成 React。每次重构都说是为了「提升开发效率」和「改善用户体验」。可实际上，用户的核心诉求——&#8221;页面加载太慢&#8221;——从来没有被真正解决过。</p>
<p data-tool="mdnice编辑器">如果从第一性原理思考：用户要的是什么？快速加载。为什么慢？图片太大、请求太多。怎么解决？压缩图片、合并请求。这跟用什么框架其实关系不大。</p>
<p data-tool="mdnice编辑器">当然，框架升级并不是一个一定不对的事情，技术的升级也是有必要的，但是需要看其<strong style="color: #0e88eb;">本质是想改变什么</strong>。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">第一性原理的实战应用</span></h1>
<p data-tool="mdnice编辑器">说了这么多理论，来看看在实际技术问题中如何应用第一性原理。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">案例一：神秘的数据库连接池爆满</span></h2>
<p data-tool="mdnice编辑器">有个项目突然开始频繁报数据库连接池满的错误。常规思路是什么？加大连接池、优化慢查询、增加数据库实例。</p>
<p data-tool="mdnice编辑器">但我们决定从基础事实开始：</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第一步：确认基础事实</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">连接池大小：100</section>
</li>
<li>
<section style="color: #010101;">平均活跃连接数：20-30</section>
</li>
<li>
<section style="color: #010101;">报错时连接数：100</section>
</li>
<li>
<section style="color: #010101;">每个请求的数据库操作：2-3次</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第二步：分解问题</strong></p>
<p data-tool="mdnice编辑器">既然平时只用20-30个连接，为什么会突然用满100个？</p>
<p data-tool="mdnice编辑器">通过监控发现，每天下午3点左右连接数会激增。这个时间点有什么特殊的？</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第三步：追踪本质</strong></p>
<p data-tool="mdnice编辑器">深入代码发现，有个定时任务在下午3点执行，它会并发处理大量数据。关键是，这个任务的事务没有正确关闭，导致连接无法释放。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第四步：简单解决</strong></p>
<p data-tool="mdnice编辑器">修复事务管理的bug，问题彻底解决。连接池大小维持在50就足够了。</p>
<p data-tool="mdnice编辑器">如果一开始就盲目扩大连接池，不仅掩盖了真正的问题，还会增加数据库的负担。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">案例二：永远优化不完的首页</span></h2>
<p data-tool="mdnice编辑器">另一个经典案例是首页性能优化。产品经理总是抱怨首页加载慢，技术团队已经做了各种优化：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">静态资源上CDN ✓</section>
</li>
<li>
<section style="color: #010101;">图片懒加载 ✓</section>
</li>
<li>
<section style="color: #010101;">接口合并 ✓</section>
</li>
<li>
<section style="color: #010101;">服务端缓存 ✓</section>
</li>
<li>
<section style="color: #010101;">数据库索引优化 ✓</section>
</li>
</ul>
<p data-tool="mdnice编辑器">但用户还是觉得慢。怎么办？</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">回到基础问题：用户说的「慢」到底是什么？</strong></p>
<p data-tool="mdnice编辑器">通过用户访谈发现，他们说的「慢」不是首页加载慢，而是「找到想要的商品慢」。原来首页堆积了太多内容，用户需要不断滚动、寻找，体验自然不好。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">真正的解决方案：</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">简化首页内容</section>
</li>
<li>
<section style="color: #010101;">改进搜索和分类</section>
</li>
<li>
<section style="color: #010101;">个性化推荐</section>
</li>
</ul>
<p data-tool="mdnice编辑器">技术优化做到极致，不如产品设计的一个小改进。这就是第一性原理的力量——让你跳出技术视角，看到问题的全貌。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">案例三：微服务还是单体？</span></h2>
<p data-tool="mdnice编辑器">这可能是近几年最容易引发争论的架构问题。很多团队一上来就要搞微服务，理由通常是：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">大家都在用微服务</section>
</li>
<li>
<section style="color: #010101;">微服务更先进</section>
</li>
<li>
<section style="color: #010101;">方便团队协作和扩展</section>
</li>
<li>
<section style="color: #010101;">容易扩展</section>
</li>
</ul>
<p data-tool="mdnice编辑器">但如果用第一性原理思考：</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">基础问题是什么？</strong></p>
<p data-tool="mdnice编辑器">我们要构建一个满足业务需求的系统。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">核心约束是什么？</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">团队规模：5 个人还是 50 个人？</section>
</li>
<li>
<section style="color: #010101;">业务复杂度：简单 CRUD 还是复杂业务逻辑？</section>
</li>
<li>
<section style="color: #010101;">性能要求：日活千万还是几万或几千？</section>
</li>
<li>
<section style="color: #010101;">开发效率：快速迭代还是稳定运行？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">从零思考架构：</strong></p>
<p data-tool="mdnice编辑器">如果你的团队只有 5 个人，业务逻辑也不复杂，那么单体应用可能是最优选择：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">部署简单</section>
</li>
<li>
<section style="color: #010101;">调试方便</section>
</li>
<li>
<section style="color: #010101;">没有网络开销</section>
</li>
<li>
<section style="color: #010101;">事务处理简单</section>
</li>
</ul>
<p data-tool="mdnice编辑器">随着业务增长，当单体应用真的成为瓶颈时，再考虑拆分也不迟。这时你会更清楚哪些模块需要独立，哪些可以保持在一起。</p>
<p data-tool="mdnice编辑器">记住，微服务不是目标，解决业务问题才是。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">如何培养第一性原理思维？</span></h1>
<p data-tool="mdnice编辑器">知道第一性原理重要是一回事，真正在工作中应用又是另一回事。这里分享一些我的实践经验：</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">1. 养成追问「为什么」的习惯</span></h2>
<p data-tool="mdnice编辑器">遇到问题不要急着动手，先问几个为什么：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">为什么会出现这个问题？</section>
</li>
<li>
<section style="color: #010101;">为什么以前没有这个问题？</section>
</li>
<li>
<section style="color: #010101;">为什么是现在出现？</section>
</li>
<li>
<section style="color: #010101;">为什么影响的是这些用户？</section>
</li>
</ul>
<p data-tool="mdnice编辑器">每个「为什么」都可能让你更接近问题的本质。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">2. 区分表象和原因</span></h2>
<p data-tool="mdnice编辑器">医生看病会区分症状和病因，技术问题也一样。</p>
<p data-tool="mdnice编辑器">用户说「系统很卡」是症状，真正的原因可能是：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">网络延迟高</section>
</li>
<li>
<section style="color: #010101;">服务器 CPU 占用率高</section>
</li>
<li>
<section style="color: #010101;">数据库死锁</section>
</li>
<li>
<section style="color: #010101;">前端渲染性能差</section>
</li>
<li>
<section style="color: #010101;">甚至可能是用户电脑太老&#8230; （之前工业互联网创业时就遇到过这种情况）</section>
</li>
</ul>
<p data-tool="mdnice编辑器">不要被症状迷惑，要找到真正的病因。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">3. 建立度量和验证机制</span></h2>
<p data-tool="mdnice编辑器">第一性原理强调基于事实，而不是猜测。所以要学会度量和验证：</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">性能问题：先测量，找到瓶颈在哪</section>
</li>
<li>
<section style="color: #010101;">稳定性问题：收集数据，分析故障模式</section>
</li>
<li>
<section style="color: #010101;">用户体验问题：做用户调研，理解真实需求</section>
</li>
</ul>
<p data-tool="mdnice编辑器">数据会告诉你真相，而不是你的直觉。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">4. 练习「从零开始」思考</span></h2>
<p data-tool="mdnice编辑器">定期做这样的思维练习：</p>
<p data-tool="mdnice编辑器">「如果让我从零开始设计这个系统/解决这个问题，我会怎么做？」</p>
<p data-tool="mdnice编辑器">这能帮你跳出现有框架的限制，找到更优解。</p>
<h2 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">5. 保持谦逊和好奇</span></h2>
<p data-tool="mdnice编辑器">技术发展太快，昨天的真理可能今天就过时了。保持开放的心态，随时准备推翻自己的认知。</p>
<p data-tool="mdnice编辑器">同时，不要羞于承认「我不知道」。正是这种诚实，才能让你回到基础事实，而不是基于错误的假设做决策。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">什么时候用第一性原理？</span></h1>
<p data-tool="mdnice编辑器">需要说明的是，不是所有问题都需要用第一性原理。如果每个问题都从零开始思考，效率会非常低。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">适合使用第一性原理的场景：</strong></p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">常规方法失效时</strong>：试过各种方案都不管用，说明可能方向就错了</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">面对全新问题时</strong>：没有先例可循，必须从基础原理推导</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">需要创新突破时</strong>：想要 10 倍改进而不是 10% 优化</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">资源极度受限时</strong>：必须找到最本质、最经济的解决方案</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">存在重大分歧时</strong>：团队争论不休，需要回到基础事实达成共识</section>
</li>
</ol>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">不适合的场景：</strong></p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">有成熟解决方案的常规问题</strong>：比如做个登录功能，不需要重新发明轮子</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">时间紧急的情况</strong>：先用已知方案解决燃眉之急，后续再优化</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">成本敏感的场景</strong>：从零开始的成本可能远高于使用现成方案</section>
</li>
</ol>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">第一性原理与工程实践</span></h1>
<p data-tool="mdnice编辑器">有人可能会问：强调第一性原理，是不是意味着否定所有的最佳实践和设计模式？</p>
<p data-tool="mdnice编辑器">并不是。</p>
<p data-tool="mdnice编辑器">第一性原理是一种思维方式，不是要你抛弃所有经验。正确的做法是：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">理解原理</strong>：知道最佳实践背后的原理是什么</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">判断适用性</strong>：这个原理在当前场景下是否依然成立</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">灵活应用</strong>：根据实际情况调整，而不是生搬硬套</section>
</li>
</ol>
<p data-tool="mdnice编辑器">举个例子，「数据库索引可以提升查询性能」是个最佳实践。但背后的原理是什么？索引通过空间换时间，用额外的存储来加速查找。</p>
<p data-tool="mdnice编辑器">那么在什么情况下这个实践可能不适用？</p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">表很小，全表扫描比使用索引更快</section>
</li>
<li>
<section style="color: #010101;">写入频繁，索引维护成本太高</section>
</li>
<li>
<section style="color: #010101;">查询模式复杂，单个索引无法覆盖</section>
</li>
</ul>
<p data-tool="mdnice编辑器">理解了原理，你就能做出正确的判断。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">一个思维框架</span></h1>
<p data-tool="mdnice编辑器">最后，分享一个我常用的思维框架，帮助在实际工作中应用第一性原理：</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第一步：定义问题</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">问题的表象是什么？</section>
</li>
<li>
<section style="color: #010101;">影响范围有多大？</section>
</li>
<li>
<section style="color: #010101;">什么时候开始的？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第二步：收集事实</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">哪些是可以测量的数据？</section>
</li>
<li>
<section style="color: #010101;">哪些是已经验证的事实？</section>
</li>
<li>
<section style="color: #010101;">哪些是推测和假设？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第三步：分解结构</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">系统由哪些部分组成？</section>
</li>
<li>
<section style="color: #010101;">各部分如何相互作用？</section>
</li>
<li>
<section style="color: #010101;">问题可能出在哪个环节？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第四步：追溯原理</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">这个环节的基本原理是什么？</section>
</li>
<li>
<section style="color: #010101;">在当前场景下原理是否成立？</section>
</li>
<li>
<section style="color: #010101;">有什么隐含的假设？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第五步：重构方案</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">基于原理，最简单的解决方案是什么？</section>
</li>
<li>
<section style="color: #010101;">这个方案的风险和成本如何？</section>
</li>
<li>
<section style="color: #010101;">如何验证方案的有效性？</section>
</li>
</ul>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">第六步：迭代优化</strong></p>
<ul data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">实施后效果如何？</section>
</li>
<li>
<section style="color: #010101;">是否还有改进空间？</section>
</li>
<li>
<section style="color: #010101;">学到了什么新的认知？</section>
</li>
</ul>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e8aeb;">写在最后</span></h1>
<p data-tool="mdnice编辑器">技术圈有句话：「没有银弹」。意思是没有一种技术或方法能解决所有问题。第一性原理也不是银弹，但它是一种强大的思维工具。</p>
<p data-tool="mdnice编辑器">在这个技术快速迭代、框架层出不穷的时代，掌握第一性原理思维尤其重要。它能帮你在纷繁复杂的技术选择中保持清醒，找到问题的本质，做出正确的决策。</p>
<p data-tool="mdnice编辑器">下次遇到棘手的技术问题时，不妨停下来问问自己：</p>
<p data-tool="mdnice编辑器">「如果我是第一个遇到这个问题的人，没有任何前人经验可以借鉴，我会怎么思考？」</p>
<p data-tool="mdnice编辑器">答案可能会让你惊喜。</p>
<p data-tool="mdnice编辑器">真正的高手不是掌握了多少技术，而是掌握了技术背后的原理。当你能够从第一性原理出发思考问题时，你就真正理解了技术的本质。</p>
<p data-tool="mdnice编辑器">这条路可能不太好走，需要不断质疑、思考、验证。但相信我，这是成为技术专家的必经之路。</p>
<p data-tool="mdnice编辑器"><strong style="color: #0e88eb;">与其做一个熟练的技术工人，不如做一个会思考的问题解决者。</strong></p>
<p data-tool="mdnice编辑器">以上。</p>
</section>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2025/08/architects-must-start-from-first-principles-when-solving-technical-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
