云函数五分钟扫盲

716 阅读5分钟

  随着这两年Serverless和云函数从概念到落地,它们的价值也逐渐显现出来了。为了和大家一起来了解一下云函数,用这个扫盲贴分别介绍下云函数的概念、价值和如何理解。

  首先,来介绍下云函数的概念:

graph LR
A[Serverless] --> B(Faas: Function as a Service 函数即服务)
A --> C(Baas: Backend as a Service 后端即服务)

  Serverless广义上是指即为让客户直接运行应用,而不用关注它们的底层机制。在狭义上来讲Serverless可以分成以上两个方面,本次主要讲的是Faas这一块,它提供了基于事件驱动的计算服务。开发者以函数片段的方式来管理应用代码,这些函数通过事件或HTTP请求来触发。和传统应用相比,其以更细粒度的函数方式来进行部署,这样计算资源就可以实现更精细的调度和管理,而这些操作都将自动化完成,无须开发者参与。

  接下来介绍下云函数的价值,当服务没有被请求时,云计算上并没有这个函数的实例。一旦请求发出,调度平台将以毫秒级的服务实例化一个服务并完成响应。请求处理完成后,调度服务又将自动收回这个实例。云函数的使用成本只要是由调用次数、资源使用量和外网出流量等统计出来,而如果在业务低谷期,访问量少的时候,运维的成本是很小的。对于创业公司来讲,可以省去大部分初期运维的费用,可见价值还是很大的。

  那么我们对于云函数该如何理解呢?我们先来看看下面这张图:

graph TD
A[Faas控制器] --> |配置触发器| B[事件源]
    A --> |启动实例| C[函数实例]
    B --> |触发| C

  对于一个Faas云函数服务,我们需要配置一个触发器和一个函数实例,我们在调试的时候可以通过控制器来启动函数实例,但是正常使用的时候还是需要通过所配制的触发器的事件源来驱动函数实例来执行。下面我们以腾讯云函数为例,结合创建云函数的步骤,来理解云函数:

截屏2021-11-20 下午8.50.40.png

  从控制台的云函数服务入口进来,点击左边的函数服务标签。可以看到有两种创建云函数的方式,一种是模板创建,第二种是自定义创建。模板创建是引入相应服务的基础项目文件,比如koa模板文件,引入的就是一个koa的项目模板,在写入自己的项目后,就可以通过云函数来调用。我们主要来看一下自定义创建:

自定义创建.png

  在自定义创建中,顶部需要选择是事件函数还是Web函数,这里事件函数是最基础的函数类型,Web函数相较于事件函数更加贴近原生的web开发参数格式,比如在自己启动的koa服务中可以通过koa-bodyparser来解析参数传入自己的云函数服务中。最重要是它既支持通过云函数完成Web服务的开发,也支持本地Web框架一键迁移上云。必须创建一个可执行文件scf_bootstrap来启动Web Server,然后将该文件和代码文件一起打包部署,完成Web函数创建。

  这里既然提到了参数格式,我们来看一下如果是事件函数,云函数约定的参数格式是什么样的。选择事件函数,部署方式选择代码部署,本次先不涉及docker镜像部署。运行环境选择node12。提交方法选择最简单的在线编辑,可以看到执行方法就是我们在文件中导出的main_handler方法。

参数格式.png

  在main_handler方法中,传入了event和context,event即为事件函数中所指的事件,是函数真正的输入参数。context则包含了一些函数运行环境的辅助信息。至此就简单介绍完了我们的函数实例。

  再往下就是函数配置,如果我们在运行函数的时候有一些报错,要检查一下是不是这里的最大内存或者最长耗时设置过小。

函数配置.png

  再往下我们来介绍触发器这一块:

触发器.png

  选项中可以看到有定时触发、COS触发、Ckafka触发、API网关触发等。首先说一下API网关触发,也是我们最常用的触发器。由于Faas自身并不支持HTTP协议,因此还需要通过API网关(API Gateway)来对外提供Web API。如果我们在函数类型中选择了Web函数,那么触发器这里就会锁定为API网关触发。COS触发就是对象存储触发,当用户上传一个静态文件后,它将被存储到文件存储服务中。然后会自动触发我们的云函数。对于视频转码等耗费计算资源而且峰值和谷值访问量差距较大的接口服务,使用云函数可以非常节约成本。定时触发非常明显就是类似例行任务来执行云函数。Ckafka触发即为消息队列所触发的云函数执行。

  至此就介绍完了Faas中函数实例和触发器这两大块。

参考:
1.《前端Serverless面向全栈的无服务器架构实战》杨凯
2. 腾讯云文档

更多精彩文章敬请关注: