写了三年业务代码每当有人跟我聊架构这个词心里总有点发虚。市面上讲架构的书不少但要么堆满Spring Cloud、Kubernetes这类具体技术要么讲得玄而又玄听完感觉懂了关上书还是不知道从哪儿下手。最近把《从零开始学架构》的第一章架构基础完整啃了一遍这篇文章就是我的核心笔记加实践体会。如果你也属于那种代码写得不少、架构却说不太清的开发者或者刚准备系统学习架构设计这篇内容应该能帮你少走不少弯路。我会把章节里最关键的认知、概念和我自己的延伸思考一起整理出来而不是单纯复述目录。1. 先把架构这顶帽子戴正第一章解决的第一道认知关1.1 架构不等于结构图三大构成要素大多数人对架构的第一印象就是一张方框连线图框里写订单服务用户服务线连来连去看着很专业。第一章上来就打破了这个印象架构确实会以结构图的形式呈现但结构图只是架构的投影不是架构本身。书里给出的定义框架我觉得很有操作性架构由三大要素构成——组件、关系、约束与原则。组件系统中的功能模块可以是一个服务、一个类库、一个子系统甚至一个外部依赖。组件的粒度取决于你描述架构的层级。关系组件之间的协作方式包括同步调用、异步消息、事件订阅、数据共享等。关系决定了系统的数据流和控制流。约束与原则这是最容易忽略的部分。它回答的是为什么组件要这样划分、为什么关系要这样建立——比如所有跨模块调用必须走接口不允许服务之间直连数据库失败重试必须幂等。没有这一层前面的组件和关系就只是一堆随机方块。用城市规划来类比很好懂结构图是建筑图纸它告诉你房子长什么样但架构是城市规划方案它规定了哪里能建住宅、哪里留绿地、道路怎么连通、为什么这么布局。图纸是结果架构是一整套决策逻辑。所以第一章的第一个收获就是看一个系统的架构不能只看图画得好不好看要看支撑这幅图的约束和原则成不成立。1.2 一个容易混淆的边界架构与设计很多人把架构和设计当成一回事第一章在这方面做了明确划分这段我读了两遍觉得非常必要。简单来说架构关注的是系统的骨架和全局性决策设计关注的是骨架内部零件的具体实现方式。架构回答系统分几层、模块边界在哪里、采用同步还是异步、数据放在哪个存储设计回答某个模块内部用哪个类实现、缓存淘汰策略用LRU还是LFU、SQL怎么建索引。这个边界不是绝对的会随着系统规模变化。一个小工具可能不需要架构决策写代码时顺手就把设计做了但一个大型分布式系统架构决策直接影响几十人团队的协作方式、部署运维模型、故障爆炸半径。第一章提出的判断标准很实用当某个决策的变更会影响多个模块、多个团队或者需要跨系统协调时它就是架构层面的决策。如果你改了一个东西只影响自己负责的模块那属于设计层面。用这个标准去衡量日常工作能很快判断自己是不是正在做架构性质的事。1.3 架构师的工作起点从功能思维切换到结构思维这一节是我觉得第一章最有启发性的部分。普通开发者写代码时默认思维是功能思维——需求说要做订单查询我就写一个查询接口关联几张表返回数据。架构师的思维是结构思维——在写第一行代码之前先问订单查询这个功能应该放在哪个模块它和库存模块、支付模块的关系是什么如果未来订单量翻十倍这个结构还能不能撑住如果另一个团队也要用订单数据他们怎么获取结构思维和功能思维的区别有点像装修工人和户型设计师的区别。装修工人考虑的是柜子怎么打、瓷砖怎么贴设计师考虑的是承重墙在哪里、动线是否合理、每个房间的用途是否匹配生活方式。架构设计做的其实是后者——你是在安排一个系统的户型而不是在装修某个具体的房间。这也是为什么第一章虽然叫架构基础却花了很大篇幅讲思维方式而不是技术工具。工具可以速成思维方式需要反复练习。我自己觉得最有效的练习方式是拿到一个需求之后先不急着写代码用十分钟在纸上写下——这个需求会涉及哪些模块要改哪些已有的关系有没有违反现有的约束原则写不出来的地方就是架构理解的黑洞。2. 业务复杂度与技术复杂度架构设计要驯服的两头大象2.1 两种复杂度的来源与特征第一章提出了一组贯穿全书的核心概念业务复杂度和技术复杂度。这个概念看起来简单但把它想透之后很多架构问题的答案会自动浮出来。业务复杂度来自现实世界的规则、状态和流程。比如电商里的订单状态机待支付、已支付、已发货、已签收、退款中……会计系统里的借贷平衡审批流里的多级会签这些逻辑本身就很绕无论你用不用分布式、上不上微服务它都客观存在。业务复杂度通常用领域模型、业务规则、状态流转来描述。技术复杂度则来自规模、物理环境、并发压力。比如每天几千万请求、跨机房部署的网络延迟、数据库连接数耗尽、缓存穿透击穿、消息重复消费等。技术复杂度和业务逻辑无关纯粹是量变引起质变带来的工程挑战。这个区分特别重要因为把两种复杂度混为一谈是很多架构失败的根源。我见过不少团队明明业务复杂度占大头却硬上一个微服务框架结果服务拆了一堆分布式事务、服务发现、链路追踪的复杂度全来了业务本身的问题一点没减少。反过来也有团队的业务其实非常简单就是单表查询却因为流量太大崩溃这时候你要解决的是技术复杂度比如加缓存、做读写分离、上消息队列而不是重新设计业务模型。2.2 三层架构为什么长盛不衰复杂度匹配视角下的选择网上有个很经典的问题为什么Java大部分项目用三层架构而不是六边形架构或者DDD分层如果用复杂度匹配的视角来看答案就非常清楚。三层架构表现层、业务层、数据访问层解决的核心问题是职责分离——把界面渲染、业务规则、数据库操作拆开让每一层可以独立修改。对于大多数企业级业务系统来说主要矛盾是业务复杂度流程复杂、规则多变、报表繁多三层架构用一个非常直观的方式把这些逻辑组织起来学习成本低、沟通成本低、招人容易。它的简单本身就是巨大的工程优势。六边形架构端口与适配器解决的是另一个问题让业务核心不依赖任何外部技术设施。它更适合领域逻辑复杂、需要长期演进的系统比如金融风控引擎、规则平台。但它的抽象层级更高团队需要更深的理解才能维护好。所以选型不是越先进越好而是看复杂度匹配。系统的主要矛盾是业务规则复杂且经常变化那就选领域模型友好的架构主要矛盾是扩展性和流量压力那就选分布式架构主要矛盾是快速交付、人员水平参差那就老老实实用三层架构。第一章教我的就是这一点架构不是装饰品它是用来控制复杂度的工具工具必须匹配问题。2.3 复杂度拆解练习一个订单系统里的业务与技术光说概念容易飘我拿一个最常见的订单系统做拆解练习你可以对着试试。一个订单系统你要处理购物车、下单、锁库存、支付、发货、售后。其中业务复杂度体现在——下单状态怎么流转库存扣减了但支付超时怎么办退款退货时状态怎么回退各种促销优惠叠加规则怎么算这些规则即便只写一个单体应用也足够让你头疼。技术复杂度体现在——秒杀时瞬间流量打满数据库怎么办订单服务挂了怎么保证不丢单多个实例同时扣库存怎么避免超卖跨系统调用失败怎么补偿这些问题是并发量上来之后才出现的跟业务规则无关。我在实际梳理中发现一个规律如果先把业务复杂度梳理清楚状态图、用例、规则清单技术方案往往自己就浮出来了。比如知道库存扣减可能超卖你自然要引入分布式锁或乐观锁知道支付超时要恢复库存自然要设计对账任务。反过来业务都没理清就上技术方案最后往往是用技术手段掩盖业务漏洞越描越黑。3. 从单机到分布式的地基第一章埋下的三颗知识点3.1 分层与解耦的底层逻辑第一章在架构基础的框架下埋了几个后续章节会反复用到的核心知识点第一个就是分层与解耦。为什么要分层直接的理由是每层可以独立变化。但底层逻辑其实更深刻分层是对变化的隔离。表现层变化很快今天改个按钮明天换个布局业务层变化中等规则调整、流程再造数据层变化最慢表结构一旦稳定就很少动。把它们分到不同层就是为了让某一层变化时其他层可以不受牵连。解耦则是分层的必然延伸。如果表现层直接操作数据库那数据库一改前端就得跟着改耦合在一起谁都动不了。解耦的本质是让组件之间只依赖接口不依赖实现。接口是一种契约——只要我提供的功能不变内部怎么改你都不用关心。这个道理在分布式环境下被推到了极致。微服务为什么强调每个服务可以独立部署、独立扩展就是因为服务之间通过API解耦之后一个服务发新版本不需要其他服务停机。第一章虽然没有展开讲微服务但分层解耦就是理解微服务的第一块基石。3.2 为什么分布式系统绕不开CAP另一个埋下的关键概念是CAP定理。这个定理在某些社区已经快被说烂了但真正理解它的人并不多。第一章的讲法是我见过比较清晰的。CAP说的是分布式系统只能同时满足三个性质中的两个一致性Consistency、可用性Availability、分区容错性Partition tolerance。但要注意这个三选二不是让你随便选两个而是因为分区容错性在分布式环境下是必须满足的——网络可能断、机房可能电力故障这不由你决定。所以真正的问题只有一个当网络分区发生时你是选择一致性还是可用性。我用一个生活化类比来理解假设你和朋友分别在两个房间中间的电话线断了网络分区朋友问你楼下那家店还开着吗你有两个选择——告诉他我这边看到的是关着的但我不确定那边是否还开着所以不能给你确定答案保一致性牺牲可用性或者告诉他我说关着就是关着保可用性接受可能不一致的数据。这里的牺牲并不意味着永远不可用而是在出现分区时你需要明确系统的降级策略。很多系统的做法是正常情况下保持强一致检测到分区时切换到允许暂时不一致、事后补偿的模式。第一章反复强调的思维方式在这里体现得淋漓尽致——架构设计不是追求完美而是明确什么情况下放弃什么。3.3 网络、存储、计算基础设施抽象的视角最后一个埋点是指出架构设计必须考虑基础设施的抽象能力。这一章用了不少篇幅讲网络、存储、计算资源的抽象我觉得它的目的是帮你建立架构不只是软件分层的完整视野。网络层面你要知道跨机房的带宽、延迟会怎样影响同步和异步的选择消息队列为什么能作为缓冲层。存储层面关系型数据库、缓存、搜索引擎对象存储各有各的适用场景它们共同组成了数据的分级存储体系。计算层面当单台机器CPU不够时是纵向扩容升级硬件还是横向扩容加机器这决定了你的代码是否需要无状态化。这些内容如果单独拿出来讲可能很枯燥但在架构基础的框架下它们都是在回答一个问题系统的物理资源如何被有效组织以支撑软件逻辑的运行。没有这层抽象视野你可能会做出一个逻辑上很漂亮、但部署起来寸步难行的架构。4. 架构设计的基本流程从需求陈述到候选方案的完整链路4.1 五步走的流程框架第一章后半部分给出了一个架构设计的基本流程我把它提炼成了五步每一步都有明确的输入和输出。这不是什么高深技巧但非常容易被忽略。第一步理解需求识别约束。不是急着设计而是先搞清楚真正的目标是什么有哪些硬性约束技术栈限定、预算、交付时间哪些是隐含约束团队人员技能、运维能力这里有个常见错误——把假设当成需求需求方说以后可能要做推荐你就引入大规模推荐架构结果两年都没做。约束识别不清晰后面的方案全是空中楼阁。第二步划分模块与服务边界。这项工作要找出变化点——哪些业务规则可能会变哪些外部依赖可能会换把这些点封装进独立的模块让变化的影响被隔离。边界划分的好坏直接决定了整个系统的可维护性。第三步确定核心组件与交互方式。这是画的关系图哪些模块需要同步调用哪些可以改成异步数据流是单向还是双向事件驱动还是请求驱动这个阶段要用序列图、流程图把关键路径走通而不是急着画部署图。第四步评估候选方案。任何架构决策都存在权衡所以要给每个候选方案打分。评分维度可以包括成本开发成本、运维成本、风险技术风险、人员风险、演进空间未来能否平滑升级。不用追求最优解要选复杂度匹配且风险可控的方案。第五步验证与迭代。用性能预估、容量规划、故障演练来验证方案是否成立。这一步在国内很多团队被跳过等到上线出问题才回头改架构代价往往是巨大的。第一章强调架构设计不是一次性交作业它是持续迭代的过程。4.2 关键约束与决策记录比方案本身更重要在第一步里提到的约束识别我想再多说几句因为它直接决定架构的成败。我见过很多失败的架构设计回头看根本原因不是技术不行而是约束没识别全。比如做了一个需要8个微服务维护的系统却没有考虑团队只有5个人引进了最新的大数据组件却没评估过团队的运维能力设计了充分冗余的高可用架构但预算只能支撑单机房。每一个被忽略的约束最后都会在某个不合适的时机变成事故。所以第一章特别强调决策记录的价值每一个架构决策都要记录下为什么选A不选B。这个记录不只是给后人看更是给自己看——当项目推进到一半你发现自己正在偏离当初的方向时回看决策记录能帮你判断是环境变了需要调整还是你只是偷懒做了个错误选择。我个人常用的格式很简单背景 → 候选方案 → 评估维度 → 结论 → 被否决的原因。写一次不超过半小时但在关键节点能省下几天甚至几周的返工时间。4.3 一个简化案例从需求到方案推演为了把流程串起来我结合第一章的思路推演一个简化的订单系统案例。假设需求是这样现有订单表每天百万级读写马上要搞一次大促预计峰值流量翻三倍要求系统不能宕机。约束识别业务规则暂时稳定团队6人Java技术栈已有MySQL实例预算有限大促时间是4周后。这些约束直接排除了重构为微服务引入K8s这类重方案。边界划分订单模块独立库存扣减逻辑抽出来整个系统拆三个模块接入层、订单核心、库存服务。接入层负责鉴权和限流订单核心负责业务规则库存服务负责库存增减。交互方式下单主链路保持同步调用但把库存预扣改成异步消息加对账补偿。这样即使库存服务抖动订单主流程不会立即失败。方案评估对比原地扩容、加缓存队列改造、上微服务三个方案。微服务方案风险太高且周期长直接否决。原地扩容成本可控但扛不住峰值流量。最终选择加缓存队列改造原因是复杂度匹配、团队能驾驭、4周可以落地。验证用压测工具模拟三倍峰值发现有热点库存竞争的问题再引入分段库存设计重新压测直到通过。这个案例说明架构设计流程不是死板的文档工作它是逼着你在动手前把所有关键变量过一遍脑子的思维训练。5. 从零开始学架构的行动路线笔记之外我做了什么5.1 先学会写架构说明再学画图第一章学完之后如果你也想把这套基础固化成自己的能力我给三条从实践中摸出来的建议。第一条建议先用文字写架构说明而不是急着画图。很多人学架构喜欢打开draw.io画方框连线画完觉得很有成就感但问他为什么这么分、为什么用同步不用异步反而说不清楚。文字描述逼着你把逻辑链条写完整订单模块负责创建订单、校验库存、扣减优惠券通过消息通知库存模块异步扣库存——这句话写出来你才知道自己对流程是否真的想明白了。想不清楚的地方文字一定会卡壳。5.2 源码、文档、复盘三件套第二条建议读开源项目的架构文档时对照源码找差距。比如你学了分层解耦那就去看一个知名开源项目的文档怎么描述模块划分然后在源码里找到对应的包名和类名看看是否真的严格执行了文档里的原则。大部分情况下你会发现文档是理想源码是现实两者之间的落差恰恰是最有价值的学习素材——它展示了在真实约束下架构如何被妥协和调整。另外认真复盘自己写过的项目。不用多高深的框架哪怕是你三个月前写的CRUD接口试着回答为什么把这段逻辑放在Controller里而不是Service里为什么这几张表要在同一个数据库如果流量翻十倍这个项目哪里会先崩这些问题就是以架构基础为起点逐步培养结构思维的具体训练。复盘时发现当初的设计漏洞比从别人的系统里学案例来得深刻得多。5.3 个人心得用讲故事检验理解最后分享一个我自己的土办法。看完每一章我都试着把一个概念讲给完全没写过代码的朋友听讲不好就说明没真懂。比如讲完什么是分层我会说就像公司里前台、部门、财务各司其职你找前台不用知道财务怎么做账财务想改流程也不用通知前台。能讲出这样的类比说明知识点已经内化到能灵活表达的层级了。《从零开始学架构》第一章架构基础给我的整体感觉是它不急着教你画图、不用术语吓人而是先把架构师怎么思考问题这件事讲明白。组件、关系、约束、复杂度、权衡、流程——每一个概念都朴素组合起来才显出分量。如果你是刚接触架构的开发者建议不要跳着往后看微服务、容器化这些看起来更酷的章节把第一章的思维方式吃透了后面那些技术选型自然会有一个清晰的判断基准。
企业数字化 ERP 产品动态
相关推荐
Vant Uploader删除图标自定义:插槽机制、事件链路与实战踩坑 上个项目里,UI 验收的时候设计师给了一张截图,上传组件预览图右上角的删除按钮必须是一个红色圆底白色垃圾桶,还带一点投影。我看了下 Vant 默认的样子,黑色半透明底、白色叉号,做得倒是规整,可和设计稿就是… · 2026/9/26 18:01:17
酒店管理系统源码实战:SSM项目部署与五大避坑指南 简介:这是一套采用C#开发的酒店管理系统完整源码,主要面向需要毕业设计、课程设计或独立开发管理软件的学习者与初级程序员。系统前后台功能拆分明细:前台支持房间预约、入住换房、退房结算、客户信息登记查询和按房号消费;后台涵… · 2026/9/26 18:01:10
如何5分钟上手unlazy?AI智能体防偷懒技能安装与tree 5快速入门指南 如何5分钟上手unlazy?AI智能体防偷懒技能安装与tree 5快速入门指南 【免费下载链接】unlazy Anti-laziness skill for AI agents. Core: the Depth Tree method, which splits a task N layers deep and gives every leaf the full time budget of the whole task, … · 2026/9/26 18:36:30
影视仓接口配置全攻略:JSON结构解析与多仓源设置避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 18:36:30
基于BiLSTM与注意力机制的电影评论情感分析实战 简介:这份资源是面向计算机相关专业学生与项目实战学习者的深度学习实战资料,围绕电影评论情感分析这一经典NLP任务展开,可用于课程设计、期末大作业或自学练手。压缩包共14个文件,约21.28MB,包含3个ipynb实验笔记、1个… · 2026/9/26 18:36:30
RAG完整链路实战:从建库、检索到生成,Agent开发必读 做Agent开发的,RAG是绕不开的一道坎。不管是让大模型读懂企业的私有文档,还是给智能体补上“实时知识”这一课,RAG(Retrieval-Augmented Generation,检索增强生成)都是当前最主流、也最容易落地的方案。这篇… · 2026/9/26 18:36:30
追番站点组合推荐:五个站点搭建看番聊番一体化工作流 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 18:36:30
Hadoop+Spark+Hive招聘大数据分析与可视化推荐系统毕设实战 每年的毕业设计市场上,标题里挂着“hadoopsparkhive招聘大数据分析可视化 招聘推荐系统”的项目一抓一大把。我当初选这个题的时候也是把它当成“会用几个框架套个页面”的练手项目,结果真到动手阶段才发现,题目每一个词都认识,凑… · 2026/9/26 18:36:24
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46