在郑州一家制造业客户的项目现场,我第一次意识到业务自动化的空窗到底有多耗人。生产线数据零散、规则繁多、人工判定频繁,短期内靠加人只能治标。我们决定用软件工程把各类决策链路打通:事件采集->特征计算->规则/模型决策->执行反馈,这听起来常规,落地时却充满细节,哪一步延迟都会放大问题。
技术选型上,我倾向于用Kafka做事件总线,PostgreSQL做交易库,Redis做实时缓存,Flux式消费用Flink或Kafka Streams做在线特征计算。为什么这样组合?因为Kafka提供明确的回溯窗口,Debezium做CDC可以把业务变化变成流事件,避免二次批处理。实践中,CDC延迟和事务边界调试最费时间,Schema Registry和严格的契约(Protobuf)能少犯很多错。
推理与执行层,我们把“模型”与规则分离:时间敏感的判定用轻量规则引擎(Drools/简单DSL),复杂评分用经过量化的模型在Triton/ONNX Runtime上运行。遇到延迟高,我的第一反应不是换GPU,而是做动态批处理、异步gRPC、以及模型warmup;若延迟依旧,才考虑INT8量化或用TensorRT做内核级加速。经验告诉我:工程上的优化往往比更换模型更经济。
工作流编排上,我们把长期任务放在Airflow,短平快和有状态重试的放在Temporal。为什么分离?Airflow适合可视化批次,Temporal在处理重试、补偿和长事务时更可靠。实践中,复杂补偿逻辑的可靠实现离不开幂等设计和幂等Key的规范,写一次正确的幂等判定,后续运维省心很多。
观测与排查是项目成败关键。我在系统中植入OpenTelemetry追踪、Prometheus指标和Grafana告警,同时把错误样本流入Elasticsearch做搜索。一次CPU飙升,最初怀疑模型,然后通过分布式追踪发现是序列化阻塞导致的。结论是:优化序列化协议(从JSON换成Protobuf)比改算力更快、更低成本。
数据治理不可忽视。我们用Feast做特征存储,MLflow记录模型版本,DVC管理训练数据。面对数据漂移,我会定期跑KS检验和隐变量监测,把异常样本自动打标签回流训练。不要小看一个稳定、可回溯的特征管线,它对业务自动化的持续可靠性影响远超过偶尔提升的准确率。
部署与运维层面,容器化、Kubernetes、Helm、GitOps(ArgoCD)是我的标配。一次在郑州本地机房的容灾演练中,我们发现负载均衡器的会话黏性导致推理节点过载。教训是:自动化系统要从失败模式出发做演练,且保持配置和基础镜像的可回滚性。
最后,谈个比较务实的建议:不要把所有业务都一次性“智能化”。先把低成本、高频次、可监测的环节自动化,把可观测性和幂等性做牢。对于郑州这种产业集中的城市,落地速度和工程可维护性更重要。未来可考虑更细粒度的边缘推理和模型蒸馏,但这该是第二步,而非一开始的全部赌注。
咨询在线QQ客服