《TOGAF学习之路》企业架构实践(四):从系统接口到数据架构——数据来源、流向与一致性

  1. 《TOGAF学习之路》企业架构实践(一):从日常 IT 工作开始理解企业架构
  2. 《TOGAF学习之路》企业架构实践(四):从系统接口到数据架构——数据来源、流向与一致性

企业架构实践(四):从系统接口到数据架构——数据来源、流向与一致性

一、系统之间传递的是数据,但数据本身也有架构

在上一篇文章中,我们讨论了企业应用集成,介绍了 Web Service、RabbitMQ 和集成服务在系统交互中的作用。

通过这些技术,ERP、MES 和 WMS 等系统可以交换业务信息,支持不同业务环节之间的协作。

但继续往下分析,会发现一个问题:

系统之间完成了数据传递,并不代表数据管理的问题已经解决。

例如,ERP 将物料信息发送给 MES,MES 接收后可以使用这些信息。但我们还需要进一步了解:

  • 物料信息最初由哪个系统维护?
  • 哪个系统负责审核和发布?
  • 其他系统中的物料信息是否允许修改?
  • 物料信息发生变化后,如何同步到其他系统?
  • 如果同步失败,如何发现和恢复?
  • 不同系统中的同一物料,如何确认是同一个业务对象?

这些问题已经不只是接口开发的问题,而是涉及企业的数据管理方式。

学习 TOGAF Standard 10 时,我逐渐认识到,数据架构(Data Architecture)并不是简单地整理数据库表结构,也不只是建立一个数据仓库。

它需要从企业整体的角度,理解数据有哪些、数据由谁管理、数据如何流转,以及不同系统之间如何使用这些数据。

对于制造企业而言,物料、BOM、客户、供应商、生产订单和库存等数据,都可以作为理解数据架构的切入点。

二、先区分业务数据与技术数据

在日常 IT 工作中,我们经常会接触各种数据。

数据库中有表和字段,接口中有 JSON 或 XML 报文,消息队列中有消息内容,报表平台中有各种指标。

但这些数据并不都属于同一个层次。

从企业架构的角度来看,可以先简单区分为两类。

2.1 业务数据

业务数据直接描述企业的业务对象和业务活动。

例如:

数据类别 典型数据
主数据 物料、客户、供应商、员工
产品数据 产品、BOM、工艺路线
生产数据 生产订单、生产报工、完工记录
库存数据 库存数量、批次、库位
采购数据 采购订单、收货记录
销售数据 销售订单、发货记录

这些数据有明确的业务含义。

例如,物料数据描述企业生产或经营过程中使用的物料;BOM 描述产品组成;生产订单描述生产任务;库存数据反映某个业务时点或业务范围内的库存情况。

它们可能分布在多个系统中,但并不意味着每个系统都应该拥有完整的管理权限。

2.2 技术数据

技术数据主要用于支持系统运行和技术处理。

例如:

  • 数据库连接信息。
  • API 请求日志。
  • 消息队列状态。
  • 应用运行日志。
  • 监控指标。
  • 系统配置。
  • 文件存储元数据。

这些数据对于系统运行、故障排查和技术管理非常重要。

例如,RabbitMQ 中的消息可以携带生产订单相关数据,但消息本身属于技术传输过程中的载体,生产订单才是业务对象。

同样,数据库中的一条记录只是业务数据的一种存储形式,不能把数据库表直接等同于企业的数据架构。

数据架构关注的是数据本身的业务含义和管理关系,而不仅仅是数据存放在哪里。

三、理解主数据:谁负责维护数据?

在制造企业中,有一类数据非常值得优先梳理,那就是主数据(Master Data)。

主数据通常是多个业务流程和应用系统共同使用的基础数据。

例如:

  • 物料。
  • 客户。
  • 供应商。
  • 产品。
  • 组织。
  • 员工。

如果这些数据在不同系统中各自维护,就容易出现编码不一致、名称不一致、属性不一致等问题。

3.1 多个系统使用同一类数据,不代表多个系统都应该维护它

假设企业同时使用 ERP、MES 和 WMS。

这三个系统都可能使用物料信息。

但它们使用物料信息的目的不同:

  • ERP 可能使用物料信息支持采购、销售、库存和生产计划。
  • MES 可能使用物料信息支持生产执行和物料消耗。
  • WMS 可能使用物料信息支持收货、上架、拣货和库存管理。

因此,需要进一步明确:

哪个系统负责维护物料的基础信息?

哪个系统负责审核物料数据?

哪个系统只负责接收和使用物料数据?

