2. CAE自动化平台需求分析与架构设计

CAE自动化平台不是把几个脚本拼在一起,而是把仿真业务中反复出现、依赖人工经验、容易出错的环节,转化为可复用、可编排、可观测的软件能力。需求分析的第一步不是写功能清单,而是回到仿真业务现场,识别真正的痛点。常见的痛点包括:前处理几何清理与网格划分重复劳动多;材料、边界条件、求解器参数散落在个人文档中;多方案对比依赖手工改参数、手工提交、手工收集结果;求解失败后缺少统一日志与重试机制;结果后处理与报告生成占用大量工程师时间。这些痛点可以归纳为三类:重复性劳动、知识资产流失、过程不可追溯。

从痛点提炼需求时,建议采用“业务场景—输入—处理—输出—验收指标”的方式逐条拆解。例如“多方案参数扫描”场景:输入是基础模型、参数表(如厚度 1.2/1.5/1.8 mm、材料牌号 A/B)、求解器配置;处理是按参数组合生成算例、提交计算、监控状态、收集结果;输出是各方案的最大应力、质量、一阶频率对比表;验收指标是 20 个算例在 2 小时内完成且失败可定位。这样得到的需求才是可设计、可测试的。

需求分为功能性与非功能性两类。功能性需求描述平台“做什么”,例如模型版本管理、参数模板、任务编排、求解器适配、结果提取、报告生成、权限控制。非功能性需求描述平台“做得怎么样”,包括性能(并发任务数、单任务调度延迟)、可靠性(失败重试、断点续算)、可扩展性(新增求解器或后处理器的接入成本)、可维护性(模块边界清晰、日志与指标完备)、安全性(模型与数据隔离、操作审计)。非功能性需求往往决定架构成败,必须在设计初期量化。例如:支持不少于 50 个并发求解任务;新增一类求解器适配的开发工作量不超过 5 人日;任务状态查询响应时间小于 500 ms。

需求提炼检查要点:每条需求是否对应真实业务场景;是否给出可验证的验收指标;是否区分必须、应该、可选;是否明确输入输出与异常处理;是否标注与现有工具链的接口关系。

接下来是架构选型。单体架构把所有功能放在一个进程中,部署简单、事务一致、初期开发快,适合团队规模小、业务边界尚未稳定的阶段。但 CAE 自动化平台天然具有异构性:不同求解器、不同操作系统、不同资源池、不同后处理工具,且计算任务具有长时、突发、易失败的特点。微服务架构按业务能力拆分服务,例如模型服务、任务编排服务、求解器适配服务、结果服务、报告服务、用户与权限服务,各服务独立部署、独立扩缩容、独立技术栈。代价是分布式复杂度上升:服务发现、配置中心、链路追踪、数据一致性、接口版本管理都需要额外投入。

实际工程中不必二选一。推荐采用“模块化单体起步、按压力点拆分”的演进策略:初期以清晰模块边界构建单体,把求解器适配、任务调度等易变部分设计为可替换组件;当并发任务量、团队规模或部署隔离需求达到阈值时,再把任务编排与求解器适配拆为独立服务。判断是否拆分的依据包括:是否需要独立扩缩容、是否有不同的发布节奏、是否由不同团队维护、是否对故障隔离有硬性要求。

CAE自动化平台分层架构与需求映射 业务痛点层 重复建模与网格 参数散落难复用 多方案手工对比 失败难定位重试 报告生成耗时长 需求层 功能性:模板/编排/适配/结果/报告 做什么 非功能性:性能/可靠/扩展/安全 做得怎么样 验收指标:并发50 / 接入≤5人日 可量化、可测试 架构层(模块化单体 → 按压力点拆分微服务) 接入与权限 用户/项目/审计 模型与参数 版本/模板/参数表 任务编排 调度/重试/状态 求解器适配 Abaqus/Ansys/自研 结果与报告 提取/对比/导出 统一接口契约:REST/gRPC + 消息队列 + 对象存储 任务描述 JSON、状态事件、结果文件路径、错误码规范 基础设施层 计算资源池 容器/调度平台 日志/指标/追踪 存储与备份 安全审计 演进判断 独立扩缩容?发布节奏不同? 故障隔离要求?团队边界?

模块划分与接口定义是架构设计的核心。模块划分应遵循“高内聚、低耦合”和“按变化频率分离”的原则。变化频繁的求解器适配、后处理脚本应独立成模块;相对稳定的用户权限、项目元数据可集中管理。接口定义要明确输入输出、错误码、超时与重试语义。以任务提交接口为例,输入包含模型版本 ID、参数集合、求解器类型、资源需求;输出包含任务 ID 与初始状态;错误码区分参数非法、资源不足、求解器不可用、内部错误。接口一旦发布,应保持向后兼容,新增字段可选,废弃字段需有过渡期。

可扩展性设计的关键是“插件化”与“契约稳定”。求解器适配层定义统一接口,例如 prepare()、submit()、poll()、collect(),新增求解器只需实现该接口并注册,不修改编排核心。后处理同样以插件形式接入,结果提取器按输出类型注册。可维护性设计则依赖清晰的日志分级、统一的错误码、可追踪的任务链路、自动化测试与配置外置。建议为每个模块定义健康检查与关键指标,例如任务队列长度、平均等待时间、求解器调用成功率、结果提取失败率。

接口定义示例(任务描述 JSON):

{
  "taskId": "T-20240513-0017",
  "modelVersion": "bracket-v3.2",
  "solver": "abaqus",
  "parameters": {
    "thickness_mm": 1.5,
    "material": "AL-6061"
  },
  "resources": { "cpu": 8, "memory_gb": 32 },
  "retry": { "maxAttempts": 2, "backoffSeconds": 60 }
}

最后,架构设计要落到可执行的决策上。建议输出一份架构决策记录,至少包含:决策背景、可选方案、选择理由、影响范围、验证方式。例如“任务编排采用消息队列而非直接 RPC 调用”,理由是解耦提交与执行、支持削峰填谷、便于失败重试;影响是引入最终一致性,需要状态机与补偿逻辑;验证方式是压测 50 并发任务下的排队与完成时间。通过这样的方式,需求、架构与验收形成闭环,平台才能在后续迭代中保持稳定与可演进。