返回首页

拆解PLM系统架构:为什么我们要用C++做引擎?

AiFLY团队 约 2500 字
技术架构 微服务 性能优化

先回答一个问题:为什么不用一套技术栈搞定?

很多团队做系统,选一个主流框架,前端后端全用同一种语言、同一套技术。省事,维护方便。

我们也考虑过。但仔细想了一个问题:一个做BOM计算的高性能需求,和一个做表单录入的普通需求,用同一套技术,合适吗?

不合适。就像你不能用跑车拉货,也不能用卡车飙车。

所以我们选择了"混合技术栈":该快的地方用C++,该灵活的地方用Python,该好用的地方用Vue。

今天把这套架构拆开了讲,不吹不黑,说说每个选择的背后逻辑。

一、微服务:为什么拆开,比合在一起好

我们系统有11个核心服务,按业务领域独立部署:

单体架构的问题,每个团队都踩过:改一个模块,全系统得重测;一个Bug,整个服务挂掉。微服务解决的就是这四个痛点:

问题 单体架构表现 微服务表现
发布 全系统一起发,周级 独立发布,小时级
扩展 整体扩容,浪费资源 只扩瓶颈服务
故障 一个Bug拖垮全局 单服务故障不影响其他
技术选型 全系统统一语言 每个服务选最合适的技术

二、C++引擎:为什么不用纯Python?

这是今天最核心的问题。Python开发快、生态好,为什么还要搞C++?

因为有些活,Python干不动。

BOM计算的痛点

一个复杂产品的BOM可能有几千个零部件,多层嵌套。计算总价、检查冲突、找相似结构,涉及大量递归遍历和数值计算。

Python的GIL(全局解释器锁)让多线程变成"伪并行",大数据量的计算场景下,性能差距被成倍放大。

📊 实测对比

BOM结构计算:Python 2秒 → C++ 100毫秒20倍提升

相似BOM检测:Python 5秒 → C++ 200毫秒25倍提升

AI推理(分类):500毫秒 → C++ 50毫秒10倍提升

批量数据处理:Python 10分钟 → C++ 30秒20倍提升

这不是"快一点"的区别,是"能不能用"的区别。用户等100毫秒没感觉,等2秒就会觉得系统卡。

AI推理引擎

我们的AI引擎也是C++写的,底层用ONNX Runtime做推理。原因很简单:

三、服务间怎么通信?

11个服务各跑各的,它们之间怎么说话?我们用了四种方式:

通信方式 用在哪 延迟
gRPC 服务间高频调用(核心通道) <10ms
REST API 外部API调用、前端对接 <50ms
消息队列 异步任务(通知推送、报表生成) 秒级
WebSocket 实时通知、在线协作 实时

为什么选gRPC当主通道?三个理由:

  1. Protobuf序列化比JSON快5-10倍——同样的数据,体积更小
  2. HTTP/2多路复用——一个连接并发多条请求,不用建立新连接
  3. 强类型契约——编译期就能发现接口不一致的问题,不用等到运行时才报错

四、AI能力架构:12项AI怎么跑起来的

这不是"接个OpenAI API"那么简单。我们的AI全部是自有模型,部署在系统内部。

AI功能 技术方案 响应时间
产品分类推荐 BERT-base 文本分类 <100ms
BOM结构优化 图神经网络 GNN <500ms
相似BOM检测 向量相似度搜索 <200ms
工艺路线推荐 Transformer 序列推荐 <300ms
文档智能标签 BERT 多标签分类 <200ms
变更风险预测 XGBoost 风险评估 <100ms
语义搜索 Sentence-BERT 向量检索 <300ms

架构分层很简单:Python服务层做业务逻辑和API暴露,gRPC调C++推理层做高性能计算,模型文件统一管理支持热更新。

五、数据库:为什么一个PostgreSQL就够

很多系统为了AI能力专门引入向量数据库(Milvus、Weaviate),再维护一套基础设施。

我们选了另一条路:PostgreSQL + pgvector扩展

一个数据库,同时搞定:

少维护一套数据库,运维成本直接降一大截。这就是"合适就好"的思路。

六、部署:K3s还是K8s?

K8s是行业标准,但我们选了K3s。为什么?

📊 实际运行数据

可用性:目标99.9%,实际 99.95%

平均故障恢复时间:<2分钟

最长故障恢复时间:<5分钟

七、全套技术选型一览

层级 技术 一句话理由
前端Vue 3 + TypeScript类型安全,开发效率高
网关Traefik/NginxK3s原生,配置简单
后端Python 3.11 + FastAPI异步性能好,开发快
通信gRPC + REST内部高效,外部兼容
引擎C++17/20高性能计算不妥协
数据库PostgreSQL 16 + pgvector关系+向量一体化
缓存Redis成熟稳定
部署K3s + Docker轻量高效

八、我们还知道自己不够好

这套架构有三个已知的局限,也是下一步要解决的问题:

  1. AI推理集中:所有AI请求走同一个AI服务,高并发时可能成为瓶颈。方向:客户端做轻量推理,减轻服务端压力。
  2. 向量维度固定:512/768/256维定死了,换模型要改结构。方向:引入专用向量数据库。
  3. C++维护门槛高:需要C++工程师,招人难。方向:评估WebAssembly方案,降低技术门槛。

架构不是一次成型就完美的,是不断迭代的。敢把自己的短板亮出来,才是真诚的技术分享。

最后

这套架构的核心思路就四个字:合适就好

不用最贵的,不用最火的,用最合适的。每个技术栈都有自己的"为什么是它"。

如果你对这套架构有想法,或者想讨论你们的技术选型,欢迎来找我们聊聊。架构没有标准答案,但有最优解——对你们团队来说的那个。

© 2026 AiFLY Team. All rights reserved.
系统地址: https://plm.aifly.ren
关注动态: https://aifly.ren