ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

应用架构到底管什么?一文理清系统边界与交互逻辑

应用架构到底管什么?一文理清系统边界与交互逻辑

企业架构系列写到这里,已经到了第六篇。前面聊了业务架构、数据架构这些概念,不少朋友在评论区问同一个问题:业务架构和数据架构我大概能理解,但应用架构到底管什么?它和技术架构的边界在哪里?画的那一堆框框线线,对实际工作到底有什么用? 这篇文章我就把应用架构单独拎出来,完整拆一遍。你不用回头补前面的章节,我尽量把每个概念都讲自洽。如果你正好在公司里负责系统的规划、整合,或者被领导安排梳理“我们到底有哪些系统”,那这篇尤其值得读完,因为应用架构解决的就是这类让人头疼的问题。

1. 先把位置摆清楚:应用架构在企业架构里是哪一环

1.1 四个架构视图之间的关系

很多公司一提企业架构,第一反应是买一套建模工具,或者请咨询公司出一堆PPT。但真正干过落地的都清楚,企业架构本质上是把企业拆成几个视角,让大家在同一张地图上对话。

企业在架构层面一般会分成四个视图:业务架构、数据架构、应用架构、技术架构。这四者的关系可以这样理解:业务架构回答“我们要做什么生意”,数据架构回答“支持这个生意需要哪些信息资产”,应用架构回答“用什么软件系统来承载这些业务动作和数据的流转”,技术架构回答“这些系统跑在什么样的基础设施和中间件之上”。

应用架构的位置相当关键,它是承上启下的那一层。往上看,它要承接业务架构梳理出来的业务流程和业务能力;往下看,它要约束技术架构的选型和部署。一个系统选型,如果脱离应用架构谈,就会出现业务部门说“我要个客户管理系统”,IT部门就买一套,第二年又来一套功能重叠的,第三年发现两套系统数据对不上——这就是典型的应用架构缺位。

1.2 应用架构回答的三个核心问题

判断一个人是不是真懂应用架构,可以看他是否始终围绕三个问题展开思考。

第一个问题:企业需要哪些应用系统,每个系统的职责边界是什么?这个问题听起来简单,但很多公司根本答不上来,别说全公司,就是同一个事业部,都可能说不清自己辖区下到底跑着多少个系统。

第二个问题:这些系统之间是什么关系,怎么协作完成一项端到端的业务流程?从客户下单到产品交付,中间要经过CRM、订单中心、库存系统、财务系统,这些系统是串行的还是并行的,数据是从哪里发起、在哪里汇聚,这就是应用架构的交互视图。

第三个问题:如果某个业务环节要调整,会牵动哪些应用?没有应用架构的时候,这种评估全凭老员工的经验;有了应用架构,你可以在架构图上直接查上下游依赖。

我用一个类比帮助新手理解:应用架构就是一张地铁换乘图。业务架构决定了我们要修哪些站点,技术架构决定了用什么型号的列车和轨道,而应用架构就是那张告诉你“从哪里上车、在哪里换乘、换乘哪条线”的线路拓扑图。没有它,你只知道有一堆地铁在跑,却不知道乘客(数据)是怎么流动的。

2. 应用架构到底在管什么:三个维度的拆解

2.1 应用资产清单:弄清楚“家底”

应用架构的第一项核心工作,是建立应用资产的完整清单。听起来很基础,但这恰恰是绝大多数企业最容易翻车的地方。我见过一家中等规模的制造企业,信息系统加起来超过两百个,其中三分之一是某个部门或者某个项目私下引入的,总部压根没有记录。

应用资产清单需要记录的信息不只是名称和厂商,关键字段至少包括:

  • 应用名称、编码、所属业务域、支持的业务能力
  • 使用部门、关键用户、运维负责人
  • 部署形态:自研还是外购、私有化部署还是SaaS订阅
  • 生命周期状态:在建、运行、待退役、已废弃
  • 数据级别:该应用承载的数据是否为核心主数据

没有这份清单,后面的交互分析、接口梳理、系统整合基本都是空中楼阁。你要先知道“家里有多少件家具”,才能谈得上布局和收纳。

这里要特别提醒:别以为外购了SaaS就绕开了应用架构治理。SaaS系统同样要纳入清单,而且往往因为它采购太容易,反而成为影子IT的重灾区。业务部门用信用卡一刷,一个SaaS工具就上线了,主数据被复制了一份,后续数据同步问题能折磨整个数据团队好几年。

2.2 应用交互视图:把“系统间关系”画清楚

有了清单,第二步就是梳理应用之间的交互关系。这是应用架构中真正体现技术深度的地方,也是各种架构图最集中的区域。

