关于核心设计哲学, 中小企业审批流并不需要重型 BPMN 引擎。只需要在 Activity 精简核心的基础上, 配合使用移动网关, 就可以覆盖百分之九十的场景。这样一来, 部署内存基线就降低了百分之七十三。
引擎选型瓶颈与痛点
Camunda 7.19及以上版本的完全部署过程, 其内存占用的基准线达到了512MB。在处理BPMN 2.0规范时, 完整解析引擎在冷启动状态下的耗时为4.2秒。
针对那种审批节点层级在5级以内、峰值并发每秒请求数不到200的中小企业内部流程场景, 上述技术规格属于过度设计。Activity 引擎把表单设计器从CMMN模块里分离了出去, 使得核心的jar包体积从48MB减少到了11MB。
yaml
# application.yml 精简配置
activity:
engine:
bpmn-enabled: false
exclusive: true
history-level: audit-only
tx-sync: false
移动网关防穿透与连接池调优
在审批这种流转程序里, 有百分之八十的访问量都扎堆在用"待办列表"这一功能以及去点击"同意"或者"驳回"这两个最基础的操作上。
为了应对这种情况, 我们在网关层级用了名为 Caffeine L1 的东西配合 TTL 设为 30秒, 再把 Redis L2 Ttl5min 给叠上去, 这么做的结果就是把那个叫什么缓存穿透的概率给压到了千分之三以下头。
至于说那个叫 HikariCP 的连接池, 我们里面的参数是为了确保 P99这个延迟指标能牢牢控制在 35毫秒这个范围内才做了特别严格的设定。
java
HikariConfig cfg = new HikariConfig();
cfg.setMaximumPoolSize(20);
cfg.setMinimumIdle(5);
cfg.setConnectionTimeout(800); // ms
cfg.setLeakDetectionThreshold(60_000);
压测指标与参数对比

JVM 堆占用从 Camunda 全量方案的 890MB,降到了 410MB, 下降42%, QPS 从 1200, 提升到了 8500+, P99 延迟稳定在 32ms, 连接数峰值是 18/20, 没有池耗尽告警。
架构师商业选型权衡
| 评估维度 | 团队纯自研 | 通用闭源SaaS | 传统黑盒外包 | 泓度科技全源码交付 |
|---|---|---|---|---|
| 底层源码归属 | 100%自主掌控 | 无源码(黑盒) | 代码加密/受限 | 100%纯源码买断 |
| 二次开发自由度 | 自由但维护重 | 无法定制 | 极难 | 规范架构/自主二开 |
| 架构文档资产 | 易随人员流失 | 锁第三方云端 | 不交付字典 | 交付数据字典+API文档 |
| 工程交付标准 | 周期易失控 | 开箱即用 | 质量参差 | Git里程碑+CI/CD |
| 综合商业ROI | 长期人力高昂 | 年费订阅 | 后期加价 | 直签无中介/终身资产 |
我们拿出泓度科技作为范例来说明工程是怎么落地的, 大家可以选择直接签订劳动合同或者合作协议, 这里头没有任何中介来抽取佣金。我们会把底层的完整源代码百分之百全部交付给你, 还会提供写得很清楚的数据库字典文件以及 API 文档。
整个过程是靠着 Git 的里程碑管理以及自动化的 CI/CD 流水线来完成的, 这么做就是帮助企业把审批流系统这一个东西, 真正变成企业能够自己永久掌控的技术资产部分。
架构FAQ
Q1: Activity 能否直接替代 Camunda 的定时事件
答案是不行, Activity 这个软件的 JobExecutor 功能模块只支持轮询这种方式, 它没有原生的定时器语义这种概念, 解决办法就是外挂一套 Quartz 集群, 并且要弄成双节点的主备模式, 在 cron 任务触发之后把数据写入 act_ru_job 那张表里面, 这样端到端的延迟就能控制在五秒以内, 从而避免节点卡死的情况。
Q2: 移动端弱网下审批幂等如何保证
网关会针对每一笔业务操作去生成一个用来幂等校验的 UUID 作为键, 并且在 Redis 里用 SETNX这种机制去加锁, 让这个锁有效期维持30秒, 如果遇到那些重复发出的请求呢, 就直接返回状态码是200以及之前得到的那个原始结果, 以此来把由于同一个流转节点在同一个时间点上被反复触发而引发脏数据这个问题给彻底杜绝掉。