ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

整体架构总览:三层含义、主流范式与四维选型,看清系统全局

整体架构总览:三层含义、主流范式与四维选型,看清系统全局 “03-01-架构篇-整体架构总览”这个编号看着像课程笔记或者某套系列文章的目录页。对我来说它恰好点破了做技术最容易被忽略的一件事在写代码之前先搞清楚整个系统的样子。很多项目到最后“能跑但很难改”问题很少出在某个函数写得不好而是出在从一开始就没有一个整体的架构判断。这篇内容适合正在从单模块开发走向系统设计的人也适合想建立全局视野、准备去评审别人方案的同学。它要解决的核心困惑是当有人跟你提“架构”两个字到底是在提什么是画方框的PPT还是服务拆分还是代码目录结构我的理解是这些都算但都只是局部。真正值得先做的是先把架构这件事本身看全。1. 整体架构总览到底要“览”什么1.1 架构的三层含义别只盯着其中一层“架构”这个词被用得太泛滥了导致很多人聊不到一个频道上。我自己的经验是它在实际工作中至少有三层含义这三层互相影响但讨论的时候必须分开。第一层是代码架构也就是一个工程内部的模块划分、依赖方向、核心对象的组织方式。举一个我在热搜里反复看到的例子基于MATLAB OOP架构的多算法融合数字图像处理系统。这类系统如果不用面向对象来组织算法之间互相调用会把代码写成意大利面。每一类滤波算法、分割算法、特征提取算法都应该是独立对象统一接口再由一个调度层按需组合。这层架构说白了就是“代码放哪里、谁能调用谁”。第二层是系统架构也就是多个进程、多台服务器、多个子系统之间怎么协作。这里就会涉及分布式架构、微服务架构、物联网三层架构这些概念。它关心的是服务边界、通信协议、数据流转路径以及当某个节点挂了之后系统怎么办。第三层是组织架构康威定律说得直白系统设计必然反映沟通结构。你团队怎么分组服务大概率就会怎么拆。所以大厂拆微服务从来不只是技术问题本质是在用服务边界对齐团队边界。这三层不分开聊就会出现“我说代码依赖你说服务器部署”这种错位。整体架构总览第一步就是先分清楚当前讨论的是哪一层。1.2 为什么第一步必须是“总览”而不是直接选型我刚带项目的时候也犯过同样的错需求还只有一页纸就急着讨论该用微服务还是该上消息队列。后来被现实教育过几次才明白一个道理——架构选型是设计的结果不是设计的前提。总览要解决的是先“框定范围”这个系统要服务多少用户并发量级有没有可能是十万级业务是强一致性的交易链路还是允许最终一致的内容分发团队规模和运维能力能承受多复杂的组件业务变化的速度快不快核心逻辑会不会每季度重写一次。这些问题没有答案之前任何架构方案都是拍脑袋。总览就像一个缩放的地图先看清城市全貌再决定自己要骑车还是开车。我在实际项目里做法很简单先开一个半天左右的架构对齐会把所有参与开发的、负责运维的、后续要接手的人都拉进来。不用画复杂图就回答三件事——有什么、怎么用、多大规模。这个会很值得它能帮你把后期大量返工时间提前省掉。所以我一直认为“架构篇”系列的第一篇必须留给总览而不是直接丢出某个框架的部署方案。2. 当前主流架构范式的横向扫描热身完之后我们得把这些年在热搜里反复出现的架构名词逐个过一遍。你会发现它们其实不是互相取代的关系而是解决不同规模、不同领域问题的方案集合。2.1 单体架构最朴素但常常被低估的方案单体架构就是一个应用包含所有功能模块前端页面、业务逻辑、数据库访问、定时任务全部打在一个包里。很多有经验的架构师并不排斥单体因为对一个十人以内、业务边界模糊、日活在千级以内的项目来说单体架构的开发效率是最高的。需要正视的问题是“重构成本”。单体的代码随着业务增长会越来越复杂模块之间的依赖会变乱。但这并不意味着要一步到位上微服务而是先把模块边界在代码层面划清楚。很多微服务项目最后发现前期也没把每个服务内部的职责划明白拆出去的也不是“服务”只是把一个乱糟糟的大进程换成了若干个乱糟糟的小进程问题一点没少。我个人的判断标准是如果部署在一台服务器或一个进程里能够稳定支撑未来一年业务量就先用好、用干净单体。把单体内部做成清晰的模块化比盲目拆服务要实在得多。2.2 分布式架构从单点到多点的必然演进当单机扛不住了或者单点故障无法接受的时候系统就会走向分布式架构。分布式不是一种具体的框架而是一种治理思路多个节点协同完成一个任务对外看起来仍然是完整的一个系统。分布式带来的好处是扩展性和可用性代价是复杂度。节点之间要考虑网络延迟、部分失败、数据一致性问题。这跟团队协作很像一个人干活没有沟通成本十个人干活就得定流程、开会议、搭文档库。很多人一听到“分布式”就想到数据库分库分表、缓存集群、负载均衡。但更深层的问题是数据怎么拆分。是垂直按业务域拆还是水平按用户维度拆拆分维度决定了后续所有一致性问题的基础。我见过太多项目在拓扑图上非常漂亮一到数据搬迁才发现边界根本切不干净。2.3 微服务架构拆服务容易治理难微服务是分布式架构的一种具体实现风格核心思想是把系统按业务能力拆成若干个独立部署、自治演进的服务。热搜里经常出现“微服务架构最新2026”之类的词但说实话微服务的理念十年间没有本质变化变的只是基础设施和周边工具。真正让我觉得值得说的是微服务带来的治理成本。服务多了以后服务注册与发现、配置管理、链路追踪、熔断降级、API网关这些问题必须有一整套方案。否则你只是把一个单体拆成几十个然后把原本可以通过函数调用解决的问题变成了需要通过HTTP或者消息队列来解决的问题。所以我一直劝身边团队微服务不是银弹它只适合业务域足够清晰、团队足够大、系统需要独立伸缩的场景。如果你只是想把代码变整洁那应该先整理单体内部的模块结构而不是引入拆分带来的额外复杂性。2.4 物联网三层架构边缘、平台、应用的分工物联网领域最经典的是三层架构感知层设备、网络与平台层、应用层。在热搜词里“物联网三层架构在现实中的具体应用”被反复问说明大家学了一个概念之后往往不知道它落到真实场景里长什么样。拿一个智能灯控系统举例感知层是每个房间的灯光控制器和传感器负责本地采集状态、执行开关指令平台层则部署在一个中心服务器或者云上负责设备接入、权限校验、数据存储、策略下发应用层是用户使用的App或者大屏负责展示状态和下发控制命令。三层架构最容易被忽略的是设备侧的资源约束。很多设备内存只有几百KB根本没有能力上复杂协议所以边缘侧的架构要尽量轻量。我曾经见过一个团队试图在单片机上跑一套完整的消息队列客户端最后因为内存不足消耗了整整两周时间去调试。算力有限就只做本地的实时处理把云端协作这类重逻辑全部放到平台层去做。三层架构的价值就在于强制你划分“边缘算力”“平台算力”“应用算力”的边界每一层的技术选型和优化目标完全不同。2.5 DDD与六边形架构让业务语言成为主线DDD领域驱动设计近年在热搜里一直很稳定。它背后真正的思路是技术建模不应该从数据表或者框架出发而应该从业务领域的语言和规则出发。比如“订单”这个概念在传统CRUD开发里就是一张表。但在DDD视角里订单是一个领域模型它有自己的状态流转规则、业务不变式还要区分哪些是核心领域哪些是支撑子域。建模的结果通常是核心的业务逻辑被封装在领域层基础设施数据库、消息队列、外部接口都通过接口依赖倒置的方式被抽象出去。六边形架构把这个思路具象化了核心业务逻辑在中间外部输入输出都通过适配器接入。不管是REST接口、消息监听、命令行还是定时任务都只是同一个领域核心的“端口适配器”。这种架构需要注意的是上手成本。没有领域专家参与团队很难真正做好DDD。没有懂业务的人告诉你规则细节模型建出来必有偏差。京东、阿里这类核心交易系统有能力用DDD重写核心链路因为业务复杂度太高技术细节反而不是瓶颈。对一个小型CRUD系统来说DDD容易越用越重得不偿失。选不选主要看业务复杂度是不是真的到了建模能带来收益的阶段。我在实践中见过不少团队把领域建模误当成“多加几个概念层”结果系统只是多了很多抽象和绕来绕去的对象并没有比之前在数据库中直接操作更清爽。2.6 Agent架构AI时代的混合智能范式热搜里出现的“Agent架构”“智能体平台架构”让我觉得有必要单独聊一聊。Agent架构跟传统软件架构最大的差异在于它把“智能决策”作为一个核心组件。传统系统是“输入-规则-输出”而Agent系统是“感知-规划-执行-反思”的循环。一个完整的LLM Agent架构至少包含四层模型层多个大模型的接入与路由、记忆层短期对话记忆和长期知识库、工具层调用搜索、代码执行、外部API的能力、控制层Agent循环的决策逻辑与安全边界。如果用传统架构的眼光看Agent平台跟一个业务中台很像上层的每个智能体都是一组独立的业务能力底层把模型、知识库、工具统一管理起来。这类系统还处于快速演进期选型时要重视可配置性不要跟任何一个特定模型厂商绑定太深。否则模型厂商接口一旦大改整套系统的架构都要跟着伤筋动骨。3. 架构选型最实用的四个判断维度热搜词里“系统架构设计师”这个搜索量一直很高。但在我看来设计架构不是把最新最好的框架堆上去而是学会在约束条件下作取舍。下面四个维度几乎可以应对大部分选型场景。3.1 业务复杂度与团队规模的匹配业务复杂度越高越需要清晰的边界和建模团队规模越大越需要通过架构约束来减少沟通成本。但这两者都必须匹配才能发挥作用。可以参考这样一个直观的判断逻辑业务复杂度团队规模较适合的架构风格低小整洁的单体中小到中模块化单体中高中分布式架构或微服务高中到大微服务DDD领域建模这里想强调的是复杂度不等于业务量。一个每天一百万次的简单查询接口业务复杂度并不高加缓存、加数据库读写分离就够了没必要拆成微服务。而一个流程盘根错节、规则不断变化的审批系统哪怕用户量只有一千架构设计也要投入更多精力。3.2 部署运维能力低估这个维度会带来灾难架构方案每增加一个组件运维难度就上升一个量级。引入消息队列意味着你要监控积压量、处理消息丢失、管理消费者组引入容器编排平台意味着团队至少要有人懂基础设施还要保障环境的高可用和持续稳定运行。我在很多传统行业项目里看到过一种尴尬技术团队在方案里画了高可用的图但整个公司没有一个熟练的运维最后的集群变成了一台“看起来很忙”的单点。升级、扩容、故障恢复全靠一个人远程操作所谓的高可用只是纸上谈兵。较好的建议是选架构时先想清楚这些组件由谁来维护出问题之后多久能定位如果答案都要犹豫就先减组件用更简单的方案换取更高的可维护性。3.3 数据一致性强一致与最终一致的取舍这是分布式架构里最影响业务逻辑的决策。金融交易、库存扣减需要强一致通常要借助数据库事务、分布式事务框架、锁机制来保证。而订单状态通知、内容推荐、日志统计这类场景最终一致就够用了通过消息队列异步解耦。一个常见的踩坑点是在允许最终一致的链路里使用了需要强一致的工具结果导致整个链路的吞吐被拖垮。反过来在强一致场景里用了异步消息就会出现超卖、重复扣款这类严重问题。判断数据一致性要求的高低是架构总览阶段一定要明确的。3.4 演进性架构是为了让将来好改不是为了现在好看架构本身要服务于一个核心目标让系统的下一步变化是可控的。业务一定会变技术栈一定会迭代所以任何架构都要为变化留出空间。我比较反对两种极端。一种是过度设计把未来五年可能需要的功能全部预留抽象层导致当前写一行代码要绕三道另一种是完全没有演进意识数据库表结构写死、服务间不做隔离需求一改就要动到全局。合理的做法是只预判未来半年到一年可能的变化为那个范围留接口其余保持简单。4. 结合本系列聊聊总览之后的落地路径标题里的“03-01”说明至少有03模块的若干个章节。我对这个系列的理解是先讲整体架构的思路然后从各个维度和层面逐项深入完整展开一个系统从构想到落地的方法与要点。如果是我来规划内容路径有几点会是优先写进去的。4.1 从需求推导架构的完整步骤第一步收集非功能性需求。并发量、响应时间、数据量、可用性指标这些决定了架构的上限。第二步梳理核心业务流程找出关键链路。第三步按业务的自然边界划分模块不是为了拆分而拆分。第四步做技术选型考虑可选方案评估团队熟悉度与维护成本。第五步形成架构文档包含拓扑图、模块边界、交互流程、关键接口和数据模型。很多团队跳过了第一、第二步直接从技术选型开始。这样的后果是框架上去了应用也跑起来了但是业务一旦变化结构的先天不足就会暴露出来。需求是架构的输入没有输入就直接算输出架构是不可能优质的。4.2 架构评审时要重点问的问题一个是“如果有人现在离职系统能够被快速接手吗”另一个是“每新增一个业务功能大概需要改动多少层”第三个是“核心链路出故障时系统的降级策略是什么”。这三个问题如果回答不了架构图上画得再漂亮都是空中楼阁。我参加过的技术评审里评委质疑最多的往往也是这些新增一个字段是不是要改五六张表缓存挂了数据库能不能扛住用户量某个核心组件不维护了替换成本高不高提前把这些想清楚架构本身的成熟度会高很多。4.3 架构文档落到纸面的不仅是图架构文档并不只是画几张拓扑图。包含的内容至少要覆盖十个方面背景与目标约束条件关键名词定义系统上下文模块结构组件交互数据模型部署视图关键链路场景演进策略文档本身不用过长但要保证每个新加入的成员都可以通过它建立起与团队平均水平一致的认知。一个连自己项目架构文档都写不清的团队本身就暴露了架构边界不明的问题。5. 常见误区与经验技巧这部分的每一条都是我踩过坑之后才总结出来的在这里一并分享出来帮大家避雷。5.1 误区把“新”当成“好”热搜词里“微服务架构最新2026”这类词热度一直高说明行业确实存在着对“新方案”的追捧心。但架构方案的取舍不在于谁更时髦而在于谁更适合当前的业务阶段和团队能力。我的观点比较朴素新框架可以试但不要在生产环境里当小白鼠。一个成熟稳定但稍显朴素的方案远比一个概念先进但社区不活跃的方案可靠。尤其是涉及支付、订单、用户数据等核心链路业务的连续性和数据的正确性永远是第一位的。5.2 误区架构总览只画图不验证架构图画出之后需要把关键链路走查一遍从入口到出口把所有环节的类型、数据格式、异常处理都对一遍。我每次架构设计完都会做两件事一件事是模拟一次完整业务请求把手画或工具画的架构图从用户请求到落到数据库的完整路径走一遍核对每处交互是否合理另一件事是设计一个“系统宕机”场景推演降级和恢复的路径。这两件事做好了架构图的正确性才算初步验证。5.3 经验用“最小闭环”验证架构初次设计一套系统时不要想着把所有组件一步到位。先搭起一个最小闭环一个用户请求经过一个服务模块落到一个存储再返回结果。让这条链路先通起来再逐步把缓存、消息、网关这些组件一个一个加进来。延长链路是架构演进的常规路径。每加一个组件都观察它对整个系统的收益和复杂度代价是否成比例。不是所有系统都需要所有组件很多项目最终的形态不过是从单体整洁版一步步成长起来的分布式系统而已。5.4 经验架构需要保持“可解释性”好的架构有一个特征每个模块的存在都能被讲清楚理由。你在向别人解释的时候如果有某个部分只能说“大家都这么用的”而说不出它对当前系统的明确价值这部分就值得重新斟酌。这个经验在技术评审时尤其管用它逼着你自己先审视一遍去掉那些无意识引入的组件和概念让每一层设计都有依据可讲而不是让系统变成一个复杂的、无人能说清的黑盒。把“03-01-架构篇-整体架构总览”当作整个系列的第一块基石是再合适不过的选择。这一章真正想传达的不是让你记住某种架构图而是让你养成一个习惯动手之前先站在上方把地形看清然后再选择从哪条路走下去。我在多年的项目经历里最深的一个体会是架构从来不是一步到位的它需要持续根据真实业务反馈来调整方向只要设计原则立得住后续的变化就都是演进而不是失控。后续在这个架构方向的系列更新里我们还能继续深入每一层的关键设计和具体落地实现一起把这套系统从图纸变成现实。
返回列表