《TOGAF学习之路》企业架构实践(三):企业应用集成——从 Web Service 到消息队列

企业架构实践(三):企业应用集成——从 Web Service 到消息队列

一、系统之间能够连接,不代表集成架构已经清晰

在前两篇文章中,我从企业现有的 IT 环境出发,整理了系统清单,并尝试把系统之间的关系表达出来。

梳理过程中,一个比较明显的感受是:企业里的应用系统通常不是独立运行的。

ERP 需要与其他业务系统交换数据,MES 需要接收生产相关信息,WMS 需要处理仓储业务。为了让这些系统协同工作,企业需要建立各种接口和数据交互机制。

在实际环境中,不同系统之间可能采用不同的集成方式。

例如,目前 ERP 与 WMS 通过 Web Service 进行集成;而 D365 Finance and Operations 与 MES 之间,则通过 ERP Sync Service 和 RabbitMQ 等组件完成相关集成。

这两种方式都能够实现系统间的数据交互,但它们的技术机制、处理流程和运维关注点并不相同。

如果只知道两个系统之间存在接口,还不足以完整理解集成架构。

我们还需要进一步了解:

  • 系统之间通过什么方式交互?
  • 调用方是否需要等待被调用方完成处理?
  • 数据通过什么方式传递?
  • 接口失败后如何处理?
  • 是否存在独立的集成服务?
  • 如何确认数据已经成功处理?
  • 当业务量增加时,现有集成方式是否仍然适用?

这些问题既与具体的技术实现有关,也与业务流程和系统职责有关。

因此,这篇文章准备从日常 IT 管理中比较常见的集成场景出发,梳理 Web Service、消息队列和集成服务之间的关系,并尝试理解它们在企业应用架构中的作用。

二、先理解同步调用与异步消息

在分析具体的集成方式之前,我认为有必要先区分两个概念:同步调用和异步消息。

它们描述的是交互过程中的不同处理机制,并不完全等同于某一种具体协议或产品。

2.1 同步调用:调用方需要等待响应

假设 ERP 需要向 WMS 查询某项业务信息。

一种常见的方式是,ERP 调用 WMS 提供的 Web Service 接口,WMS 处理请求后返回结果。

整个过程可以简化为:

  1. ERP 发起请求。
  2. WMS 接收请求。
  3. WMS 执行相应处理。
  4. WMS 返回响应。
  5. ERP 根据响应结果继续处理。

在这种模式下,调用方通常需要等待被调用方返回响应,才能根据结果决定下一步操作。

这就是同步调用的基本思路。

这里需要注意,同步调用并不意味着整个业务流程一定在一次请求中全部完成。接口可能只完成查询、校验或接收请求等操作,后续业务处理仍然可能在后台执行。

同样,接口返回成功,也需要明确它所代表的成功含义。

例如,接口返回成功可能只表示请求已被接收,并不一定意味着所有后续业务处理都已完成。

因此,设计接口时,需要明确请求、响应和业务处理结果之间的关系。

2.2 异步消息:发送方与接收方可以分开处理

另一种方式是使用消息队列。

发送方将消息发送到消息中间件,接收方再从中获取消息并进行处理。

简化后的过程如下:

  1. 发送方准备业务消息。
  2. 消息被发送到 RabbitMQ。
  3. 消费方获取消息。
  4. 消费方执行相应业务处理。
  5. 根据实际设计,消费方确认消息处理状态。

这种方式允许发送方和接收方在一定程度上独立运行。

例如,发送方成功将消息交给消息中间件后,通常不需要等待接收方完成全部业务处理,便可以继续执行其他工作。

但这里同样需要注意:消息发送成功,不等于接收方已经完成业务处理。

如果业务要求确认最终处理结果,就需要进一步设计处理状态、结果反馈、异常记录等机制。

异步消息并不意味着可以不关心处理结果,只是把发送与处理分成了不同阶段。

2.3 两种方式有什么区别?

可以从以下几个方面进行比较。

比较维度 同步调用 异步消息
基本交互方式 请求后等待响应 发送消息,接收方后续处理
调用方是否需要等待业务处理结果 通常需要等待接口响应,具体取决于接口语义 通常不需要等待消费方完成业务处理
系统之间的时间耦合 较强,调用过程通常要求对方及时响应 可以降低发送方与接收方的时间耦合
处理结果 通常通过接口响应返回 通常需要结合消息确认、业务状态或结果反馈判断
典型关注点 超时、接口错误、请求失败 消息积压、重复处理、消费失败、消息恢复
常见技术形式 Web Service、HTTP API RabbitMQ 等消息中间件

这张表只是概括了两种模式的典型特征。

实际系统可能采用混合方式,例如通过同步接口提交请求,再通过消息队列处理后续业务。

因此,在分析企业应用集成时,不应该只根据接口名称判断系统采用了哪种机制,而应该结合实际交互流程进行确认。

三、结合实际环境理解 Web Service 集成

目前,企业 ERP 与 WMS 之间通过 Web Service 进行集成。

这是一种比较常见的企业应用集成方式。

但在架构分析中,我认为有必要区分两个问题:

第一,系统之间采用什么技术方式进行交互。

第二,这种交互方式具体支持什么业务流程。

Web Service 只是技术实现的一部分,真正需要理解的仍然是接口背后的业务含义。

3.1 先明确接口双方的职责