如果三个系统都允许独立修改同一物料的关键属性,就可能出现数据不一致。

例如,ERP 中的物料名称已经修改,但 MES 和 WMS 仍然保留旧名称;或者不同系统对同一个物料使用了不同的编码。

这类问题并不一定是接口故障,而可能是数据管理职责不清晰造成的。

3.2 什么是权威数据源?

在数据架构中,经常会遇到一个概念:权威数据源(Authoritative Source)。

简单来说,就是针对某一类数据,明确由哪个系统或业务部门负责提供权威信息。

例如,可以根据企业实际管理方式,为物料、客户和供应商分别确定权威数据源。

这里需要强调:

权威数据源不一定是所有数据都存放的地方,而是负责维护和确认某类数据正确性的来源。

其他系统可以保存数据副本,用于自己的业务处理,但不一定拥有修改和发布该数据的权限。

举个例子:

如果企业规定 ERP 负责维护物料主数据,那么 MES 可以接收物料信息并用于生产业务,但不应随意修改 ERP 负责管理的关键主数据属性。

如果 MES 需要补充生产执行过程中产生的信息,则可以由 MES 管理这些生产执行数据。

这样,不同系统就有了相对清晰的数据管理边界。

3.3 一个系统不一定是所有数据的唯一权威来源

在实际企业环境中,不同数据可能由不同系统负责。

例如:

数据类型 可能的权威来源 说明
物料主数据 ERP 或专门的主数据系统 根据企业物料管理职责确定
客户信息 ERP 或 CRM 取决于客户管理流程
供应商信息 ERP 或 SRM 取决于供应商管理流程
BOM ERP、PLM 或其他产品管理系统 需要明确版本和发布职责
生产订单 ERP MES 接收后用于生产执行
生产报工 MES 根据实际业务规则回传 ERP
仓储作业记录 WMS 用于仓储执行和作业跟踪

这张表只是用于说明不同数据可能有不同的管理来源,并不是对所有制造企业的统一规定。

实际情况需要结合业务流程和系统职责确认。

例如,BOM 可能由 PLM 管理,也可能由 ERP 管理;客户信息可能由 CRM 管理,也可能由 ERP 作为主要维护系统。

不能仅凭系统名称决定数据归属。

四、数据在不同系统之间如何流动?

明确数据来源之后,下一步就是梳理数据流向。

这一点与上一篇讨论的应用集成有直接关系。

应用架构关注系统之间如何交互,而数据架构还需要进一步关注交互的具体内容。

4.1 以 D365 F&O 与 MES 为例

目前,D365 F&O 与 MES 之间的集成链路为:

D365 F&O ↔ ERP Sync Service ↔ RabbitMQ ↔ MES

这条链路不仅涉及系统之间的连接,还涉及业务数据的传递。

例如,相关业务数据包括:

  • 生产工单。
  • 物料信息。
  • BOM。
  • 库存等相关信息。
  • 生产报工和完工数据。

从业务角度来看,可以初步理解为:

数据内容 业务方向 说明
生产工单 D365 F&O → MES ERP 侧向 MES 提供生产任务
物料信息 根据实际接口方向确认 支持生产业务
BOM 根据实际接口方向确认 支持生产所需的物料组成信息
库存相关数据 根据实际接口方向确认 支持相关业务处理
生产报工 MES → D365 F&O MES 将生产执行结果反馈到 ERP 侧
完工数据 MES → D365 F&O MES 将相关生产完成信息反馈到 ERP 侧

这里需要注意,表格中的业务方向是从整体业务关系进行归纳,具体接口可能存在多个处理阶段,实际方向和字段范围仍然需要以接口定义为准。

数据流向与技术链路也不是一回事。

例如,生产工单从 ERP 侧传递到 MES,在技术实现上仍然需要经过 ERP Sync Service 和 RabbitMQ。

因此,完整的数据流分析需要同时考虑:

  1. 数据从哪个业务系统产生。
  2. 数据经过哪些集成组件。
  3. 数据最终由哪个系统接收。
  4. 接收方如何处理和保存数据。
  5. 处理结果如何反馈或确认。

如果只画一条从 ERP 指向 MES 的箭头,就无法表达完整的技术实现。

如果只画 ERP Sync Service 和 RabbitMQ 的连接,也无法说明传递的业务数据是什么。

这两种信息需要结合起来看。

4.2 以 ERP 与 WMS 为例

ERP 与 WMS 之间通过 Web Service 进行集成。

