# 运行机制

# 概述

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。云开发中的云函数可让用户将自身的业务逻辑代码上传,并通过云开发的调用触发函数,从而实现后端的业务运作。

云函数的传入参数有两个对象, event 对象和 context 对象。

  • event 对象指的是触发云函数的事件,event 就是小程序端调用云函数时传入的参数。
  • context 对象包含了此处调用的调用信息和运行状态,可以使用 context 了解服务运行的情况。

本段代码的含义指将传入的 a 和 b 相加并作为 sum 字段返回给调用端。 例如,我们定义一个云函数,命名为 add ,功能是将传入的两个参数 a 和 b 相加。示例代码如下:

// index.js 是入口文件,云函数被调用时会执行该文件导出的 main 方法
// event 包含了调用端调用该函数时传过来的参数,同时还包含了用户登录态 `openId` 和应用 `appId` 信息
exports.main = async (event, context) => {
  let { a, b } = event
  let sum = a + b

  return {
    sum
  }
}

# 运行环境

云函数运行在云端 Linux 容器 环境中,一个云函数在处理并发请求的时候会创建多个云函数实例,每个云函数实例之间相互隔离,没有公用的内存或硬盘空间。

!当前运行环境是在 CentOS 7.2 中,编写代码不应依赖特定的操作系统或特定的操作系统版本号,运行环境可能会发生变化。

云函数实例的创建、管理、销毁等操作由平台自动完成。每个云函数实例都在 /tmp 目录下提供了一块 512MB 的临时磁盘空间用于处理单次云函数执行过程中的临时文件读写需求。

! 这块临时磁盘空间在函数执行完毕后可能被销毁,不应依赖和假设在磁盘空间存储的临时文件会一直存在。如果需要持久化的存储,请使用云存储功能。

# 运行时

当前支持 Node.js 8.9 和 PHP 7.2

# 内存

云开发的云函数内存统一为 256Mb,不支持配置

# 无状态

云函数应是无状态的,幂等的,即一次云函数的执行不依赖上一次云函数执行过程中在运行环境中残留的信息。

为了保证负载均衡,云函数平台会根据当前负载情况控制云函数实例的数量,并且会在一些情况下重用云函数实例,这使得连续两次云函数调用如果都由同一个云函数实例运行,那么两者会共享同一个临时磁盘空间,但因为云函数实例随时可能被销毁,并且连续的请求不一定会落在同一个实例,因此云函数不应依赖之前云函数调用中在临时磁盘空间遗留的数据。总的原则即是云函数代码应是无状态的。

# 事件模型

云函数的调用采用事件触发模型,小程序端的每一次调用即触发了一次云函数调用事件,云函数平台会新建或复用已有的云函数实例来处理这次调用。同理,因为云函数间也可以相互调用,因此云函数间相互调用也是触发了一次调用事件。

# 自动扩缩容

开发者无需关心云函数扩容和缩容的问题,平台会根据负载自动进行扩缩容。

# 访问云开发的各项服务

如需在云函数中操作数据库、管理云文件、调用其他云函数等操作,可使用官方提供的 npm 包 @cloudbase/node-sdk进行操作。