在 ERP 与 WMS 的集成中,ERP 和 WMS 分别承担不同的业务职责。

ERP 负责相关企业资源管理业务,WMS 负责仓储管理。

系统之间需要交换哪些数据,应该由实际业务流程和接口设计决定,而不能仅凭系统名称推断。

在梳理这类集成时,可以先整理一份接口清单。

信息项 需要记录的内容
接口名称 接口的正式名称或业务用途
调用方 哪个系统发起请求
被调用方 哪个系统提供接口
交互方式 Web Service、HTTP API 或其他方式
业务用途 接口解决什么业务问题
数据内容 请求和响应包含哪些主要数据
调用方向 数据从哪个系统流向哪个系统
异常处理 请求失败或处理异常时如何处理
业务结果 如何确认相关业务处理已经完成

这份清单不需要一开始就非常复杂。

先把接口名称、调用方、被调用方、业务用途和数据方向整理清楚,就可以帮助我们建立基本认识。

之后再逐步补充超时设置、错误码、重试策略和业务确认机制。

3.2 接口成功,不一定代表业务成功

这是接口设计中容易被忽略的问题。

假设 ERP 调用 WMS 接口,接口返回了成功响应。

这个响应究竟代表什么?

可能是:

  • 请求已经成功接收。
  • 请求参数已经通过校验。
  • 业务数据已经保存。
  • 相关业务操作已经全部完成。

这些含义并不相同。

如果接口只是接收了请求,而后续处理仍然在后台进行,那么调用方就不能把接口返回成功直接理解为业务流程已经完成。

因此,在接口设计中,需要明确响应语义。

对于重要业务,还需要考虑如何查询处理状态、识别失败记录,以及在必要时重新发起处理。

这些设计不仅影响接口开发,也会直接影响后续的运维和故障排查。

3.3 需要关注哪些运行问题?

对于 Web Service 集成,可以重点关注以下几个方面。

第一,超时。

如果被调用方处理较慢,调用方可能在等待一段时间后超时。

超时并不一定意味着被调用方没有执行操作。有时请求已经被处理,只是响应没有及时返回。

因此,发生超时后,不能不加判断地直接重复提交可能产生业务副作用的请求。

第二,重试。

对于临时网络异常或短暂服务不可用,可以考虑重试机制。

但重试必须结合业务操作的性质设计。

例如,同一笔业务请求如果被重复执行,可能导致重复创建记录或重复处理业务。

因此,需要考虑请求唯一标识、幂等处理或业务状态校验等机制。

第三,异常记录。

接口调用失败时,应该能够记录必要的请求信息、错误原因和处理状态。

记录内容还需要遵守企业的数据安全要求,避免在日志中不必要地保存敏感信息。

第四,数据一致性。

两个系统可能分别保存自己的业务数据。

当接口调用失败、数据校验不通过或后续处理异常时,需要明确如何发现和处理不一致的情况。

这些问题不是 Web Service 特有的,但在同步调用模式下,通常需要结合请求与响应机制进行设计。 Continue reading “《TOGAF学习之路》企业架构实践(三):企业应用集成——从 Web Service 到消息队列”

《TOGAF学习之路》企业架构实践(二):从系统清单到应用关系图

企业架构实践(二):从系统清单到应用关系图

一、知道有哪些系统,还不够

在上一篇文章中,我从日常 IT 管理工作的角度,梳理了企业现有的业务系统、集成服务、公共平台和基础设施。

这项工作让我对企业 IT 环境有了一个初步的整体认识。

但整理完系统清单后,一个问题也随之出现:

如果这些系统之间存在各种联系,我们应该如何把它们的关系表达清楚?

以制造企业为例,ERP、MES 和 WMS 分别承担不同的业务职责。它们可能需要交换业务数据,也可能依赖一些公共服务。如果只把这些系统罗列在一张表格中,就很难看出系统之间的实际联系。

在日常运维中,这些关系可能已经存在于我们的经验里。

例如,MES 与 ERP 之间的数据同步出了问题,我们可能知道应该检查哪些服务;某个应用无法访问文件,我们也可能知道需要检查哪些存储组件。

但是,如果这些信息只存在于个人经验中,就不容易统一理解,也不方便交接、评审和后续规划。

因此,我想尝试把系统清单进一步整理成应用关系图。

这并不是为了画一张看起来复杂的架构图,而是希望通过一种比较直观的方式,说明系统各自承担什么职责、系统之间如何交互,以及一个系统发生变化时,可能会影响哪些其他系统。

二、应用关系图应该表达什么?

应用关系图(Application Relationship Diagram)可以用来展示企业应用及其相互关系。

具体需要表达什么,取决于这张图的用途。

如果用于向管理人员介绍企业 IT 环境,可能只需要展示主要业务系统和它们之间的关系。

如果用于技术评审或故障分析,就需要进一步展示集成服务、消息中间件、接口类型,以及必要的技术依赖。

如果用于规划未来架构,还需要区分现有系统、计划建设的系统,以及希望达到的目标状态。

因此,画图之前,最好先明确目的。

对于当前的学习和实践,我准备先聚焦于两个问题:

  1. 主要应用系统之间有哪些业务交互?
  2. 这些交互是通过什么技术方式实现的?

这两个问题看似简单,但已经可以帮助我们发现不少容易被忽略的细节。

2.1 先区分系统职责

