公共能力

  1. 将函数依赖的公共库提炼到,以减少部署、更新时的代码包体积
  2. 对于支持层功能的运行时,函数计算会将特定的目录添加到运行时语言的依赖包搜索路径中
  3. 对于自定义层,需要将所有内容打包到一个压缩包,并上传到函数计算平台
    • 函数计算运行时会将层的内容解压并部署到特定的目录
  4. 层功能的好处
    • 函数程序包更小
    • 避免在制作函数 zip 包和依赖项过程中出现未知的错误
    • 可以在多个函数中引入使用,减少不必要的存储资源浪费

image-20240315121828521

  1. 上传层之后,函数计算会将层的 zip 包上传到对象存储
  2. 当调用函数执行时,会从对象存储中下载层的 zip 包并解压到特定目录
  3. 应用程序只需要访问特定目录,就能读取层的依赖和公共代码

注意:后序的层会覆盖相同目录下的文件

快速迭代

标准运行时 / 自定义镜像

  1. 函数计算系统初始化执行环境之前,会扮演该函数的服务角色,获得临时用户名和密码并拉取镜像
  2. 镜像拉取成功后,会根据指定的启动命令、参数和端口,启动自定义的 HTTP Server
    • 该 HTTP Server 会接管函数计算系统所有请求的调用

调用方式不同:事件函数 / HTTP 函数

image-20240315122705414

  1. 在创建函数之前,需要基于自身业务实现一个 HTTP Server,并将其打包成镜像,上传到镜像仓库,供函数计算使用
    • 建议基于 HTTP事件的触发方式,实现相应的接口功能
    • 需要根据接口协议规范,实现请求 Header 和 Body 中值的解析和处理
    • 上传镜像时,需要指定容器的启动命令 Command、参数 Args、监听端口 Port
    • 推荐实现一个 Healthz 函数,用于健康监测
  2. 创建一个函数,只需要设置函数运行相关的基本属性,再关联上一步构建的镜像即可
  3. 根据业务场景,选择合适的触发方式来请求函数计算平台
  4. 通过 HTTP 触发器进行请求
    • 自定义镜像是 HTTP Server 的形式
    • 如果是首次启动,函数计算平台会从镜像仓库拉取自定义镜像,并启动容器
  5. 函数计算服务控制器会将收到的请求,调度到对应的 HTTP Server,由 HTTP Server 接管后续的服务处理

流量切换

函数计算支持为发布的函数版本创建别名(指向特定版本指针),可以设置主版本和新版本的流量比例

image-20240315194554646

削峰容灾

通过 MQ,先引入突增的流量,然后通过后端调度系统调度给云函数处理

image-20240315195503752

云厂商一般都做了同步重试异步延时重试的策略
针对异步信息:引入递增重试机制容灾队列

image-20240315200434628