相关概念

最近更新时间:2018-12-14 09:37:27

腾讯云无服务器云函数(Serverless Cloud Function,SCF)为函数即服务 (Function as a Service,FaaS)产品,提供无服务器(Serverless) 和 FaaS 的计算平台。运行方式依赖事件触发。因此在和触发事件源结合时,云函数就可以被触发源所产生的事件触发运行。

无服务器

无服务器架构说法的来源可以根据 Mike Roberts 在 Martin Fowler 的博客网站上发表的 无服务器架构 一文中得到解释。

无服务器并不是没有服务器就能够进行计算,而是对于开发者来说,无需了解底层的服务器情况,也能使用到相关资源,因此称为无服务器。

无服务器也可以从更广的角度来识别,针对无需配置和了解底层的服务器就可以直接使用的云服务,在一定程度上也可以称为无服务器。

在无服务器云函数 SCF 产品中,我们针对的是无服务器场景中的计算场景。云函数产品提供的是无服务器模式下的 FaaS 能力。

函数即服务

函数即服务提供了一种直接在云上运行无状态的、短暂的、由事件触发的代码的能力。

函数即服务和传统应用架构不同,函数服务提供的是事件触发式的运行方式,云函数不是始终运行的状态,而是在事件发生时由事件触发运行,并且在一次运行的过程中处理这一次事件。因此在云函数的代码中,仅需考虑针对一个事件的处理流程,而针对大量事件的高并发处理,由平台实现云函数的多实例并发来支持。

为了实现对高并发的支持,云函数平台提供了自动的弹性伸缩能力,会在有大量请求到来时启动更多实例来处理事件请求,也会在没有事件到来时缩减函数实例甚至到零实例。因此为了匹配自动扩缩能力,需要函数代码使用的是无状态开发方式,即不在云函数的运行内存中保留相关的状态数据并在多次运行时依赖这些状态数据。云函数的状态数据,可以依赖外部的持久存储能力例如云缓存、云数据库、云存储来进行。

触发器和触发源

任何可以产生事件,触发云函数执行的均可以被称为触发器或触发源。触发器在本身产生事件后,通过将事件传递给云函数来触发函数运行。

触发器在触发函数时,可以根据自身特点,使用同步或异步方式触发函数。同步方式触发函数时,触发器将等待函数执行完成并获取到函数执行结果;异步方式触发函数时,触发器将仅触发函数而忽略函数执行结果。

腾讯云无服务器云函数在和腾讯云的某些产品或服务对接时,也有自身实现的一些特殊方式,例如推(PUSH)模式和拉(PULL)模式。

  • 推模式:触发器主动将事件推送至云函数平台并触发函数运行。
  • 拉模式:云函数平台通过拉取模块,从触发器中拉取到事件并触发云函数运行。

触发事件

触发器在触发函数时会将事件传递给云函数。事件在传递时以一个特定的数据结构体现,数据结构格式在传递时均为 JSON 格式,并以函数 event 入参的方式传递给云函数。

触发事件的 JSON 数据内容,在不同的语言环境下将会转换为各自语言的数据结构或对象,无需在代码中自行进行从 JSON 结构到数据结构的转换。
例如,在 Python 环境中,JSON 数据内容会转变为一个复杂 dict 对象,即函数的入参 event 就是一个 Python 的复杂 dict 对象。而在 Golang 或 Java 中,入参是一个需要和 event 数据结构可以匹配的对象。更具体的实现方式可以见 开发语言说明