在画图之前,应该先明确各系统的职责。

以目前的环境为例:

系统 主要职责
D365 F&O 支持相应业务环境的 ERP 业务
易飞 ERP 支持原有业务环境的 ERP 业务
MES 支持制造执行管理
WMS 支持仓储管理
ERP Sync Service 处理 ERP 相关集成业务
RabbitMQ 提供消息传递能力
Document Generator 提供文档生成能力
Message Service 提供统一消息发送能力
MinIO 提供对象存储能力

这张表主要用于说明系统职责,而不是完整的技术设计。

例如,D365 F&O 和易飞 ERP 都属于 ERP 系统,但它们服务于不同的业务环境,目前是独立运行的两套系统。

不能仅仅因为它们都属于 ERP,就把它们画成存在直接交互关系的两个系统。

同样,ERP Sync Service 虽然名称中带有 ERP,但它在当前环境中不仅仅是一个可以忽略的辅助程序,而是 D365 F&O 与后续集成环节之间的独立集成组件。

在应用关系图中,应该把它单独表示出来。

系统的名称可以帮助我们理解它的用途,但真正决定架构图如何绘制的,是它在实际业务和技术环境中的职责。

2.2 区分业务关系与技术关系

这是我在梳理应用关系时认为比较重要的一点。

业务关系与技术关系并不是同一回事。

例如,D365 F&O 和 MES 之间存在生产业务数据交互,这是业务层面的关系。

但实际实现过程中,D365 F&O 并不是直接与 RabbitMQ 交互,而是通过 ERP Sync Service 和 RabbitMQ 等组件完成相关集成。

因此,可以分别表达两个层次:

  • 业务层面: D365 F&O 与 MES 之间存在相关业务数据交互。
  • 技术层面: D365 F&O ↔ ERP Sync Service ↔ RabbitMQ ↔ MES。

如果只画第一种关系,就无法体现真实的集成实现。

如果只画第二种关系,却不说明业务目的,读图的人也可能不清楚为什么需要这些组件。

在比较完整的架构文档中,这两个层次可以通过不同的视图表达。

对于初步梳理,也可以先使用一张图展示主要系统和集成链路,再通过文字说明业务背景与技术职责。

三、结合实际环境梳理应用集成关系

了解基本原则后,可以从现有系统中选取几个典型场景,尝试将系统之间的关系表达出来。

3.1 D365 F&O 与 MES:存在中间集成服务的交互链路

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

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

其中:

  • D365 F&O 负责 ERP 侧的相关业务处理。
  • ERP Sync Service 负责 ERP 相关的集成业务。
  • RabbitMQ 为相关系统之间的消息交互提供支持。
  • MES 负责制造执行相关业务。

这里需要特别注意,D365 F&O 并不是直接连接 RabbitMQ。

ERP Sync Service 是独立的集成服务,负责连接 ERP 侧与后续集成环节;RabbitMQ 则承担消息传递方面的职责。

在架构图中,如果把 ERP Sync Service 隐藏起来,只画 D365 F&O 与 RabbitMQ 的连接,就会与实际架构不符。

如果把 RabbitMQ 隐藏起来,只画 ERP Sync Service 与 MES 的连接,也会遗漏真实的消息传递环节。

因此,在需要表达实际技术链路时,这几个组件都应该保留。

为什么要把中间组件单独画出来?

主要有三个原因。

第一,明确系统之间的职责边界。

ERP 业务、集成逻辑、消息传递和制造执行分别由不同组件承担。

把这些组件分开表示,有助于理解各自的职责,也便于后续维护接口文档。

第二,帮助分析问题发生的位置。

假设 MES 没有收到预期的生产业务数据。

这时不能直接判断是 MES 的问题,也不能简单地认定 ERP 接口发生异常。

需要根据实际的数据流向,逐步检查 ERP 侧处理、ERP Sync Service 的处理情况、RabbitMQ 的消息状态,以及 MES 的消费和业务处理过程。

具体应该从哪里开始排查,还要结合数据流向、监控信息和日志来确定。

第三,帮助分析变更影响。

如果 ERP Sync Service 需要升级,或者 RabbitMQ 的部署方式发生变化,就可以提前识别哪些业务流程和应用可能受到影响。

这类信息在系统变更评审时尤其有用。

还需要进一步确认什么?

一张关系图并不能说明所有集成细节。

对于这条链路,还可以逐步补充以下信息:

  • 哪些业务数据从 D365 F&O 流向 MES?
  • 哪些业务数据从 MES 返回 ERP 侧?
  • ERP Sync Service 通过什么接口与 D365 F&O 交互?
  • RabbitMQ 中有哪些消息类型或业务队列?
  • 消息处理失败时,采用什么方式重试或恢复?
  • 如何识别重复消息,以及如何避免重复处理业务数据?

例如,目前的业务交互涉及生产工单下发、生产报工或完工数据回传,以及物料、BOM、库存等相关数据。

不过,不同数据的方向和处理规则可能不同,不能简单地假设所有数据都沿着同一个方向流动。

这些细节适合在接口清单、数据流图或集成设计文档中进一步说明。

第一版应用关系图不必包含所有内容。可以先把主要组件和链路画清楚,再根据需要逐步完善。

3.2 ERP 与 WMS:通过 Web Service 集成

另一个典型场景是 ERP 与 WMS 之间的集成。