应用交互视图通常分层表达:

  • 单体系统时代,交互简单,主要是数据库层面的集成,或者文件传输。
  • 中间件时代,产生了ESB(企业服务总线),强调松耦合的服务中心化。
  • 微服务和API时代,交互关系变得更加网状化,每个应用通过API对外暴露能力,交互关系数量成倍增长。

画交互视图时要表达的基础信息包括:交互的发起方与接收方、交互方式(同步调用还是异步消息)、传输数据的大致内容、交互的频率和实时性要求。同步调用多还是异步消息多,直接反映了系统之间的耦合程度;而实时性要求决定你后续的技术选型到底是用消息队列还是HTTP调用。

我画交互视图总结了四个字:先粗后细。第一步不要试图把每个接口都画出来,那是后续的接口映射工作。你先把应用间“有交互”和“没有交互”区分开,再把核心链路(像订单、库存、客户主数据)的交互方向画清楚,就已经能解决85%的沟通问题。一上来就想做“接口级全量地图”的项目,基本都会因为工作量太大而烂尾。

2.3 接口与集成:应用架构的血脉

如果把企业比作一个生命体,应用就是器官,接口就是血管。接口设计是应用架构设计的落脚点,也是跨系统数据流动的咽喉要道。

从应用架构角度,接口至少分为几类:用于读取主数据的接口、用于事务提交的写入接口、用于事件通知的接口、用于批量数据同步的文件接口。不同类型的接口,治理策略完全不一样。

事务性接口要保证一致性,往往要求实时或准实时,需要设计错误处理、超时重试机制;事件通知类接口讲究解耦,消息内容要尽可能少依赖消息生产方的内部结构;批量文件接口看起来简单,但坑很多,字段变更经常引起连锁故障,必须做版本管理。

我见过一个真实的故障事件:一个夜间批量作业因为上游系统增加了三个字段,没有同步通知下游,导致下游解析失败,第二天早上所有门店的实时库存全部显示为零。这就是接口治理缺失的典型后果。应用架构不可能消灭接口,但可以通过清晰的接口登记、变更通知、兼容性策略,把这种低级故障的概率降到最低。

3. 为什么要为应用架构专门花精力:三个理由

3.1 成本失控的根源之一是“重复建设”

企业IT预算永远不够,但很多钱都花在了重复建设上。业务部门A买了一套报销系统,业务部门B又买了一套;自研了一套客户管理,外购的CRM也在跑。这些系统功能高度重叠,但数据标准、流程体验各搞各的,运维成本翻倍。

应用架构最直接的产出就是帮你看到重复建设。当应用资产清单和应用支持的业务能力对齐之后,你会发现,光“客户信息管理”这个业务能力,可能同时有五个系统都在支持。这时候,是在五个系统之上做集成打通,还是收敛为一个核心系统加边缘补充,决策依据就非常清楚了。没有应用架构,你谈“降本”只能靠领导拍脑袋。

3.2 业务变化时的“影响分析”能力

业务架构调整真正落地时,IT最怕的不是开发工作量,而是“改一处、炸一片”的牵一发动全身。今天供应链部门说要调整审批流程,你根本不知道要改哪些系统,也不知道哪些数据会受影响,更不敢承诺上线时间。

应用架构提供了这种影响分析的能力。你可以在架构图上沿着交互链路走查:一个业务流程的变化,涉及系统A、系统B、系统C,系统B和C之间是强同步关系,所以B的变更会直接拖累C。这些判断如果靠IM群问一圈,没人能答全。如果有一张更新及时的交互图,影响分析就是看图说话,几分钟就能圈出范围。

这也是应用架构价值的最高体现——它让IT从被动接需求,变成能主动告诉业务“你这次变革的IT改造范围在哪里、复杂度有多高、周期大概多久”。

3.3 支撑架构决策的长期一致性

很多企业不是没有架构决策,而是决策太碎。今天一个项目定了一个数据库选型,明天另一个项目定了另一个;微服务成了流行词之后,所有新建系统都叫微服务,结果运维能力跟不上,分布式故障的排查成本比单体时代还高。

应用架构提供了一个长期稳定的决策上下文。它对系统边界和交互方式的界定,决定了你该在哪个层面做技术选型、在哪个层面做标准化约束。比如核心交易链路上的应用,技术选型要偏保守,优先选团队最熟悉的技术栈;非核心的创新应用,反而可以允许试错。这种差异化原则,只有建立在应用架构之上才谈得上落地。

4. 应用架构设计的完整落地过程

