腾讯云应用与服务编排工作流ASW(ApplicationServiceWorkflow)是新一代计算架构体系下的服务编排解决方案,用来协调分布式任务执行的编排产品。在应用与服务编排工作流中设定好任务执行步骤,可以将多个腾讯云服务按步骤进行调度,完成各种业务应用场景。能简化开发和运行业务流程所需要的任务协调、状态管理以及错误处理等繁琐工作,更简单、更高效的构建应用。像胶水一样粘合云上各种产品和服务,提供面向用户场景的端到端解决方案。
Serverless在开发便捷性、高性能、弹性扩缩容、部署便捷性、成本等方面具有天然的优势。用户从以前需要购买计算实例,部署应用程序代码的使用模式,逐渐转变为基于函数做面向最终业务的开发。腾讯云Serverless函数计算产品-云函数(ServerlessCloudFunction,SCF),非常方便的提供面向单次请求或事物的处理能力;而云函数自身的运行、扩缩绒、部署等,均有Serverless服务提供商解决,对用于层面透明。随着Serverless架构应用的越来越多,越来越广,很多用户也逐渐将越来越多的业务以Serverless的方式进行部署。
此时,多个云函数和其他云服务之间的编排组合便成为了新的技术挑战。为了解决众多原子服务的串联和编排需求,ASW应运而生。
举例来说,开发者想要实现一个视频字幕OCR的功能,在没有ASW的情况下,需要手工将视频帧采集、视频图像截取、图像保存、OCR接口调用、结果保存等处理节点进行组合串联。这可能涉及到一系列的运维、扩容、监控、失败处理等逻辑的开发和组件对接,而使用ASW工作流,用户不需要考虑,只需要按照最终场景,使用TCSL语言编写工作流即可快速完成业务上线。
工作流提供TCSL语言(TencentCloudStatesLanguage),一种基于Json的结构化语言,用来描述和定义工作流中的业务逻辑。该语言灵活方便,可写出可读性强、易于维护的状态机定义代码。语言兼容亚马逊StepFunctions的ASL语法。提供任务节点(Task)、传递节点(Pass)、选择节点(Choice)、并行节点(Parallel)、循环节点(Map)。
在设计并实现这样一个极为灵活的工作流系统时,需要考虑的问题很多;本部分将从数据量、可观测性、架构弹性等角度分析。
1.工作流ASW产品是一个数据密集型产品。
用户串联的所有微服务,数据均需要经过ASW进行转发或传递。同时有大批量数据在ASW内部进行流转。此时,CPU的负载并不是最高的,内存、网络等涉及大量数据IO的硬件,会首先是性能瓶颈。这也要求ASW产品在设计时,需要慎重的选择数据库中间件、存储中间件等。
按照设计要求,每天100亿次执行,对应着会产生100亿次执行记录数据;会产生远超100亿的执行历史记录数据。这些数据特点为写入数量远大于查询数量、顺序写入、需要做过期逻辑。
2.工作流产品需要提供足够的可观测性
工作流ASW是面向用户最终场景的解决方案,每一个工作流,都是用户的一个业务,工作流的抖动或不可用,会导致用户业务直接受损。因此,提供必要的可观测性是十分必须的。需要提供每秒启动执行次数、执行成功次数、执行失败次数、执行耗时等指标。这些数据,需要从ASW的执行代码中进行上报。虽然埋点并不困难,但是应对如此巨大的数据量,也同样是个不小的挑战。
最后,考虑到随时可能到来的流量洪峰,需要系统整体有足够的弹性来应对。工作流产品,部署在公有云上,会有不可预期的流量洪峰到来,因此要求整体技术架构有足够好的横向拓展能力,以应对流量挑战。
ASW整体架构包含如下部分:前端+SDK、权限服务、调度服务、模板服务、执行器以及为了支撑整体运行的外部底座设施和中间件。
各个模块各司其职,相互配合,在性能、可拓展性、成本间取得了很好的平衡。下面来分别简要介绍每一个模块的核心作用。
主要功能包含两部分:
权限服务的第二个核心功能就是换票和票据缓存、过期、更新等逻辑。其中执行器调用权限服务的请求量,可达每天数十亿次。
用于和控制台、SDK进行交互,对模板数据进行增删改查管理。用户的创建、编辑状态机的请求,均由模板服务提供支持。该模块因为主要和用户侧交互,并发量并不会特别大。
用户通过控制台或SDK,发起执行(调用StartExecution)接口时,经过腾讯云API转发后,流量会到达调度器,由调度器进行入参校验、TCSL代码获取、负载均衡、生成ExecutionQRN、写入执行数据等操作后,将请求发送给负载均衡模块选择出的某个执行器来实际运行一个状态机。因用户的核心逻辑均依赖启动执行功能,因此要求有足够的性能和弹性。其他功能还涉及到停止执行、获取执行状态、获取执行列表、执行器心跳检查等。
目前的架构可在大流量背景下,提供稳定、可观测、弹性的服务,但在如下几个方面依旧可以进一步优化。包括但不限于:资源隔离、私有化、成本降低等。