在数据架构分析中,可以进一步整理:

  • 哪些数据由 ERP 提供给 WMS?
  • 哪些数据由 WMS 返回 ERP?
  • 数据是实时调用还是批量处理?
  • 接口返回成功代表什么?
  • 数据处理失败后如何重新处理?
  • 如何确认两边的数据保持一致?

例如,库存相关数据在 ERP 和 WMS 中可能都有记录。

但需要注意,两个系统中的库存数据未必具有完全相同的业务含义。

WMS 可能更关注仓库、库位、批次和实际作业数量;ERP 可能更关注财务库存、业务库存以及相关业务单据。

如果不先明确库存数据的定义,就很容易在接口开发和报表统计中产生理解偏差。

因此,数据架构不仅要记录数据流向,还需要理解数据在不同业务系统中的含义。

五、为什么多个系统之间容易出现数据不一致?

数据不一致是企业系统集成中比较常见的问题。

即使接口已经正常运行,也不代表不同系统中的数据一定完全一致。

原因可能来自多个方面。

5.1 数据同步失败

例如,ERP 已经创建了一条生产订单,但由于接口异常,MES 没有成功接收。

此时,两个系统中的业务数据状态就可能不同。

如果没有相应的异常记录和补偿机制,这类问题可能一直存在,直到业务人员发现。

5.2 数据更新不同步

假设 ERP 中某个物料的基础信息发生变化。

如果相关变更没有及时传递到 MES 或 WMS,其他系统就可能继续使用旧数据。

这不一定意味着接口完全失败,也可能是同步延迟或变更事件没有被正确处理。

5.3 重复数据处理

在接口重试或消息重新投递的情况下,同一条业务数据可能被重复处理。

例如,同一笔生产报工如果被重复提交,可能导致数量重复累计。

因此,对于重要业务数据,需要考虑幂等性(Idempotency)。

简单来说,就是同一项业务请求即使被重复提交,也应该能够避免产生不符合预期的重复业务结果。

5.4 数据定义不一致

这是比较容易被忽视的一种情况。

例如,ERP 和 MES 都有库存数量字段,但两边的统计范围可能不同。

一个系统可能记录账面库存,另一个系统可能记录实际可用库存;一个系统按仓库统计,另一个系统按库位和批次统计。

字段名称相同,不代表业务含义相同。

因此,在数据架构中,需要关注数据定义和业务口径,而不仅仅是字段名称。

5.5 数据处理顺序不同

有些业务数据存在先后依赖。

例如,生产订单可能依赖物料信息和 BOM 信息。

如果生产订单先到达,而相关物料或 BOM 数据尚未准备好,MES 就可能无法正常处理该订单。

这种情况说明,数据集成不仅要关注数据是否传递,还需要考虑数据之间的依赖和处理顺序。

六、数据一致性应该如何管理?

数据一致性不是简单地通过定时同步就能够完全解决的。

需要根据不同数据的业务重要性和使用方式,确定合适的管理机制。

6.1 明确数据的管理责任

首先,需要明确每类数据由谁维护。

例如:

  • 哪个系统负责创建?
  • 哪个系统负责修改?
  • 哪个系统负责审核?
  • 哪个系统负责发布?
  • 其他系统是否允许修改相关数据?

如果这些职责不清晰,接口越多,数据管理就越复杂。

因此,数据架构应该与业务管理流程结合起来。

6.2 明确数据同步机制

不同数据可能需要不同的同步方式。

例如:

同步方式 适用场景
实时同步 业务要求及时获得最新数据
定时同步 数据允许存在一定时间差
事件驱动 数据发生变化后触发后续处理
批量同步 数据量较大,适合集中处理

这些方式没有绝对的优劣。

需要根据业务时效性、数据规模、系统能力和运维成本综合选择。

例如,某些基础资料的变更可以采用事件驱动或定时同步,而某些业务操作可能要求及时返回处理结果。

6.3 建立异常处理和补偿机制

数据同步失败后,不能只依赖人工发现。

可以根据实际情况建立:

  • 接口调用日志。
  • 消息处理状态。
  • 失败记录。
  • 重试机制。
  • 人工补偿入口。
  • 数据核对机制。

例如,对于重要生产数据,可以定期比较 ERP 与 MES 中的关键业务记录,发现长时间未完成同步的数据。

这里的重点不是追求所有数据实时一致,而是根据业务要求明确允许的延迟范围,并确保异常能够被发现和处理。

6.4 明确数据一致性的业务要求

不同数据对一致性的要求可能不同。

例如,物料基础信息发生变化后,其他系统可能允许短时间内存在同步延迟。

但对于某些关键生产业务数据,如果长期没有同步,就可能影响生产执行。