4.1 从业务能力出发,映射应用支撑关系

第一步,先拿到业务架构的能力地图。业务能力是相对稳定的,它不随组织架构调整而频繁变化,比如“客户开发”“订单管理”“仓储管理”是常青的业务能力。

第二步,把应用资产清单里的每个应用,映射到它支持的业务能力上。这一步要非常认真地确认主次关系:一个应用可能支持多个能力,但通常只有一个核心能力;一个能力往往由多个应用协同支持,但应该有一个主应用。

映射完成后,你可以快速得到一张“能力–应用”矩阵。这张矩阵是应用架构所有后续工作的基础。它告诉你:哪项能力的系统支撑是合理的,哪项能力存在多重覆盖和资源冗余,哪项能力被市场上一堆新系统推着走却没有明确策略。

4.2 绘制应用交互拓扑图

应用交互图的绘制,是让非技术人员看懂应用架构的关键一步。

做法是:挑一条核心端到端流程,把流程上每一步对应到的应用按顺序摆开,再标出每一步之间传递的信息。画第一版时,不要去追求完美的UML规范,用最简单的方式表达清楚即可,画完让业务和技术一起评审,确认“这条流程确实是这样跑的”。

有几个细节在实践中特别容易出错。第一个是方向问题:数据流的方向可能和业务步骤的方向相反,比如订单系统需要向库存系统查询可用量,业务上是“订单先到”,数据交互上却是“库存先返回”。标注方向要格外仔细。第二个是系统角色问题:有的系统在流程中是发起方,在另一条流程中却只是参与者,交互拓扑图要标明角色,否则一张图画完,看不出谁主导。

4.3 应用合理化:保留、更新、替换、下线

应用架构梳理到一定阶段,必然面临一个“手术式”的决策:这个系统到底怎么办。

业界常用的分类方式是四个动作:保留(维持现状,不再追加投入)、更新(在现有系统上做优化改造,控制范围)、替换(用新系统替代旧系统,适合功能严重老化或维护成本过高的场景)、下线(彻底退役,把数据迁出)。这个分类和古董行业的鉴定逻辑很像,先判断值不值得修,再判断修了能不能增值,最后才是要不要把这个物件请走。

做应用合理化时,阻力几乎一定来自业务部门。任何一个系统背后都有熟悉它的用户和流程,贸然下线会引起反弹。我的建议是分三步走:先选一个低风险、高重复的系统做试点,证明整合路径可行;再处理高风险高价值的目标,引入业务部门一起制定过渡方案;最后才大规模推进。不要试图一口气把所有老系统全部替换,那是战略级的豪赌,不是架构工作。

4.4 设计一套可持续演进的目标架构

应用架构不是“梳理完现状就完了”,它必须有一个目标态。目标态不需要画到十年后,两到三年的中期演进路径就够了。

目标应用架构里,每个业务域都应该有一个清晰的核心系统定位。比如客户域的核心是CRM,订单域的核心是订单中心,财务域的核心是财务系统。周边的外围应用可以丰富,但核心只有一到两个。

演进路径上,要明确什么先做、什么后做、什么不做。判断标准是:哪些系统整合能解决当前的最高痛点,哪些整合依赖的基础能力还没准备好。比如主数据管理还没建好,你就急着整合供应链系统,那大概率会把脏数据蔓延到上游。架构演进一定要关注依赖顺序,这是新人在画演进路线时最容易忽略的。

5. 应用架构常用模式与选型思路

5.1 四种基础架构风格的特点和适用边界

从业这些年,我见过企业在架构风格上摇摆不定。今天觉得微服务高级,明天觉得单体省事。应用架构层面的风格选择,不该是技术审美问题,而是和你企业的规模、团队能力和业务稳定性直接相关的投资决策。

单体应用的特点是开发简单、部署集中、调试方便,适合业务逻辑紧密、团队规模小、并发量可控的场景,大量中小规模企业的最佳选择就是单体加良好模块化。SOA强调通过企业服务总线对服务进行中央编排,适合异构系统众多、需要稳定集成老系统的大型传统企业,它的缺点是总线本身可能成为性能瓶颈和单点故障。微服务的优势是独立部署、技术异构、故障隔离,对团队工程能力和运维平台要求都高,不是引入框架就算微服务化。事件驱动架构适合业务流程链路长、需要异步解耦的场景,比如订单状态流转、库存联动、通知触达,它的难点在于事件链路排查困难,对可观测性要求极高。

5.2 选型不能照抄,要看自身约束