与前面 D365 F&O 和 MES 的集成链路不同,目前 ERP 与 WMS 通过 Web Service 进行交互,而不是通过 RabbitMQ。

这说明,即使是同一家企业内部的系统,也不一定采用统一的集成方式。

在应用关系图中,可以用不同的线条或标签区分不同的接口类型。

例如:

  • 使用标注为 Web Service 的连接线,表示 ERP 与 WMS 之间的接口关系。
  • 使用标注为 Message / RabbitMQ 的连接线,表示通过消息中间件实现的交互关系。

这样做的好处是,读图的人不仅能够看到哪些系统存在联系,还能初步了解它们通过什么方式交互。

不过,图中的线条必须与实际情况一致。如果接口协议、调用方向或通信机制尚未确认,就应该标记为待确认,而不是根据经验直接推断。

3.3 公共服务也应该纳入应用关系图

在梳理应用关系时,容易出现一个问题:只关注 ERP、MES、WMS 等业务系统,而忽略公共服务。

但从实际运行情况来看,公共服务同样可能影响多个应用。

例如,业务系统可能调用 Document Generator 生成文件,生成后的文件存储在 MinIO 中;相关业务场景也可能使用 Message Service 发送企业微信或 Email 消息。

这些关系可以根据实际调用情况逐步补充。

需要注意的是,公共服务之间并不一定都存在直接连接关系。

例如,Document Generator 生成文件并将其保存到 MinIO,并不意味着所有使用 Document Generator 的系统都需要直接连接 MinIO。具体调用关系取决于实际设计。

因此,画图时应该尽量遵循一个原则:

只表达已经确认的关系,不根据技术名称或常见用法自行推断系统之间的连接。

如果某项关系还没有确认,可以先记录在待核实清单中。

这样比直接画出一条可能并不存在的连接线更可靠。 Continue reading “《TOGAF学习之路》企业架构实践(二):从系统清单到应用关系图”

《TOGAF学习之路》企业架构实践(一):从日常 IT 工作开始理解企业架构

企业架构实践(一):从企业 IT 系统的建设与管理开始

一、从日常 IT 工作开始

在企业 IT 管理工作中,每天都会接触各种各样的系统。

有负责企业资源管理的 ERP,有管理生产过程的 MES,有支持仓储业务的 WMS,也有 OA、HR 等日常办公系统。为了让这些系统正常运行,还需要数据库、中间件、虚拟化平台、容器平台、监控系统以及各种公共服务。

随着业务发展,系统数量逐渐增加,技术架构也会不断变化。

平时遇到的问题通常比较具体:某个接口为什么调用失败,业务数据为什么没有及时同步,某个服务为什么无法访问,或者一次系统变更会不会影响其他应用。这些问题需要结合具体情况逐一分析和处理。

但在处理这些问题的过程中,也会逐渐发现,很多问题并不完全属于某一个系统。

例如,MES 的数据同步出现异常,原因可能涉及 ERP 接口、集成服务、消息队列或相关业务处理逻辑;文件访问出现问题,除了检查应用本身,还可能需要检查对象存储、网络文件存储以及底层虚拟化环境。

如果只熟悉单个系统,就很难快速了解这些系统之间的联系。

我开始学习 TOGAF Standard 10,也是希望能够在已有的 IT 建设和管理经验之外,进一步学习如何从企业整体的角度看待业务系统、数据、应用和技术基础设施。

当然,日常 IT 管理和企业架构之间还有很大的距离。了解一些架构概念,并不意味着已经具备完整的企业架构能力。

对我来说,一个比较实际的起点,是先把企业现有的 IT 环境梳理清楚,看看目前有哪些系统,它们分别承担什么职责,又是如何联系在一起的。

二、先把现有的 IT 系统梳理清楚

在开始分析企业架构之前,我认为有必要先回答几个基本问题:

  • 企业目前有哪些 IT 系统和技术平台?
  • 每个系统主要解决什么问题?
  • 系统之间通过什么方式交互?
  • 系统运行在哪些基础设施上?
  • 哪些能力由多个系统共同使用?
  • 当前环境中有哪些问题值得进一步分析?

这些问题看起来并不复杂,但实际梳理起来,往往需要结合系统文档、部署信息、接口资料以及日常运维经验。

企业 IT 环境通常不是一次性规划完成的。很多系统是在不同阶段,根据当时的业务需求逐步建设起来的。随着业务变化,一些系统会继续保留,一些系统会被替换,还有一些公共服务会逐渐形成。

因此,第一步不一定是立即设计新的架构,而是先了解现状。

结合目前的实际环境,可以先从以下几个方面整理系统清单。

2.1 业务应用与协同办公

这一类系统直接支持企业的业务活动和日常管理。

系统 主要用途
易飞 ERP 企业原有的资源管理系统
D365 Finance and Operations 新业务环境使用的企业资源管理系统
MES 制造执行管理
WMS 仓储管理
OA 办公自动化与日常协同
HR 人力资源管理
Redmine 项目管理、任务跟踪及相关问题管理

需要说明的是,易飞 ERP 和 D365 Finance and Operations 是两套独立运行的 ERP 系统,服务于不同的业务环境,两者之间没有共享业务接口和数据。

从系统名称来看,它们都属于 ERP,但不能因此认为它们使用相同的数据、遵循相同的业务流程,或者彼此之间存在直接的集成关系。

