简介:企业架构是数字化转型的地基,其核心在于理清数据、应用与技术三层之间的依赖关系。数据架构强调将数据视为企业资产,通过分层设计(如ODS、DWD、DWS、ADS)和统一指标口径,解决数据孤岛与口径冲突;应用架构从业务能力出发,映射系统边界并规范集成方式;技术架构则依据可运维性、性能与成本完成组件选型和容量规划。这套方法论适合数字化规划、数据平台建设及系统整合场景,帮助架构师与技术负责人从绘制功能图升级为讲清架构的推导逻辑,让评审材料既有业务价值支撑,又能通过技术决策记录(ADR)持续校准落地过程,最终实现从图纸到代码的有效约束。
1. 一份企业架构PPT背后,藏着数字化打地基的全部顺序
做架构评审时,最怕看到的是那种几十页的PPT里全是系统框图,却说不清数据从哪里来、系统边界为什么这样切、技术组件为什么这样选。这类材料的问题不在于图不好看,而在于跳过了推导过程:企业数据架构、应用架构及技术架构设计方法,讲究的是先把数据当资产盘清楚,再把业务能力映射成系统边界,最后才轮到技术选型。我在某头部ICT厂商的架构方法论里看到过一套完整的推导顺序,就是标题里这个「数据架构、应用架构、技术架构」三层递进。这套方法适合正在做数字化规划、数据平台建设或系统整合的架构师、技术负责人和项目管理人员——它能让你从「画架构图」升级到「讲清楚架构为什么长这样」,并且把一套几十页的评审材料拆得让决策者看得懂、愿意批。
2. 先立数据架构:让数据从系统里的字段变成企业的资产
数据架构是最容易被跳过的一层。很多项目一上来就画应用系统拓扑,或者直接选技术组件,等到数据要跨系统打通时才发现各家的字段定义对不上。我通常的做法是先做数据侧的三件事:盘点数据资产、设计数据分层、统一指标和主数据口径。
2.1 数据资产的盘点方式:从系统清单反推数据域
第一步不是画数据模型,而是先登记系统清单。把公司里所有应用系统列出来,每个系统按三列登记:产生什么数据、消费什么数据、主要存储哪些表。这一步虽然枯燥,但它是后续所有架构决策的依据。
我用过一张简化版登记表,格式如下:
| 系统名称 | 产生数据 | 消费数据 | 核心表/模块 |
|---|---|---|---|
| 订单系统 | 订单、支付流水、退款记录 | 客户信息、商品信息 | 订单头表、订单行表、支付流水表 |
| 客户系统 | 客户档案、会员等级、积分 | 订单系统的客户维度 | 客户主表、会员等级表 |
| 商品系统 | 商品信息、类目、库存 | 订单系统、营销系统 | 商品主表、库存表 |
| 营销系统 | 活动配置、优惠券发放记录 | 客户标签、订单数据 | 活动表、券实例表 |
登记完之后,再按业务归属把系统归并成数据域。常见的数据域划分包括:客户域、产品域、交易域、营销域、渠道域、财务域、供应链域。这里有个关键原则:数据域按业务能力划分,不按行政组织划分。否则销售部的数据和市场部的数据会被拆成两个域,但业务上它们其实都在描述同一个客户。
归并完成后的数据域清单,就是后续数据架构图的骨架。每一类数据域只允许有一个系统作为主数据源,其余系统只能通过接口消费,不能各自维护一份。这个「单一数据源」原则是后面所有数据治理动作的基础。如果这一步没做扎实,后面设计应用架构时每一个接口的归属都会扯皮。
2.2 数据分层设计:ODS、DWD、DWS、ADS怎么切而不打架
数据架构的核心设计是分层。做数据平台的人对ODS(操作数据存储)、DWD(明细数据层)、DWS(汇总数据层)、ADS(应用数据层)这套分层都很熟,但在企业架构设计里,分层的颗粒度往往会被忽略——到底哪些表进ODS,哪些加工逻辑放DWD,每个层的数据保留多久,必须有明确规则。
我通常把分层职责定义成一张表,让每一层都有自己的服务对象和加工边界:
| 分层 | 职责 | 数据来源 | 保留周期 | 服务对象 |
|---|---|---|---|---|
| ODS | 原样镜像业务系统数据,不做清洗 | 业务库binlog、接口推送、文件 | 按源系统保留策略,通常30天可回溯 | 数据开发、审计追溯 |
| DWD | 清洗、去重、标准化,保留业务过程明细事实 | ODS | 按业务要求,明细通常保留1-3年 | 数据开发、业务分析师 |
| DWS | 按主题域轻度汇总,沉淀公共指标 | DWD | 汇总结果长期保留 | 报表、指标服务 |
| ADS | 面向具体应用场景定制的汇总数据 | DWS、DWD | 按应用生命周期管理 | 业务应用、大屏、报表 |
分层落地时最常见的问题是ODS和DWD职责混淆。很多人把清洗逻辑也塞进ODS,导致ODS层数据已经面目全非,无法回溯原始状态。我一般要求ODS层建表时除了业务字段,必须保留三个技术字段:etl_time(抽取时间)、source_system(源系统标识)、biz_seq(业务流水号),这三列是后续排查数据问题的后悔药。
-- ODS层镜像表建表示例:订单表 CREATE TABLE ods_order_mirror ( order_id VARCHAR(64) COMMENT '订单号', customer_id VARCHAR(64) COMMENT '客户号', product_id VARCHAR(64) COMMENT '商品号', order_amount DECIMAL(18,2) COMMENT '订单金额', order_status VARCHAR(32) COMMENT '订单状态', create_time DATETIME COMMENT '下单时间', etl_time DATETIME COMMENT '抽取时间', source_system VARCHAR(32) COMMENT '源系统标识', biz_seq BIGINT COMMENT '业务流水号', PRIMARY KEY (order_id, etl_time) ) COMMENT '订单ODS镜像表 - 保留源系统原文';这段建表语句的要点在最后三个字段:etl_time记录数据进入平台的时间,source_system标记来源,biz_seq用于和源系统对账。DWD层再做清洗时,不允许直接改这张镜像表,只能新生成DWD表。这样做的好处是:任何时候数据对不上,都能从ODS层重新跑一遍加工,而不是去找谁改过原始数据。
分层的粒度也要定清楚。我见过有的团队把DWD做到几百张表,每张表只做一次字段改名,这就是过度设计。判断标准很简单:如果这一层加工出来的明细在业务上无法被复用,就不应该单独成层。DWD沉淀的是「业务过程事实」,比如一次下单、一次支付、一次退款;而DWS沉淀的是「公共统计口径」,比如客户累计消费金额、商品近30天销量。ADS则允许针对具体页面做定制,怎么快怎么来。
2.3 指标口径管理和主数据清单:先定统一语言再动工
数据架构设计到这一步,往往会被一个隐形问题卡住:不同系统对同一个业务概念的定义不一致。比如「成交金额」,订单系统认为支付成功就算,财务系统认为开票才算,销售系统认为下单就算。如果不先统一口径,数据平台建得再漂亮,报表照样打架。
我在架构方案里通常会加一份指标口径登记表,把每个关键指标的原子定义、计算公式、统计时点、来源系统定死。以「成交金额」为例:
| 指标名称 | 原子定义 | 计算公式 | 统计时点 | 来源系统 |
|---|---|---|---|---|
| 成交金额 | 客户支付成功的订单金额合计 | SUM(订单金额) WHERE 支付状态=成功 | 支付成功时间 | 订单系统、支付系统 |
| 退款金额 | 客户申请且审核通过的退款金额 | SUM(退款金额) WHERE 审核状态=通过 | 审核通过时间 | 售后系统 |
| 净成交金额 | 成交金额减去退款金额 | 成交金额 - 退款金额 | 按天汇总 | 数据平台计算 |
指标口径的落地,不能只停留在文档里。我会在数据平台里把这些口径固化成视图,所有下游报表只能引用视图,不允许各自写SQL再次定义。下面是一个口径固化示例:
-- 统一成交金额口径:所有报表引用此视图 CREATE VIEW v_metric_order_amount AS SELECT DATE_FORMAT(pay_time, '%Y-%m-%d') AS stat_date, customer_id, SUM(order_amount) AS order_amount FROM dwd_order_detail WHERE pay_status = 'SUCCESS' GROUP BY DATE_FORMAT(pay_time, '%Y-%m-%d'), customer_id;注意这个视图里的过滤条件只有一条:pay_status = 'SUCCESS'。口径统一的关键就是这种「只认状态、不认场景」的做法。如果某个业务方提出「预付款也要算成交」,那就新建一个指标,不要改这个视图。否则改了这里,所有下游报表都会受影响。
主数据清单也要在这个阶段拉出来。主数据包括客户、产品、供应商、组织、人员这几类跨系统共享的基础信息。每一类主数据要指定一个权威系统负责维护,其他系统只能订阅。比如客户主数据由客户系统维护,订单系统调用接口获取客户信息,不允许在订单库单独建一张客户表。主数据清单的作用,是让应用架构阶段设计接口时有一个明确的「数据归属」依据。
3. 再做应用架构:业务能力如何映射成可落地的系统边界
数据架构定了数据归谁、怎么流转,应用架构就要回答系统边界在哪里、系统之间怎么集成。这一步做不好,就会出现「一个业务功能分散在五个系统里,每个系统都觉得自己只做了一部分」的尴尬局面。我一般从业务能力拆解入手,再设计应用分层和集成方式,最后做差距评估。
3.1 业务能力拆解:从业务流程到应用模块的映射方法
应用架构的起点是业务能力,不是现有系统。我见过很多人画应用架构图时,直接把现有系统清单搬上去,这叫「现状拓扑图」,不是架构设计。架构设计要先回答:企业需要哪些业务能力,每项能力由哪个应用模块承载。
常见的做法是先把端到端业务流程梳理出来,比如从客户下单到履约完成,中间涉及商品浏览、下单、支付、审核、发货、签收、售后这些环节。每个环节对应一项或多项业务能力,再把业务能力映射到应用模块。
以订单履约流程为例,映射关系如下:
| 业务环节 | 业务能力 | 应用模块 | 归属系统建议 |
|---|---|---|---|
| 客户下单 | 订单创建、价格计算、库存预占 | 订单中心 | 订单系统 |
| 支付 | 支付发起、支付回调、对账 | 支付中心 | 支付系统 |
| 审核 | 订单风控、人工审核 | 风控中心 | 风控系统 |
| 发货 | 仓库分配、物流单生成 | 履约中心 | 仓储物流系统 |
| 签收确认 | 物流状态更新、订单完成 | 订单中心 | 订单系统 |
| 售后 | 退款申请、退货入库 | 售后中心 | 售后系统 |
这张表的要点是「能力归并」:同类能力尽量收敛到一个应用模块,而不是每个系统都做一套。比如订单创建和订单完成都归订单中心,因为它们的核心数据都落在订单表的同一个生命周期里。如果把这些能力拆到不同系统,数据就要跨系统同步,出现不一致的概率会指数级上升。
做完能力映射后,要检查一遍有没有「能力真空」和「能力重叠」。能力真空指某些业务环节找不到承载系统,能力重叠指多个系统都在做同一件事。这两种情况都是应用架构的缺陷,需要在目标架构里明确合并或新建。
3.2 应用分层与集成方式:API治理和消息队列的取舍
应用架构的经典分层是:接入层(面向用户的端和渠道)、业务层(核心业务逻辑)、数据服务层(数据访问与共享服务)、基础支撑层(组织、权限、消息、文件)。分层不是要搞严格的物理隔离,而是为了界定依赖方向:上层可以调用下层,下层不能反向依赖上层。
分层的价值在集成设计上体现得最明显。系统与系统之间的集成方式,我一般按这个矩阵选择:
| 集成场景 | 推荐方式 | 理由 |
|---|---|---|
| 实时查询、低频调用 | REST API | 简单直接,易于监控 |
| 高频同步、需要最终一致 | 消息队列 | 削峰填谷、解耦 |
| 批量大数据交换 | 文件/批处理 | 吞吐量大,适合离线 |
| 跨系统事务强一致 | 尽量避免,改由统一服务处理 | 分布式事务代价高 |
接口设计上,我在架构方案里会带一份API注册清单模板,让每个集成点都有据可查。下面是一个简化的注册示例:
# API注册清单示例 api: name: order_create version: v1 owner_system: order-center consumer_systems: - web-portal - mobile-app - third-party-channel protocol: HTTPS/REST auth_mode: OAuth2 + 签名 rate_limit: 500 TPS data_entity: order data_owner: order-center这个清单里的关键字段是data_owner:它和数据架构里的主数据归属是对应的。只有数据归属方才能对外提供数据的写接口,其他系统只能申请读权限。这样做的好处是,当数据出问题时,责任边界很清楚——去找owner,不需要在多个系统之间猜。
同步还是异步,是应用架构里争论最多的点。我的经验是一条原则:能异步的尽量异步。比如下单后的发短信通知、积分累计、优惠券核销,这些都不需要用户等待,走消息队列比同步调用可靠得多。但涉及资金、库存这类强约束的操作,必须同步调用并且有兜底补偿,不能为了性能牺牲一致性。
3.3 应用架构的评估矩阵:现状与目标态的差距分析
应用架构设计的最后一步,是把现状和未来目标做差距分析。这一步不是画两张图对比就完事,而是要对每个关键能力打分,明确哪些能力要新建、哪些要改造、哪些直接保留。
我常用一张评估矩阵表,按「业务重要性」和「现状健康度」两个维度评估每个应用模块:
| 应用模块 | 业务重要性 | 现状健康度 | 结论 |
|---|---|---|---|
| 订单中心 | 高 | 低:逻辑耦合严重 | 重构,纳入目标架构 |
| 支付系统 | 高 | 中:缺少对账能力 | 改造增强 |
| 库存系统 | 高 | 低:数据不准确 | 重构并接入数据平台 |
| 报表系统 | 中 | 低:口径混乱 | 整合到数据服务层 |
| 旧的客户查询模块 | 低 | 低:无人维护 | 下线,能力并入客户系统 |
评估矩阵的产出是应用架构的演进路线:哪些模块进一期、哪些进二期、哪些直接淘汰。这里有一个需要克制的地方:不要看到现状不顺眼就想全部推翻重来。架构设计的目标是收敛复杂度,不是制造新的迁移风险。能改造的不要重构,能合并的不要新建,只有那些确实无法扩展的模块才值得推倒重来。
4. 最后定技术架构:选型逻辑、部署形态与容量估算
技术架构是企业数据架构与应用架构的底座。常见的错误是技术选型太超前,或者干脆照搬互联网大厂的组件清单——完全不考虑自己的团队能不能运维。我一般按三个步骤来:先做组件选型矩阵,再定部署形态,最后做容量规划。
4.1 组件选型矩阵:让每一类技术选型都有据可依
技术选型的核心不是「谁最强」,而是「谁最合适」。我给每个技术类别都设一组评估维度:成熟度、社区活跃度、团队熟悉度、运维成本、扩展性、商业授权费用。基于这些维度再打分,避免纯靠个人偏好做决定。
以数据平台最常见的几类组件为例:
| 技术类别 | 主流选择A | 主流选择B | 关键决策因素 |
|---|---|---|---|
| OLTP数据库 | 商用关系型数据库 | 开源关系型数据库 | 一致性要求、团队SQL能力、授权费用 |
| OLAP引擎 | 分布式分析引擎 | 传统MPP数仓 | 数据量级、并发查询复杂度、实时性 |
| 消息队列 | 云上托管MQ | 自建开源消息队列 | 运维人力、可用性要求、消息堆积量 |
| 缓存 | 托管缓存服务 | 自建缓存集群 | 响应时间要求、最大并发、持久化需求 |
选型决策里最常见的翻车点,是团队为了简历好看而选择冷门组件。我见过有团队为了「技术先进」引入一套新型流处理框架,结果社区资料少、招不到人、出了问题没人会修,最后又迁回主流方案。技术架构的第一原则是可运维,其次才是性能。一个团队能维护好的成熟组件,远胜过一个没人会用的新组件。
选型结果要写进架构文档,并附带一页「选型理由说明」:为什么选A不选B,大概的替代成本是多少。这样做的原因是,架构评审时一定会有人问「为什么不用XX」,备好理由能少开很多次会。
4.2 部署架构与高可用设计:常见形态与冗余策略
部署形态是技术架构里必须画清楚的部分。常见的有三种:物理机自建、容器化部署、托管云服务。三者的取舍不是「哪个先进选哪个」,而是看团队运维能力和业务对合规的要求。
| 部署形态 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 物理机自建 | 性能可控、数据不出域 | 扩容周期长、运维重 | 强合规、已有机房 |
| 容器化部署 | 弹性伸缩、环境一致性 | 引入容器编排复杂度 | 系统数量多、需要快速交付 |
| 托管云服务 | 免运维、按量付费 | 长期成本高、定制受限 | 创新业务、弹性需求强 |
高可用设计要具体到每个组件,不能只写一句「做冗余」。数据库至少主从,应用服务至少两个副本,消息队列要做副本同步,缓存要考虑宕机后的穿透。我一般不追求「永远在线」这种极端目标,而是明确可用性等级:核心链路99.95%,非核心链路99.9%,对应每年停机时间分别在4小时和8小时左右。把可用性目标定清楚,运维才有明确的监控和告警标准。
部署架构设计里还有一个经常被忽视的点:网络分区。数据平台、业务系统、外部接口之间要设置清晰的网络隔离,东西向流量要可视化。否则出问题的时候,只能靠猜。
4.3 容量规划:从业务峰值倒推资源需求
容量规划是技术架构评审里决策者最关心的部分,因为直接关联预算。我的做法是从业务峰值倒推:先定业务量目标,再换算成技术指标。
以一个日订单量50万的业务为例,估算逻辑如下:
# 容量估算示例 daily_orders = 500000 # 日订单量 peak_hours = 4 # 高峰时长(小时) peak_ratio = 0.6 # 高峰期间订单占比 avg_cpu_time_ms = 50 # 单次订单处理平均CPU时间 # 高峰QPS估算 total_time_s = peak_hours * 3600 peak_qps = daily_orders * peak_ratio / total_time_s print(f"估算高峰QPS: {peak_qps:.1f}") # CPU核数估算(预留30%余量) core_count = peak_qps * (avg_cpu_time_ms / 1000) * 1.3 print(f"建议应用CPU核数: {core_count:.0f}") # 存储估算(订单明细保留3年) avg_order_row_size_kb = 4 rows_per_day = daily_orders * 2 # 订单头 + 订单行 total_storage_gb = rows_per_day * avg_order_row_size_kb * 365 * 3 / 1024 print(f"3年订单存储需求: {total_storage_gb:.0f} GB")这段脚本里的每个参数都要在架构文档里标注依据。avg_cpu_time_ms不是拍脑袋定的,可以压测或者从线上监控取均值;peak_ratio来自历史流量分析。容量规划的目的不是精确预测未来,而是给评审会一个可论证的数字:如果业务翻倍,需要加几台机器、花多少钱。这样决策者才能判断这个技术架构方案的投入产出是否合理。
容量规划完成之后,技术架构的主体内容就齐了,可以开始写评审材料,也就是最终交付的PPT。
5. 架构设计方法落地的5个常见坑:这些翻车现场你迟早会遇到
企业数据架构、应用架构、技术架构设计方法说起来条理清晰,真落地时每一步都有坑。下面这5类问题是我在评审和复盘里反复遇到的,提前知道能省不少加班时间。
坑一:数据架构图和数据模型对不上
现象:PPT里画了完整的数据分层,数据域划分也漂亮,但打开实际数仓一看,ODS层直接建了三层,业务数据散落在十几个库,域名和数据域完全对不上。
原因:数据架构设计只停留在汇报材料层面,没有真正约束落地过程。架构设计完就束之高阁,开发按自己的习惯建表。
解决:把数据架构设计里的分层规则、命名规范固化成开发规范,并在代码评审时检查。建表语句里必须带分层标识和域标识,没有这两个标识不让上线。架构文档不落地,它就是一张图;落了地,它才是架构。
坑二:应用架构照着组织架构画
现象:系统边界直接按部门划分,市场部一套系统、销售部一套系统、客服部一套系统,每个系统里都有一份客户信息。
原因:画架构图的人图省事,认为部门划分就是业务能力划分。
解决:重新按业务能力拆解。客户信息只允许客户系统维护,其他系统通过接口或数据服务获取。这个冲突会在评审会上暴露,提前准备好能力映射表,用业务事实说话。
坑三:指标口径在文档里统一了,上线后还是打架
现象:口径登记表写得很规范,但实际报表里的「成交金额」还是和财务对不上。
原因:口径只定义在文档里,没有固化到数据平台。业务方自己写SQL查数时,各自又按自己的理解算了一遍。
解决:所有公共指标在DWS层固化成视图,业务方只能引用视图。自定义指标可以临时写SQL,但必须注册口径说明。发现口径冲突时,先查视图里取数口径,再查下游是否引用正确。
坑四:技术架构选型追求新鲜,运维扛不住
现象:架构方案里全是热门的云原生组件,但团队没人精通,出问题要临时查文档,恢复时间以小时计。
原因:选型只看技术热度,没评估团队技能和运维成本。
解决:选型矩阵里给「团队熟悉度」和「运维成本」加权。新技术可以试点,但核心链路必须用团队用得最熟的技术。技术架构的目标是稳定支撑业务,不是展示技术品味。
坑五:架构评审会变成PPT朗读会
现象:几十页的架构材料,评审委员听了一半就开始玩手机,最后只问了一句「要花多少钱、多久能上线」。
原因:汇报顺序错了。不要先讲技术细节,要先讲业务价值和成本。评审人不关心你的数据域怎么划分,关心的是这套架构能不能支撑业务增长、要多少人、要多少钱。
解决:调整PPT结构——先讲业务痛点和目标,再讲架构全景,最后附上资源和成本估算。评审材料的每一页都要有结论,不能只放图让领导自己看。
6. 把架构设计通过评审:汇报顺序、PPT写法与决策记录
架构设计方法本身的终点,不是设计文档写完,而是通过评审,拿到资源和授权进入实施。我做了几次架构评审后,总结出一套让方案更容易通过的汇报习惯。
汇报顺序必须调整成「业务先行、成本次之、技术垫底」。开场先讲现在业务遇到什么问题——数据对不上、系统扩展困难、报表口径冲突、新业务上线慢,这些都是业务语言,评审人一听就懂。然后讲目标架构能带来什么变化,最后才展开技术架构的细节。技术细节不是不重要,而是要放在决策者想知道的时候再讲。先讲技术会跑掉一屋子人。
PPT的写法也有讲究,一页只讲一个结论。比如「订单系统需要重构」这一页,配三张图就够:现状痛点截图、目标架构位置图、改造工作量表。不要堆架构图,评审人没有耐心在一页里找重点。每一页右下角加一行「本页结论」,一句话说清楚这页要表达什么。汇报全程按结论讲,细节放附录。
架构评审通过后,我会要求把关键决策写进决策记录,也就是架构领域的ADR(Architecture Decision Record)。每条决策记录包含背景、决策内容、理由、备选方案和影响。比如「订单数据以订单系统为唯一数据源,其他系统通过接口获取」这件事,如果不记录,三个月后开发人员就会问「为什么不能直接在报表库里建一张订单表」。有了决策记录,就可以把当时讨论的过程翻出来,不用重新吵一遍。ADR还承担一个功能:约束实施过程。实施阶段的代码评审、架构巡检都要对照ADR检查,发现偏离就拉回来。
我自己的习惯是,每次做完架构设计,预留一天时间专门写ADR,把那些评审会上吵过的、最后拍板的关键决策全部记下来。这比画图花的时间还长,但省掉了后面无数次的解释成本。架构设计从来不是一次交付,而是持续校准的过程——数据架构、应用架构、技术架构之间的依赖关系,会在实施过程中不断暴露新问题,这时回头查ADR,就能确认当初的决策边界和调整空间。
希望这篇关于企业数据架构、应用架构及技术架构设计方法的拆解,能帮你少走一些弯路。架构这条路,图纸只是起点,真正难的是让图纸约束住每一行代码。
本文还有配套的精品资源,点击获取