选型时最忌讳的是“业界标杆用什么,我也用什么”。某大厂的微服务架构经验,是建立在千人规模工程师和全链路可观测平台之上的,你带着三五个后端,硬上全套微服务全家桶,结果必然是把大量时间花在基础设施运维上,而不是业务交付上。

更合理的思路是让约束条件驱动选型。团队规模小,优先选能减少运维复杂度的方案;核心链路变更频繁,才值得上微服务拆分;遗留系统集成复杂,才考虑引入消息中间件解耦。应用架构师的价值不是追求最新技术,而是在一堆不完美的方案里,找到当前阶段最适合的那一个。

我在实际项目中常画一张决策表:把团队规模、业务复杂度、变更频率、运维能力、合规要求列成评分项,给候选架构风格打分。分数出来后往往不会完全指向某个风格,但能暴露出“我们最缺什么”。缺运维能力却选择高运维复杂度方案,这种决策早晚会把团队拖垮。

6. 常见问题与排查技巧实录

6.1 应用资产清单永远不完整,怎么办

很多团队的架构梳理工作死在第一步:怎么都凑不齐所有应用信息。自研系统还能从代码仓库里翻,外购系统从采购合同里找,最麻烦的是那些已经在跑、但谁都不清楚来源的“老古董”。

处理技巧是:不要追求一次性100%完整,先做存量盘点,把能列的全列出来,标记为“待确认来源”也没关系;同时建立增量登记机制,任何新系统上线前,必须完成应用资产登记,否则不予安排基础资源。用制度去堵增量缺口,比事后补录存量要高效得多。如果存量实在太大,就按业务域分批推进,先梳理核心交易链路,再覆盖外围系统。

6.2 接口依赖的“隐形网”怎么排查

系统之间接口数量一多,很多人会陷入一个误区,拼命画接口列表,结果越画越乱。更高效的方式是反着来:先找“烟囱点”,也就是那些被大量系统调用、或者被极少数核心系统独占的接口。

找烟囱点的办法很简单,在交互视图上把每个应用上的连线数量数一遍。入度高的系统是数据汇聚中心,出度高的系统是能力输出中心。围绕这两个点集中治理,往往能用20%的精力解决80%的接口混乱问题。

真到了要排查一个具体接口的依赖关系时,我的经验是抓两头:看接口的消费方是谁,看接口的生产方是谁,中间传输的报文关键字段是什么。把这三个信息钉在文档里,再复杂的依赖也能捋清楚。

6.3 架构治理推不动,根因往往在流程而不是技术

应用架构的落地阻力,很少来自技术层面,更多来自组织的流程和责权设置。谁负责维护应用架构资产?谁有权否决一个不合规的新系统采购?如果这两件事没有落到具体的人头上,架构文档再生根也只是摆设。

这几年我观察到,比较有效的做法是设立一个轻量的架构评审入口:任何新系统立项、外购审批、重大项目启动,都要过一遍应用架构检查。不一定要建一个庞大的架构委员会,哪怕是两三个资深架构师轮流做架构评审,都远比没有强。评审的重点不必在技术细节,而要盯住几个关键问题:新系统是否重复了现有能力?它和现有系统的数据关系是什么?它上线后谁负责长期的架构一致性维护?

那些把应用架构做成“一次性项目”的企业,通常一年后又回到原状:新系统又开始冒,旧系统的接口文档又失传了。架构治理是一项持续运营工作,这句话我说过很多遍,但真正能用组织机制去保障的团队,还是少数。

7. 应用架构师的日常:三类要务和一条底线

想往应用架构方向发展的人,可以参考我日常工作的三个重点领域。

第一类是持续维护架构资产。应用清单、交互视图、目标架构图,这些不是做完一次就束之高阁,而是每次项目评审、每次系统变更都要回来更新的活档案。

第二类是参与最重要项目的架构评审。不必要插手每个项目的细枝末节,但凡是涉及跨系统改造、核心链路变动、重大技术选型的项目,应用架构视角必须介入。

第三类是推动架构原则的落地和解释。很多开发人员不理解为什么一定要走某条集成路线,架构师的价值就在于把“为什么”讲透,把约束条件讲明白。强压式推行架构规范,短期有效,长期必然反弹;讲清楚背景、约束和收益,团队才会把架构当成自己的资产来维护。

最后再分享一条底线:应用架构说的是“系统组合与交互的状态和演进”,不是“某个具体系统的内部设计”。如果你发现自己在某个系统内部类怎么拆、数据库索引怎么建的层面纠结,那是系统设计或详细设计的事,别把范围蹭到应用架构里来。守住这条边界,你才不会在企业架构的大图里迷失方向,也不会被细节拖得寸步难行。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进