MES 和 WMS 则分别面向生产执行和仓储作业。在实际业务中,它们需要与相关业务系统配合,才能支持从业务计划到生产执行、仓储作业等不同环节。

OA 和 HR 等系统主要服务于办公协同和人力资源管理。它们与 ERP、MES、WMS 的业务重点不同,但同样是企业 IT 环境的一部分。

这里需要注意一个区别:系统清单记录的是企业有哪些系统,而不是企业的全部业务流程。

知道企业使用 MES,并不意味着已经完整理解生产业务;知道企业使用 WMS,也不代表已经梳理清楚库存管理的全部规则。

系统清单只是进一步分析的基础。

2.2 应用集成与公共服务

除了直接面向用户的业务应用,企业还会建设一些公共服务,用于支持系统集成、文档生成、消息发送、文件存储等工作。

系统或平台 主要用途
ERP Sync Service 处理 ERP 相关的集成业务,连接 ERP 侧与后续集成环节
RabbitMQ 为系统之间的异步消息交互提供支持
Document Generator 提供统一的文档生成能力
Reporting Service 提供报表相关服务
Message Service 提供统一的消息发送能力,支持企业微信和 Email
MinIO 保存业务文件、图片等对象数据

这些服务的作用,是为多个业务场景提供可复用的技术或业务能力。

例如,不同业务系统可能需要生成 PDF、Excel 或 Word 文件。如果每个系统都自行开发文档生成逻辑,就可能出现重复实现、维护成本增加以及输出格式不一致等问题。

通过 Document Generator,可以提交 JSON 数据和模板代码,生成相应的文档。生成后的文件可以存储在 MinIO 等存储平台中。

Message Service 则提供统一的消息发送能力,支持企业微信和 Email 等渠道。

RabbitMQ 用于支持系统之间的异步消息交互。它与直接进行 HTTP 或 Web Service 调用的方式有所不同,具体适用场景取决于业务流程和集成设计。

ERP Sync Service 则承担相关 ERP 集成业务。在 D365 F&O 与 MES 的集成过程中,它不是一个可以忽略的中间环节,而是实际集成链路中的独立组件。

需要注意的是,公共服务并不意味着它们可以脱离其他系统独立存在。它们本身也需要运行环境、存储、网络和相应的运维保障。

当多个业务系统开始依赖同一个公共服务时,这个服务的可用性和变更管理就可能影响多个业务系统。

这也是为什么在梳理系统清单时,不能只记录业务应用,还需要把公共服务纳入其中。

2.3 身份认证与安全管理

身份认证和安全管理为业务系统提供基础支撑。

系统或平台 主要用途
自研 SSO 基于 OpenID Connect(OIDC)协议提供统一身份认证能力
AD Domain 提供域环境及相关目录服务
Jump Server 为受控的运维访问提供统一入口
防病毒软件 提供终端或服务器的恶意软件防护能力

公司建设了自研 SSO,采用 OpenID Connect 协议,为业务系统逐步接入统一身份认证提供基础。

统一身份认证不仅涉及登录页面,还涉及身份验证流程、系统接入方式以及与权限管理相关的设计。

从长期来看,逐步统一业务系统的身份认证方式,有助于减少重复建设,并为统一的身份管理提供基础。

不过,系统清单应该反映真实的现状,而不是只记录期望达到的目标。

目前,D365 Finance and Operations 尚未接入公司自研的 SSO。因此,在梳理身份认证架构时,需要将这一现状明确记录下来,而不能简单地认为所有业务系统都已经实现统一认证。

AD Domain、Jump Server 和防病毒软件承担的职责也有所不同。它们可能不直接参与某个业务流程,却会影响系统访问、安全管理和日常运维。

后续如果要进一步分析安全架构,还需要结合实际的账号管理、权限控制、访问路径和安全策略进行梳理。仅凭系统名称,还不足以判断整个环境的安全水平。

2.4 IT 服务管理与开发交付

企业 IT 不仅需要建设和运行系统,还需要管理服务请求、故障、项目以及软件开发和发布过程。

系统或平台 主要用途
Ticket System IT 服务请求、故障报修及问题处理
Redmine 项目管理、任务跟踪及相关问题管理
GitLab + CI/CD 代码版本管理、自动化构建、测试及部署

Ticket System 和 Redmine 都可能涉及问题记录和跟踪,但两者的实际职责边界,需要根据企业内部的使用方式来确定。

例如,可以由 Ticket System 主要承担 IT 服务请求和故障报修,由 Redmine 主要承担项目管理和开发任务跟踪。如果实际使用中存在职责重叠,就需要进一步明确两者的定位。

GitLab 与 CI/CD 可以放在一起理解。

GitLab 用于代码版本管理和协作开发,CI/CD 用于支持自动化构建、测试及部署。两者共同参与软件开发和交付过程。

从企业架构的角度来看,这些系统不直接承担生产、采购或仓储业务,但它们会影响业务应用的开发效率、版本管理和发布过程。

例如,一次应用升级不仅涉及代码修改,还可能涉及构建、测试、部署和变更管理。因此,开发交付平台也是企业 IT 架构中值得关注的一部分。

2.5 数据分析与低代码平台

随着业务系统积累的数据逐渐增加,企业还需要相应的数据处理、分析和应用开发工具。

