You need to enable JavaScript to run this app.
导航

代码开发概述

最近更新时间2023.03.02 20:24:19

首次发布时间2022.11.30 10:27:33

函数服务提供代码部署和容器镜像部署两种部署方式,使用容器镜像请参考 Native 函数开发指南。本文为您介绍使用代码部署方式进行代码编写时的相关基本概念。

handler 函数

handler 是函数请求处理逻辑的入口。当您的函数接收到调用请求时,函数服务会从 handler 函数开始执行,启动函数服务进程,对请求事件进行处理。
handler 函数中一般包含 event 入参和 context 入参。

  • event 参数:触发器通过 event 参数向您的 handler 函数传递触发事件的基本信息。
  • context 参数:用于向您的 handler 函数传递运行时信息。

initializer 函数

initializer 是函数的初始化逻辑入口。如果设置了 initializer 函数,函数服务会首先调用 initializer 完成函数的初始化,之后再调用 handler 处理请求。单个函数内的实例级别全局初始化,推荐使用 initializer 函数进行。

  • 工作原理
    如果您传入了一个非空的 initializer 函数,函数服务将托管函数的初始化进程。在函数的服务端进程启动后(通过 Liveness 探针获知),函数服务会下发控制信令,调用 initializer 以执行函数的初始化逻辑,确保函数初始化成功。您可以通过返回 error(或初始化过程中发生 panic)来标识初始化失败。如果函数初始化失败,请求结果会返回 initializer 失败,请求不会被执行。

  • 优势

    • 使函数的初始化和函数服务端启动解耦
      如果 initializer 失败,不会导致函数的进程被反复重启。而如果在 main 函数或者 init 函数中初始化,初始化不成功会导致您函数服务端无法正常启动,引起函数频繁被拉起或者发布失败等情况。

    • 平滑扩容
      在扩容的场景下,函数服务的数据流量调度逻辑,会尽量在函数的 initializer 被执行成功后,才为当前实例注入新的流量,尽可能保证扩容的平滑性。