serverless简介及应用
# 一、什么是Serverless
Serverless 能解决什么问题?理清 Serverless 要解决的问题其实很简单,我们可以从字面上把它拆开来看。Server 这里指服务端,它是 Serverless 解决问题的边界;而 less 我们可以理解为较少关心,它是 Serverless 解决问题的目的。组合在一起就是“较少关心服务端”
- 第一种:
狭义 Serverless(最常见)=Serverless computing 架构=FaaS 架构=Trigger(事件驱动)+ FaaS(函数即服务)+ BaaS(后端即服务,持久化或第三方服务)=FaaS + BaaS - 第二种:广义
Serverless=服务端免运维=具备 Serverless 特性的云服务

# 二、编写你的第一个 Serverless 应用

- FaaS 平台都支持 Node.js、Python 、Java 等编程语言;
- FaaS 平台都支持 HTTP 和定时触发器(这两个触发器最常用)。此外各厂商的 FaaS 支持与自己云产品相关的触发器,函数计算支持阿里云表格存储等触发器;
- FaaS 的计费都差不多,且每个月都提供一定的免费额度。其中 GB-s 是指函数每秒消耗的内存大小,比如1G-s 的含义就是函数以 1G 内存执行 1 秒钟。超出免费额度后,费用基本都是 0.0133元/万次,0.00003167元/GB-s。所以,用 FaaS 整体费用非常便宜,对一个小应用来说,几乎是免费的。
以阿里云函数为例
// logic.js
exports.sayHello = function (name) {
return `Hello, ${name}!`;
}
@前端进阶之旅: 代码已经复制到剪贴板
// index.js
const logic = require('./logic');
exports.handler = (request, response, context) => {
// 从 request 中获取
const { name } = request.queries;
// 处理业务逻辑
const message = logic.sayHello(name)
// 设置 HTTP 响应
response.setStatusCode(200);
response.setHeader("Content-Type", "application/json");
response.send(JSON.stringify({ message }));
}
@前端进阶之旅: 代码已经复制到剪贴板
把业务逻辑拆分到入口函数之外
# 触发器及事件对象
- HTTP 触发器
在众多 FaaS 平台中,函数计算直接提供了 HTTP 触发器,HTTP 触发器通过发送 HTTP 请求来触发函数执行,一般都会支持 POST、GET、PUT、HEAD 等方法。所以你可以用 HTTP 触发器来构建 Restful 接口或 Web 系统。

HTTP 触发器会根据 HTTP 请求和请求参数生成事件,然后以参数形式传递给函数。那么 HTTP 触发器的入口函数参数中的 request 和 response 参数具体有哪些属性呢?
其实, request 和 response 参数本质上与 Express.js 框架的 request 和 response 类似
- API 网关触发器
API 网关触发器与 HTTP 触发器类似,它主要用于构建 Web 系统。本质是利用 API 网关接收 HTTP 请求,然后再产生事件,将事件传递给 FaaS。FaaS 将函数执行完毕后将函数返回值传递给 API 网关,API 网关再将返回值包装为 HTTP 响应返回给用户。