系统或平台 主要用途
Dremio 数据访问、查询及数据分析相关能力
Superset 数据可视化与分析报表
Kettle 数据抽取、转换和加载(ETL)
Budibase 低代码应用开发

这些平台可以帮助企业更好地利用已有数据,也可以支持部分数据处理和轻量级应用开发需求。

例如,Dremio 和 Superset 可以用于数据查询、分析和可视化;Kettle 可以用于数据抽取、转换和加载;Budibase 则可以用于构建部分低代码应用。

不过,工具能够连接数据,并不意味着不同系统的数据在业务含义上天然一致。

例如,不同系统中的物料、客户或库存数据,可能存在定义、编码和更新频率方面的差异。如果要进一步建设统一的数据分析体系,还需要明确数据来源、数据口径和数据质量要求。

这些内容属于后续数据架构分析需要考虑的问题。

2.6 基础设施与技术平台

业务应用和公共服务都需要运行环境。

如果只梳理应用系统,而不记录它们依赖的操作系统、虚拟化平台、数据库和中间件,就很难完整了解企业 IT 环境。

因此,基础设施和技术平台也需要纳入系统清单。

2.6.1 服务器与虚拟化基础设施

系统或平台 主要用途
Linux OS 主要服务器操作系统
VMware vSphere 提供服务器虚拟化及虚拟机管理能力
VMware vSAN 提供软件定义存储能力
NFS 提供网络文件存储访问能力

目前,企业服务器环境主要使用 Linux 操作系统。

VMware vSphere 用于虚拟化环境的管理,vSAN 提供软件定义存储能力,NFS 则提供网络文件系统访问能力。

这些技术处于不同的层次,但在实际部署中可能形成依赖关系。

例如,某项应用使用的文件存储服务,可能运行在 Linux 虚拟机上,而虚拟机的虚拟磁盘又依赖底层存储平台。

如果只记录应用连接的存储地址,就无法完整了解其背后的运行环境。

因此,后续还需要逐步把应用部署信息与基础设施信息联系起来。

2.6.2 容器平台、网络入口与运维支撑

系统或平台 主要用途
Kubernetes 容器编排与应用运行管理
Nginx Web 入口、反向代理及流量转发
NTP 提供网络时间同步
Prometheus + Grafana 监控指标采集与可视化
ELK 日志采集、检索与分析
企业级备份与恢复软件 提供数据和系统的备份与恢复能力

部分业务服务部署在 Kubernetes 中,例如 MES 和 ERP Sync Service。

Kubernetes 提供容器化应用的部署、调度和运行管理能力,但它并不能替代底层计算、网络和存储基础设施。

Nginx 可以承担 Web 访问入口、反向代理和流量转发等职责。

Prometheus 和 Grafana 分别承担监控指标采集与可视化展示等工作,ELK 则用于日志采集、检索与分析。这些工具可以从不同角度帮助运维人员了解系统运行情况。

备份与恢复软件同样属于基础设施管理的重要组成部分。

需要特别说明的是,系统正常运行,并不意味着数据已经具备充分的恢复保障。备份范围、保留周期、恢复时间以及恢复验证,都需要结合实际业务要求进行评估。

2.6.3 应用开发与实时通信技术

技术 主要用途
.NET / .NET Core 应用开发与运行平台
ASP.NET Core Web API 构建 HTTP API 服务
Vue 前端应用开发框架
SignalR 实时双向通信及服务端消息推送

在应用开发方面,企业使用 .NET / .NET Core 等技术。

ASP.NET Core Web API 用于构建 HTTP 接口,为前端应用和其他业务系统提供数据访问及业务处理能力。Vue 用于前端开发,SignalR 则用于支持实时通信和服务端消息推送。

这些技术分别承担不同职责。

将它们整理到同一份技术清单中,可以帮助我们了解企业主要采用的应用开发技术。但在后续架构分析中,还需要进一步明确它们分别应用在哪些系统中,以及相关应用之间如何交互。 Continue reading “《TOGAF学习之路》企业架构实践(一):从日常 IT 工作开始理解企业架构”

企业级 AI Agent 架构设计:基于用户身份透传与一次性 Request ID 的安全业务 API 调用

一、背景:让 AI Agent 在企业业务系统中安全运行

随着大语言模型(LLM)和 AI Agent 技术的发展,越来越多的企业开始尝试将 AI 助手集成到现有业务系统中。

在制造业场景下,用户可以直接在 MES、ERP、WMS 等业务系统中,通过自然语言查询生产进度、库存情况、订单状态以及质量数据,而不必频繁切换系统或手动查找报表。

例如,用户登录 MES 系统后,在系统内置的 AI Chat 界面中输入:

查询今天各生产线的生产完成情况,并统计各生产线的完成数量。

AI Agent 接收到用户的问题后,需要理解用户意图,选择合适的 Skill,并调用 MES Business API 获取真实业务数据,最终将结果以自然语言形式返回给用户。

从业务角度看,这只是一次普通的 AI 问答。

但从技术架构角度看,它涉及多个系统之间的身份认证、访问授权、凭据传递以及业务 API 调用。

尤其需要解决以下问题:

  1. 用户已经登录 Business System,Chat System 是否需要用户再次登录?
  2. 如何让 Chat System 确认请求来自哪个用户?
  3. 如何让 AI Agent 调用业务 API 时继续遵循当前用户的权限?
  4. 如何避免将用户的长期 Access Token 直接暴露给 AI Agent?
  5. 如何防止 Skill 重复调用、越权调用以及凭据重放?
  6. 如何建立从用户提问到最终业务 API 调用的完整审计链路?

