云服务器内容精选

  • 组件说明 函数流提供多种类型的组件,用户可以通过拖拽组件、配置组件和连接组件进行可视化编排,实现函数任务流的编排。使用函数流功能,请先了解表1。 表1 组件说明 类型 名称 说明 服务组件 函数 FunctionGraph函数,如何创建函数请参见创建函数。 EG 事件网格服务(EventGrid),EG节点会发布已配置的事件至指定的EG事件通道,如何创建EG资源请参见事件网格相关文档。 流程控制器 回调节点 通过人工干预实现对执行中函数流的条件控制,函数流将阻塞在回调节点,直到用户调用回调接口以继续函数流执行,从而达到人工审批的效果。 子流程 把已创建的“函数流”任务作为“子流程”组合成一个新的函数流任务。 并行分支 用于创建多个并行分支的控制器,以便同时执行多个分支任务,并可根据分支执行结束后控制下一步流程。 开始节点 只能加入触发器,用于标识流程的开始,一个流程只能有一个开始节点。 异常处理 用于控制函数执行失败后的下一步流程。 循环节点 用于对数组中每个元素进行循环处理。每次循环会执行一次循环内部的子流程。 时间等待 用于控制当前流程在指定时间延迟后再调用下一个流程。 服务节点 用于对多个函数构成的复杂操作进行抽象,可以将多个函数操作合并成一个原子节点进行管理。 条件分支 用于根据条件判断是否执行下一分支。 结束节点 用于标识流程的结束。
  • 编排规则 设计的函数流必须是一个有向无环图,从开始节点出发,开始节点后续必须且只能连接一个节点(除了异常处理和结束节点);流程必须在某一个节点结束,结束流程有两种形式: 流程中存在的节点没有任何后继节点,且后续节点非条件分支,并行分支或开始节点。 流程中存在结束节点,且结束节点后续无其他节点。 组件设计规则 表2 触发器和函数和EG 参数 说明 创建函数流时,是否必选 触发器 当前允许流程中配置0-10个触发器。 触发器必须配置在开始节点内。 触发器不允许连接其他任何节点,也不允许被其他节点连接。 否 函数 当前允许流程中配置0-99个函数节点。 当函数连接异常处理节点时,最多可以再连接一个非开始节点和非异常处理节点。 当函数不连接异常处理节点时,只能连接一个非开始节点。 否 EG 当前允许流程中配置0-10个EG节点。 当EG节点连接异常处理节点时,最多可以再连接一个非开始节点和非异常处理节点。 当EG节点不连接异常处理节点时,只能连接一个非开始节点。 否 表3 流程控制器 参数 说明 创建函数流时,是否必选 回调节点 回调节点限制规则参考表2中函数参数,但回调节点不可为服务节点的子节点 否 子流程 该节点选择已创建的函数流任务。 否 并行分支 用于标识节点后面的分支会并行执行。 后继节点允许连接1-20个节点(除了异常处理,开始节点和结束节点),至少连接一个节点。 否 开始节点 用于标识流程开始,每个流程必须有且只能有一个开始节点。 开始节点后面必须接1个节点,后续节点类型不能是结束节点或者异常处理。 必选 异常处理 后面可以接0-10个节点,后继节点不能是开始节点,结束节点和异常处理节点。 否 循环节点 用来对数组中每个元素进行循环处理。每次循环会执行一次循环内部的子流程。 循环节点内部子流程需要满足如下规则: 只能有一个起始节点(没有前驱节点),起始节点只能使用函数,时间等待节点。 循环节点内部只允许编排函数,时间等待,异常处理节点。 否 时间等待 后面可以连接0个或1个节点,节点类型不能是开始节点和异常处理节点。 否 服务节点 服务节点由多个函数节点组成,后续节点可以是结束节点或异常处理节点。 否 条件分支 后面可以连接2-20个后继节点,后继节点类型不能为开始节点,结束节点和异常处理节点。 否 结束节点 后面不能接任何节点。 否
  • 创建定时触发器 登录FunctionGraph控制台,进入“函数流”页面。 在“函数流”流程列表页面,选择需要创建触发器的流程,单击“编辑”,进入编辑页面。 单击“开始”节点,在右侧弹出的属性页面添加触发器,触发器类型选择“定时触发器”。 填写触发器配置信息。如表1所示,带*参数为必填项。 表1 定时触发器配置信息 配置项 说明 *触发规则 定时触发器的触发规则,当前只支持Cron表达式 *Cron表达式 用于表示任务调度的表达式,能够表示特定周期进行的特定的时间、日期等。具体请参见函数定时触发器Cron表达式规则。 附加信息 附加信息为json格式,输入必须包含input,在input内输入需要的json体。input的内容会作为流程的输入参数。 单击“创建”,完成定时触发器创建。
  • 创建EG触发器 返回函数工作流控制台,进入“函数流”页面。 在“函数流”流程列表页面,选择需要创建触发器的流程,单击“编辑”,进入编辑页面。 单击“开始”节点,在右侧弹出的属性页面添加触发器,触发器类型选择“EG触发器”。 创建成功后“workflow_test”事件通道接收到来自事件源“workflow_test_1”的事件时,会触发此函数流执行。 填写触发器配置信息。如表4所示,带*参数为必填项。 表4 定时触发器配置信息 配置项 说明 *提供方 EG事件源提供方,支持华为云服务事件源和自定义事件源。 *事件通道 事件通道负责接收来自事件源的事件来出发函数流执行。 *事件源 事件源是事件的来源,负责将华为云服务、自定义应用等应用程序生产的事件发布到事件网格。 事件类型 可以指定事件类型进行过滤,满足事件类型才会触发函数流执行。 单击“创建”,完成定时触发器创建。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Workflow-Run-Id 是 String workflow run id X-Workflow-State-Id 是 String workflow state id 表3 请求Body参数 参数 是否必选 参数类型 描述 result 是 String 执行结果 最小长度:1 最大长度:64 枚举值: success fail error 否 String 错误信息 最小长度:1 最大长度:64 output 是 Object 工作流的执行结果,JSON格式,仅在status为success时有值
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 execution_id String 错误码 最小长度:1 最大长度:64 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 最小长度:1 最大长度:36 error_msg String 错误描述 最小长度:2 最大长度:512 状态码: 404 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 最小长度:1 最大长度:36 error_msg String 错误描述 最小长度:2 最大长度:512 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 最小长度:1 最大长度:36 error_msg String 错误描述 最小长度:2 最大长度:512
  • 操作步骤 创建一个图片压缩的函数,其中代码在处理返回数据通过 ctx.Write() 函数将结果以流式数据的形式返回: 目前只支持go函数! FunctionGraph 通过 ctx.Write() 函数提供了流式返回的能力,对开发者来说,只需要将最终结果通过流的方式返回,而不需要关注网络传输的细节。 在 FunctionGraph 的函数流控制台完成工作流编排,举例如下。 调用工作流的同步执行接口,获取最终结果的文件流,数据将以 chunked 流式返回的方式返回到客户端。
  • 背景与价值 Serverless Workflow由于自身可编排、有状态、持久化、可视化监控、异常处理、云服务集成等特性,适用于很多应用场景,比如: 复杂度高需要抽象的业务(订单管理,CRM 等) 业务需要自动中断 / 恢复能力,如多个任务之间需要人工干预的场景(人工审批,部署流水线等) 业务需要手动中断 / 恢复(数据备份 / 恢复等) 需要详细监控任务执行状态的场景 流式处理(日志分析,图片 / 视频处理等) 当前大部分 Serverless Workflow 平台更多关注控制流程的编排,忽视了工作流中数据流的编排和高效传输,上述场景创建函数流触发器中,由于数据流相对简单,所以各大平台支持都比较好,但是对于文件转码等存在超大数据流的场景,当前各大平台没有给出很好的解决方案。华为云FunctionGraph函数工作流针对该场景,提出了 Serverless Streaming 的流式处理方案,支持毫秒级响应文件处理。
  • 技术原理 华为云FunctionGraph函数工作流提出 Serverless Streaming 的流式可编排的文件处理解决方案,步骤与步骤之间通过数据流驱动,更易于用户理解。本章通过图片处理的例子解释该方案的实现机制。 如果需要驱动一个工作流执行,工作流系统需要处理两个部分: 控制流:控制工作流的步骤间流转,以及步骤对应的 Serverless 函数的执行。确保步骤与步骤之间有序执行。 数据流:控制整个工作流的数据流转,通常来说上一个步骤的输出是下一个步骤的输入,比如上述图片处理工作流中,图片压缩的结果是打水印步骤的输入数据。 在普通的服务编排中,由于需要精准控制各个服务的执行顺序,所以控制流是工作流的核心部分。然而在文件处理等流式处理场景中,对控制流的要求并不高,以上述图片处理场景举例,可以对大图片进行分块处理,图片压缩和加水印的任务不需要严格的先后顺序,图片压缩处理完一个分块可以直接流转到下一个步骤,而不需要等待图片压缩把所有分块处理完再开始加水印的任务。 基于上述理解,华为云FunctionGraph工作流的 Serverless Streaming 方案架构设计如下图所示: 在 Serverless Streaming 的流程中,弱化控制流中步骤之间的先后执行顺序,允许异步同时执行,步骤与步骤之间的交互通过数据流驱动。其中数据流的控制通过 Stream Bridge 组件来实现。同时函数 SDK 增加流式数据返回接口,用户不需要将整个文件内容返回,而是通过 gRPC Stream 的方式将数据写入到 Stream Bridge,Stream Bridge 用来分发数据流到下一个步骤的函数 Pod 中。
  • 请求示例 删除函数流。 DELETE /v2/{project_id}/fgs/workflows{ "workflow_urns" : [ "urn:fss:{region}:73d69ae0cfcf460190522d060f05ad:workflow:default:testflow1:latest", "urn:fss:{region}:73d69ae0cfcf460190522d060f05ad:workflow:default:testflow2:latest" ]}
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 success Array of strings 成功流程URN列表 fail Array of OperateErrorInfo objects 错误流程详情 表4 OperateErrorInfo 参数 参数类型 描述 workflow_urn String 唯一标识ID,流程URN 最小长度:1 最大长度:128 error_detail String 错误详情 最小长度:1 最大长度:64 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 最小长度:1 最大长度:36 error_msg String 错误描述 最小长度:2 最大长度:512 request_id String 请求ID 最小长度:2 最大长度:512 状态码: 500 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 最小长度:1 最大长度:36 error_msg String 错误描述 最小长度:2 最大长度:512 request_id String 请求ID 最小长度:2 最大长度:512