接上篇:
https://developer.aliyun.com/article/1224201?spm=a2c6h.13148508.setting.14.4f394f0em1x0Jq
三、 云函数是怎样工作的
接下来,讲一下EMAS Serverless云函数的工作原理。
如上图所示,左侧是用户操作部分。开发人员编写业务代码,把业务代码打包上传到EMAS Serverless的控制台并点击部署按钮即可。
小程序用户可以通过三种方式运行云函数:
1. 通过集成EMAS Serverless SDK调用云函数。它是一种同步调用,会把云函数的运行结果返回给用户。这是最常用的集成方式,用在小程序中和后端处理业务数据。
2. 用户也可以通过配置http触发功能,通过http请求调用云函数。
3. 开发者可以通过配置定任务时触发运行云函数。
当云函数运行之后会产生一个日志方便用户调试。通过日志系统,开发者可以在控制台查看日志确认函数是否运行成功。
当EMAS Serverless收到一个运行请求要运行云函数。
首先,系统进入系统冷启动阶段。冷启动主要包括后端调度一个实例容器,下载代码并解压以及启动实例。
然后,当实例完成冷启动后,实例进入到运行阶段。首先会运行一个初始化函数。然后开始执index函数。当函数运行完成后进入实例释放时间。
如上图所示,假设在t3之前,EMAS Serverless收到了第二个请求,EMAS Serverless会直接跳到执行函数阶段。
当第二个请求执行完成,EMAS Serverless会重新计算实例释放时间,当没有新的请求进入后,这个实例会被回收。
此时,如果EMAS Serverless收到了第三个请求,由于实例已经回收EMAS Serverless会重新进入系统冷启动阶段。
接下来,我们实战运行一个云函数。
首先,选中一个项目空间进入云函数控制台并新建一个云函数TwoNumberSum。
在本地电脑上新建文件index.js,并输入以下代码:
module.exports = async ctx => {
const x = ctx.args.x
const y = ctx.args.y
const sum = x + y
ctx.logger.info('first num: %d', x)
ctx.logger.info('second num: %d', y)
return sum
};
将该文件打包成zip文件。
进入函数开发页面,上传更新js包上传代码包,然后点击代码部署。
代码部署成功之后,在EMAS Serverless控制台,输入参数{"x": 1, "y": 2}运行云函数。
点击日志页面,即可查询函数的运行日志。
接下来,看看怎样在小程序里使用云函数。
打开支付宝的小程序开发工具。关键代码为serverless.function.invoke('twoNumberSum', {num1, num2})。即可完成云函数调用。invoke接收两个参数,分别是函数名字和函数入参对象。
接下篇:
https://developer.aliyun.com/article/1224193?groupCode=emas