本文结合 AI Agent Architecture and Business API Invocation Flow V2.0 时序图,介绍一种面向企业业务系统的 AI Agent 集成架构。

Enterprise AI Agent Architecture: Secure Business API Access Through User Identity Propagation and One-Time Request IDs

该架构采用以下设计原则:

用户在 Business System 中完成登录,在 Business System 中发起 AI 对话;Chat System 负责对话管理,AI Backend 负责安全控制和业务代理,OpenClaw 负责 Agent 推理,Skill 负责封装业务能力,Business System 继续执行最终的业务认证与授权。


二、整体架构设计

整个系统包含五个核心组件:

  • SSO:统一身份认证。
  • Business System:企业业务系统。
  • Chat System:AI 对话系统。
  • AI Backend Service:AI 后端及业务 API 代理服务。
  • AI Agent(OpenClaw):负责理解用户意图并调用 Skill。

Skill 作为 AI Agent 与企业业务能力之间的接口层,根据业务域划分为 MES Skill、ERP Skill、WMS Skill 等。

2.1 SSO:统一身份认证

SSO(Single Sign-On,单点登录)负责用户身份认证。

用户通过企业统一身份认证系统登录 Business System。

登录完成后,Business System 根据自身的认证和授权机制,获得访问受保护业务 API 所需的访问凭据。

这里需要区分两个概念:

  • OpenID Connect(OIDC)主要用于身份认证。
  • OAuth 2.0 主要用于授权和访问令牌的管理。

ID Token 用于向客户端提供用户身份相关信息,Access Token 则用于访问相应的受保护资源。

两者的用途不同,不能直接互换。

在本文的架构中,用户的登录入口是 Business System,而不是 Chat System。

Chat System 不需要重新要求用户输入用户名和密码,而是通过 Business System 转发的可信身份凭据或经过验证的身份上下文,识别本次 AI 请求的用户。

2.2 Business System:用户入口与业务授权中心

Business System 是用户实际使用的企业业务系统,例如 MES、ERP 或 WMS。

它承担两个重要职责。

第一,作为用户的登录入口。

用户通过 SSO 登录 Business System,然后在业务系统内部使用集成的 AI Chat 功能。

第二,作为企业业务数据的提供方。

当 AI Agent 需要查询或操作业务数据时,最终仍然需要通过受保护的 Business API 完成调用。

例如:

  • MES:查询生产订单、工单进度和生产报工记录。
  • ERP:查询采购订单、销售订单和库存信息。
  • WMS:查询库存、入库任务和出库任务。
  • QMS:查询质量检验结果和不合格记录。

在这套架构中,Business System 不仅是用户入口,也是业务权限的重要边界。

AI Agent 不能因为接收到了用户的问题,就自动获得访问整个业务系统的权限。

2.3 Chat System:AI 对话入口

Chat System 是集成在 Business System 中的 AI 对话服务。

用户不需要离开原有业务系统,而是直接在当前界面发起自然语言请求。

例如:

查询生产订单 PO-20261024 的当前状态。

Business System 将用户的问题及必要的访问凭据转发给 Chat System。

Chat System 负责:

  • 接收用户的聊天请求。
  • 验证请求的身份和访问权限。
  • 管理对话上下文。
  • 将经过验证的请求转发给 AI Backend。
  • 接收 AI Backend 返回的自然语言结果。
  • 将最终回答返回给 Business System,由其展示给用户。

需要强调的是,Chat System 的身份认证不能仅仅依赖请求中携带了一个 Access Token。

它必须验证凭据的真实性、有效性以及适用范围,并确保请求确实属于已经认证的用户。

如果 Chat System 和 Business System 属于不同的信任域,还应通过明确的服务端认证机制保护系统之间的调用。

2.4 AI Backend Service:安全控制与业务 API 代理

AI Backend 是整个架构的核心控制层。

它连接 Chat System、OpenClaw 和 Business API,负责在 AI 推理与企业业务系统之间建立安全的调用通道。

主要职责包括:

  1. 验证来自 Chat System 的请求。
  2. 识别并绑定当前用户的可信身份。
  3. 创建服务端安全上下文。
  4. 生成一次性 Request ID。
  5. 将用户问题和必要的任务上下文传递给 AI Agent。
  6. 接收 Skill 发起的业务调用请求。
  7. 校验并消费一次性 Request ID。
  8. 恢复与请求关联的用户访问凭据。
  9. 代表用户调用 Business API。
  10. 记录业务调用审计信息。
  11. 将结果返回给 AI Agent 和 Chat System。

其中最重要的设计是:

AI Backend 代替 AI Agent 持有和使用用户的业务访问凭据,Agent 只通过受限的调用凭证请求访问业务能力。

这样可以避免将用户的长期 Access Token 直接暴露给 AI Agent或 Skill。

2.5 AI Agent 与 Skill:负责推理,不负责最终授权

AI Agent负责理解用户的自然语言问题,并根据任务需要选择合适的 Skill。

例如,用户要求查询生产订单状态,AI Agent选择 MES Skill,并生成结构化的业务调用请求。

MES Skill 将业务操作和参数提交给 AI Backend,而不是直接使用用户 Access Token 调用 MES。

因此,各组件的职责可以概括为:

组件 核心职责
Business System 用户入口、用户会话和业务 API
Chat System 对话交互、请求接收与转发
AI Backend 安全上下文、调用凭证、代理访问和审计
AI Agent(OpenClaw) 意图理解、任务规划和 Skill 调度
Skill 业务能力封装和结构化工具调用
Business API 最终业务认证、授权和业务规则执行

三、完整调用流程

Continue reading “企业级 AI Agent 架构设计:基于用户身份透传与一次性 Request ID 的安全业务 API 调用”

Everyday ‘Solution Architectural’ Thinking

As an Architect you can expect, at some point in your career, to be involved in a critical frontline, turbulent project or programme. During such times, you need to rely on technical, political and social skills gained over several years of working in the field of ICT.

Today’s blog (prepared on the London-Coventry train)  is a reminder of some of the “basics” that the average Solution Architect must consider when working on complex projects. These ‘system orientated’ considerations remain at the forefront during project engagement elements , requiring consideration during analysis, design and build stages of system construction / delivery at the same time of maintaining the line of sight for the outcome.

As with most things in life, the list presented is obviously subject to the area you operate in, for example, if you are working on a Manufacturing Execution System (MES) solution then your primary focus for the project would be on the real-time supervisory control and data acquisition systems and processes. However, if you are working on a Retail Banking Application then your focus would be biased towards compliance and reporting.

The list presented is not exhaustive and kept general to provide insight. However If we examine most ICT projects, we often find  a common pattern i.e. one of collecting raw data, transforming this into  information then allowing digital processes to consume and generate reports allowing businesses to execute an event or action that adds value to the Organisation.

This movement is presented in the diagram below, with thought  bubbles representing areas of thought which are further listed in the tables below;

Everyday Solution Architectural Focus Points during a project

Continue reading “Everyday ‘Solution Architectural’ Thinking”

The Solution Architecture Life Cycle

Solution Architects as previously mentioned are responsible for working with programmes and projects to ensure a solution to problems is designed, costed, procured, built and delivered into the organisations which often results in delivering a new process outcome and IT capability.

Solution Architects address a wide spectrum of problems and issues ranging from the simple to the complex and thus require a wide range of skills (technical / business).

The work of the Solution Architect can be broken down into distinct stages and categorised into the following areas:

SolutionArchitectLifeCycle

Solution Architecture Life Cycle

Each layer of the Solution Architect Lifecycle is briefly discussed below. However, it must be noted that the focus at each layer will be aligned to the top layer i.e. the problem/issue.

Identification

Often a problem requires a working group to establish if something is worth considering e.g. bid on a project or to discuss a ‘pattern’ that is emerging in the technology landscape which requires investigation from the reporting systems e.g. Capacity & Performance / Security incidents.

Solution Architects are often engaged at this stage to provide advice on possible options for resolving a problem and to assist in triggering the next phase of the activity.

Defining the context of the problem/issue

No project or programme of work in real terms commences without a Business Case i.e. a document that captures the reasoning for initiating a project or task with basic costings and outcomes documented. If the problem issue is a Technical one then the Solution Architect is required to elaborate (in simplistic terms) the context of the problem from the systems viewpoint.

Capturing the Requirements

During the requirements capture phase the Solution Architect will spend much of his/her time focusing on the system elements of the requirements and trying to understand the system components characteristics.

During this stage, there will be a bias towards the non-functional elements of the system.

During this stage, a Minimum Viable Product can be elicited from stakeholders, i.e. the minimum components and effort that will be required to deliver the functional and non-functional requirements can be sketched to define further costs analysis.

It must be noted that the requirements must also encapsulate any legal compliance issues e.g. GDPR requirement and any Enterprise Architectural directives.

Defining Product Backlog and or Level 0 Systems Architecture

Once the problem is known, documented and decomposed into a set of clearly defined functional and non-functional requirements a level 0 systems architecture can be produced to outline a solution.

Where possible reusable components should be highlighted to shorten time to market and increase savings to the project.

At this stage, the outcome should be a level 0 design and in many cases, result in a product backlog for the solution

The level 0 design will facilitate the project to determine the cost and effort involved to deliver the outcome required.

Designing the Solution and breaking down the deliverables into sprints

At this stage, a detailed analysis of the Level 0 is undertaken and elaborated further to deliver a detailed design document and the subsequent technical sprints to deliver the project.

Depending on the Solution it may be prudent to produce a low-level design to support the Solution Design.

Options for realising the solution and enacting

I have discussed previously the options that are available for analysis from “do nothing” to “Build” but from a cost / do ability view the option should be selected that leverages existing relationships /services and best value for money.

Delivering Solution into production

Developing, procuring  or modifying a system requires deployment into a production environment and thus the Solution Architect must be capable of defining the environments (test, prod, pre-prod) for the route to live. Often this will involve working with the Service Architects to design the Service and the operational elements (often extrapolated from the NFRs) of the system.

If we were to take all the elements above and assign time that the Solution Architect would be involved in the project then we could produce a graph like the one below;

SolArchEffort

In summary, the Solution Architect is an important role and requires skills that evolve with each engagement and has a role to play from problem realisation to delivery into service of a solution.

The article from https://dalbanger.wordpress.com/2017/05/07/the-solution-architecture-life-cycle/