知识卡片

无服务器函数的组合函数陷阱与工作流引擎编排方案

普通读书笔记卡

内容

无服务器函数类似无状态编程函数,托管在云基础设施中,接收输入产生输出但必须完全自成一体(调用结束后无法访问当前调用的数据,除非存进外部存储),优点是按调用计费、天然弹性扩缩容。但一堆分散函数带来组织难题:最简单的方案是写一个”组合函数”去依次调用其他函数,这个方案有两个致命缺陷——一是脆弱性,只要所有被调函数都可用且能迅速返回结果才能正常工作,否则可能出现”CRM系统建好用户、账单也开了,但最后一个函数崩溃导致用户永远拿不到SIM卡”这种数据不一致的局面;二是延迟和成本会在函数链条上累积,而无服务器函数是按计算时间收费的,累积的等待时间会直接体现在云账单上。更好的替代是用公有云消息组件搭建函数链,让消息队列保留待处理任务以提高容错,但这样依然缺乏端到端可见性、缺少可调试的观察点,故障排查困难。工作流引擎是解决这个可见性缺口的方案:把每个服务任务绑定一次函数调用(本地直接调用、经API网关的HTTP调用、或消息机制调用),团队部署函数的同时部署对应流程模型即可实现自动化部署。需要注意的是,AWS Step Functions、Azure Durable Functions、GCP Cloud Workflows这类云厂商自带的有状态函数编排能力都没有采用BPMN,表达能力和可视化能力都比本书描述的工作流引擎更受限。

参考来源

- 位置:《流程自动化实战:系统架构和软件开发视角》第4章《万物皆可编排》"4.1.3 无服务器函数"(源文件:_epub-src/EPUB/xhtml/Section0001_0007.xhtml) - 结论依据:原文详述组合函数的脆弱性和累积延迟两个缺陷、消息链方案的容错改进及其可见性局限,以及工作流引擎编排函数的具体绑定方式,并指出主流公有云函数编排工具未采用BPMN的表达能力局限,直接支撑本卡片结论。 - 原始内容:只有当所有函数都可用且能迅速返回结果时,它才能正常工作……这个解决方案会累积延时……你可以使用工作流引擎来编排函数……它们都没有使用BPMN,导致表达能力有限,可视化能力较弱甚至缺失。