开发者学堂课程【玩转EMAS Serverless精品课-疫苗预约小程序:初识 EMAS Serverless】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/926/detail/14575
初识EMAS Serverless
内容介绍:
一、EMAs Serverless 使用场景
二、EMAS Serverless 产品能力
三、控制台功能演示
四、运行一个云函数
五、小程序 Deme 演示
六、云数据库
该课程适用人群有:计算机科学、软件工程等领域的软件工程师和大学生、尝试使用 Serverless 技术的小程序开发者、前、后端工程师、全栈工程师、探索 Serverless 的技术管理者。
一、EMAs Serverless 使用场景
开发小程序时,一般会涉及到数据存储、后端接口服务等等,这些都需要去开发。
1.EMAs Serverless 的特点
(1)面向多端
EMAs Serverless 面向多端小程序场景提供服务
(2)无需运维
全托管服务,将您从基础设施的管理工作中解放,专注业务领域创新
(3)弹性伸缩
实时弹性伸缩和动态负载均衡,轻松应对突发流量
2.举个例子
当你想要开发一个小程序的时候,不仅要写前端代码,还要开发服务器、对象存储、数据库、内容分发、日志、负载均衡等等。
当你使用了EMAS Serverless服务,面对开发小程序的多端场景。对服务器、OSS 等基础设施进行 API 的抽象封装,可以认为 EMAS Serverless = FaaS t+Baas 。FaaS 是函数计算,也就是云函数,Baas 是后端服务,也就是同时提供数据存储、文件存储等等一整套后端服务。
EMAS Serverless 提供包括云函数、数据存储.文件存储等一整套后端服务。计算资源作为服务而不是服务器的概念出现。开发者不需要关心服务器或底层运维设施,可以更专注于代码和业务本身。
二、EMAS Serverless 产品能力
应用层包括支付宝小程序、钉钉小程序、微信小程序和 HS/Wsb 应用等,通过统一的 SDK 接入,就可以使用云函数、云数据库、云存储和静态网站托管等能力。这些能力层都对用户开放,开发者可以通过 SDK 来接入这些能力。这些能力都是对资源层的抽象封装和接入实现的。
三、控制台功能演示
简单浏览控制台:
打开阿里云官网,搜索小程序云,可以看到:
1.点击控制台,可以看到服务空间管理:
一个服务空间就包含了一个运营环境,包含能力层的基本单位。
进入服务空间,这里选择 EMAS 2022,可以看到该服务空间的函数列表:
每个函数可以进行发布管理、日志查询、基本信息修改和函数的触发配置的功能:
2.打开云数据库的控制台:
可以新建一张数据表,对新数据表进行管理:
云数据库中的表叫做集合,相当于关系型数据库中的一张表等于云数据库中的一个集合,每个集合中有数据记录。
另外的功能有添加索引,对每张表的权限进行精细化的管理;数据回档的功能,可以将数据回档到任意一个时间点。
3.打开云存储的控制台:
云存储控制台包含上传文件,集成小程序 SDK 后,可以通过小程序上传文件。
还可以对权限进行管理:
打开静态网站托管的控制台:
开通完成静态网站后,可以上传静态网站的文件。
还有加速运营的功能,静态网站开发完成后,可以自定义其加速域名:
域名通过审核后,再通过自定义的域名去访问,会得到运营的加速。
4.云函数工作原理
5.用户操作:
开发人员编写业务代码,然后将业务代码打包上传至云函数的控制台。
小程序用户可以通过两种方式运营该云函数,一是通过集成 EMAS Serverless SDK 调用该云函数,云函数的运行结果返回,二是通过配置 HTTP 触发功能,通过 http 协议来调用云函数,最后还可以通过定时触发配置。当云函数跑起来后,会通过日志收集系统得知函数运行的结果及产生的中间日志。
6.云函数执行过程
假设前端传入第一个请求,先会有一个系统冷启动的阶段,该阶段主要包括后端调度实例(调度一个容器服务)、将代码下载并解压和启动该实例。实例完成冷启动后进入运行阶段,首先运行一个初始化环函数,初始化函数运行完成后开始执行 Initializer 函数(主入口),当该函数运行完成后会进入实例的释放时间。假设在实例释放时间有第二个请求进入,这时不需要重新从冷启动开始的流程,而是直接进入执行函数的阶段,当第二个请求也执行完毕后,也进入实例释放时间。实例释放结束后,该实例会被回收,这时第三个请求进入,由于实例已经释放,所以会从系统冷启动开始。(冷启动优化到毫秒级)
四、运行一个云函数
1.新建一个云函数(求两数之和):
运行环境选择 Node js 12
云函数创建完成,点击管理:
2.上传代码包:
由于该函数较简单,可以写一个:
首先做一个函数包的封装
传入一个 const 参数,下面是运行函数的上下文,可以使用提供的日志路口、日志打印。
module.exports=async(ctx)=>{
}
代码如下:
module.exports=async(ctx)=>{
const num1=ctx.args.num1
const num2=ctx.args.num2
return num1+num2
}
封装好后命名:
压缩该文件后上传代码包,再点击部署:
部署成功后运行该云函数
执行{“num1”,123,”num2”,124}
得到执行结果:
可以看到该函数留下的日志:
五、小程序 Deme 演示
打开支付宝小程序开发工具
包含小程序的项目目录:
主要包含 pages 目录和 app.js 文件。
app.js 文件是小程序的路口
pages 包含了小程序的每个页面,会在 pages 下创建目录
app.js 文件介绍:
app.js 文件主要做了 Serverless 的SDK ,提供了一个对象,将该对象初始化后传入一些初始化参数,该部分在第二节会细讲。
完成配置后,看到 index.xml 页面:
该页面包括:
一行文本,两个 input (接收用户输入的两个数),一个 button (让用户点击后调用 involefunction 方法),text 展示运行结果。
现在看云函数是如何调用的:
先将得到输入框的两个值,然后使用 SDK 提供的方法 my.serverless.function.invoke ,其接收两个参数,一个是函数名,函数名为 twoNumberSum,另一个是入参体。运行该函数,将结果放入 res,同时 res.result 将其值取出赋给 num1+num2 的结果。
代码如下:
async invokeFunction (){
const num1 =Number(this,data.num1)
const num2 =Number(this,data.num2)
const res=await my.serverless.function.invoke(‘twoNumber’,{num1,num2})
this.setData{
result:num1+’+’num2+’=’+res,result
})
}
运行:
在运行 demo 时,可以打开调试器,打开 natwork 页码,可以看到运行过程发生了什么:
运行后:
可以看到发起的一条请求,点击打开查看:
response 是云函数返回给开发者的结果
下面可以看到 data 就是返回给用户的结果。
六、云数据库
云数据库提供的是一种文档数据库,如果使用过 Mongo ,那么可以直接用云数据库。
接下来创建一张数据表 test 存放一些数据:
手动添加一条记录:
添加完成后发现该数据表自动生成 id :
(每一个记录都有一个组件,可以理解为关系型数据中的一个组件)
如何在小程序端进行数据的读写:
以上一次演示为例,要将运行结果存到数据库要如何操作:
首先使用 Serverless 下的 db 对象,然后选中操作哪一个集合(这里是 test 集合),对该集合插入一条数据
然后组建该数据,将 num1 和num2 和运行结果(result)放入
重要代码如下:
async invokeFunction(){
const num1=Number(this.data.num1)
const num2=Number(this.data.num2)
const res =await my.serverless.function.invoke{‘twoNumberSum,{num1,num2}}
this.setData({
result=num1+’+’+num2+’=’+res.result
})
const result=res.result
await my.serverless.db.collection {‘test’},insertOne({num1,num2,result})
},
运行结果:
打开调试器,发现数据插入失败:
回到控制台
失败原因是因为数据表提供了权限管理功能,仅管理员可写,所以写入数据失败:
修改权限为所有用户可写:
然后再进行演示
云函数运行结果:
调试器:
调用原函数的请求:
调用数据库的请求:
从图中可知,改动了一条数据,数据插入成功,并返回组件。
回到控制台验证,点击刷新:
看到数据写入该表
注意:
跑小程序 demo 时,要下载小程序开发的 id,注册小程序开发者账号并创建一个小程序,要将 app.js 中的参数改为自己的服务空间、appId 改为自己的支付宝小程序的 id 、spaceId 和 clientSecret 改为自己创建的服务空间的信息。
该信息在控制台,选中自己的开发环境,点击查看可以看到信息。