因此,需要根据数据的重要性确定相应的要求。

可以从以下几个方面考虑:

  • 数据允许延迟多久?
  • 发生不一致后,多久需要发现?
  • 哪些数据必须及时处理?
  • 哪些数据允许批量同步?
  • 数据不一致时由哪个部门或系统负责处理?

这些要求最终需要与业务部门共同确认。

技术人员可以提供实现方案,但数据管理规则不能完全由技术实现来代替。

七、从数据架构角度重新审视企业系统

通过前面的分析,可以看到,数据架构并不是独立于应用架构存在的。

它与业务架构、应用架构和技术架构都有密切关系。

7.1 与业务架构的关系

业务架构决定企业需要哪些业务数据,以及这些数据在业务流程中如何使用。

例如,生产订单、物料和 BOM 都与生产业务有关。

如果不理解业务流程,就很难准确判断这些数据的来源和管理责任。

7.2 与应用架构的关系

应用架构说明哪些系统负责创建、处理和使用数据。

例如,D365 F&O、ERP Sync Service、RabbitMQ 和 MES 共同参与相关生产数据的传递。

如果不了解应用之间的关系,就很难完整描述数据流向。

7.3 与技术架构的关系

技术架构提供数据存储和传递的运行基础。

例如:

  • PostgreSQL 和 MySQL 用于关系型数据存储。
  • RabbitMQ 用于消息传递。
  • MinIO 用于对象存储。
  • NFS 提供网络文件存储访问。
  • Dremio 和 Superset 支持数据查询与分析。

但需要注意,使用同一种数据库或数据平台,并不意味着不同系统之间已经建立统一的数据管理机制。

技术平台解决的是数据存储、访问和处理方面的问题,而数据架构还需要解决数据含义、来源、责任和使用规则等问题。

八、下一步:从数据清单走向数据架构

如果要进一步开展数据架构梳理,我认为可以先从几个简单的工作开始。

8.1 建立核心数据清单

先整理企业主要业务数据,例如:

  • 物料。
  • 产品。
  • BOM。
  • 客户。
  • 供应商。
  • 生产订单。
  • 生产报工。
  • 库存。
  • 采购订单。
  • 销售订单。

不需要一开始就覆盖所有字段,先明确数据类别和业务含义即可。

8.2 明确数据来源和管理责任

为每类数据确定:

  • 主要维护系统。
  • 业务责任部门。
  • 数据使用系统。
  • 是否存在多个系统分别维护的情况。

这一步可以帮助发现数据管理职责不清晰的问题。

8.3 梳理关键数据流

针对重要业务流程,绘制数据流向图。

例如:

生产工单从 ERP 侧进入 MES,MES 完成生产执行后,再将报工和完工相关数据反馈到 ERP 侧。

同时记录实际经过的集成组件和接口方式。

8.4 建立数据质量与一致性检查机制

根据业务需要,逐步补充数据校验规则、同步状态、异常处理和数据核对机制。

对于关键数据,可以明确数据质量要求和异常处理责任。

这些工作不一定要一次性完成,可以从影响较大的业务数据开始。

九、这一阶段的实践总结

通过从应用集成进一步分析数据流转,我对数据架构有了更具体的认识。

数据架构并不只是数据库设计,也不只是把不同系统中的数据集中起来。

它需要回答一些更基础的问题:

  • 企业有哪些重要业务数据?
  • 每类数据由谁负责维护?
  • 哪个系统是权威数据源?
  • 数据如何在不同系统之间流转?
  • 不同系统如何理解和使用同一类数据?
  • 数据不一致时如何发现和处理?

这些问题与企业业务流程密切相关,也会影响应用集成和系统建设。

对于制造企业而言,ERP、MES 和 WMS 之间的数据交互只是其中一部分。随着系统数量和业务复杂度增加,数据来源、数据标准、数据质量和数据管理责任都会变得更加重要。

我目前的理解是,数据架构的第一步并不是设计一个庞大的数据平台,而是先把核心业务数据梳理清楚,明确它们的来源、用途和流转关系。

只有先理解数据,后续的数据集成、数据分析和数据治理才有比较可靠的基础。

下一篇,我准备继续回到企业 IT 的整体视角,讨论另一个重要领域:技术架构(Technology Architecture)。从 Linux、VMware、Kubernetes、数据库、中间件和存储等现有技术环境出发,看看如何理解技术平台之间的依赖关系,以及如何从系统运行环境逐步形成技术架构视图。

Leave a Reply

Your email address will not be published. Required fields are marked *