本文介绍当前serverless架构中函数及事件系统应该具备的能力。
让我们介绍一下serverless架构功能。
一、函数功能
函数调用
- 可以使用多种语言,只需要提供一个代码片段即可运行
- 函数之间可以调用
- 函数执行超时时间
- 支持代码中使用第三方依赖
调试
- 本地IDE开发调试
- 在界面上调试,能够快速的部署,收集调试的日志
构建
从源码到服务,自动构建,支持不同语言,第三方依赖
集成
能够方便的调用其他服务(如存储、数据库等)
版本
- 支持多个版本
- 支持蓝绿测试
权限验证
包括外部请求接口的权限以及函数内部调用其他服务的权限
性能
高性能
数据输入输出绑定
输入输出数据源的绑定(比如数据源可以是http、kafka队列)
日志
统一收集调用日志
自动伸缩容
按指标(请求数、cpu)对业务进行快速扩容,扩容过程业务最好无感知,对服务性能无影响。
能缩容到0,减少常驻服务降低成本。
启动时间
冷启动时间尽可能缩短,如果使用k8s,包含k8s启动容器时间 + 业务进程启动时间。解决从0->1和1->n快速扩容的问题。
工作流
能够编排工作流,按步骤调用函数
计费(可选)
只为使用的资源付费,能够采集cpu时间、耗时用于计费
二、事件功能
自定义事件源
根据规范可以自由定制业务自己想要的事件源来触发Event
任务完成提供回调功能
事件触发后等待任务完成,完成后可以回调业务配置的接口
事件编排——工作流引擎
- 提供工作流定制的功能,让用户可以在Event上配置各种事件的依赖关系
- 支持顺序事件、分支事件和并行事件
性能
高吞吐处理事件源
事件权限隔离
业务只能编排自己创建的事件,外部触发事件流时,也只能触发自己创建的事件流
监控功能
可监控各个业务的单个事件、事件链路耗时等指标
操作平台
供用户编排事件,查看事件结点日志等
对外API提供
可提供通用hook供业务使用,用来触发事件链路的根节点
横向扩展能力
具有横向扩展能力来应对持续增长的事件处理
全局唯一事件id
提供唯一事件id,在并行事件中可以等到该id的所有前置步骤完成后,才触发下一步行为;不同id的 前置步骤不会触发其他id的下一步行为
下游扩展能力
事件触发后,除http调用外,还提供如RPC等其他协议来触发下游任务
调试功能
提供单步调试功能,可直接调试事件链路中的任意相连结点组合