Faas产品对比图
- • Faas平台都支持Node.js、Python、Java等编程语言,也都支持Http触发器和定时触发器
- • 各个厂商的Faas都支持与自己云产品相关的触发器 例如:函数计算支持阿里云表格存储触发器
- • Faas的计费都差不多,且每个月都提供一定的免费额度,每个月前100万次执行免费,前40万GB-s免费(函数每秒消耗的内存大小,例如1GB-s 函数在1GB内存的规格上执行一秒钟所消耗的内存大小),超过免费额度之后,基本上是执行一万次一分钱,执行1GB-s 0.0031617分钱。用Faas整体的费用会非常便宜,对于小应用来说,几乎是免费的
- • 国外开发者会经常使用Lambda,相关的第三方产品和社区也会更加完善。国内经常使用函数计算,因为函数计算使用方式更符合国内开发者的习惯。
怎么用Faas去开发一个Serverless应用?
编写一个所有人都可以访问的Helloword接口,并根据请求参数进行响应
客户端请求该接口的代码
接口开发流程
一、传统应用开发流程
代码开发->初始化服务器(安装Node.js、Nginx)->启动Node.js Server(node index.js)->解析域名->配置Nginx
二、Serverless应用开发流程
代码开发->代码部署(Faas函数)->创建触发器
为函数配置http触发器,Faas自动帮你初始化运行环境,http触发器会自动为你提供一个测试域名
1、函数计算方式:在函数计算控制台上新建一个函数
注意:会用到Http触发器,函数计算的Http触发器要在创建函数时就指定
- • request是请求信息,可以从中获取到请求参数
- • response是响应对象,可以用它来设置Http响应数据
- • context是函数上下文
创建触发器
用该APi Endpoint对函数进行测试,通过curl命令测试一下
如果用浏览器访问,response header中强制添加content-disposition: attachment字段,此字段会使得返回结果在浏览器中以附件的方式打开,此字段无法覆盖,使用自定义域名将不受影响。
2、Lambda方式
- • 在Lambda控制台上先创建一个函数,为函数添加api网关触发器,没有直接提供http触发器来实现通过http请求触发函数执行。Lambda也会默认提供一个测试域名
- • 与http触发器不同的是,api网关触发器入参是event,event对象就是http请求信息
http触发器和api网关触发器区别
函数计算的http触发器请求处理方式和express.js框架处理请求更加类似,而api网关触发器是普通函数
开发Serverless应用的基础知识
- • Serverless应用是由一个个函数组成的,与main函数对应的就是Faas中的入口函数,一般名为handler即index.js文件中的handler函数
- • Faas函数可以包含多个源文件,然后按照编程语言的模块机制相互引入
定义hello.js sayHello函数
将业务逻辑拆分到入口函数之外
函数定义
- • 函数定义本质上是由云厂商、触发器和编程语言等多个条件决定的。标准的函数定义是function(event,context),event是事件对象(Serverless中的触发器被称为事件源)
- • 部分特殊函数触发器的定义可能与标准的也不一样,比如http触发器是对标准函数触发器的进一步封装,主要是为了方便对http请求进行处理
函数上下文
包含函数运行时的一些信息
不同编程语言开发函数
Node.js和python开发是最简洁的。Node.js开发人员也比较多,前后端都很容易上手,在Serverless中最受欢迎。
Node.js
回调函数
在Node.js中,仅Lambda的入口函数支持异步async写法,其他Faas平台的入口函数只能是同步写法,对于异步函数只能使用回调函数实现,所以入口函数有第三个参数callback
Python