Serverless 应用开发中优化 Cold Start 的方法

阅读时长 5 分钟读完

Serverless 技术已经成为了现代应用开发中的重要组成部分。由于 Serverless 应用无需配置和管理服务器,这种方式极大地减少了开发时间和开发成本。然而,当应用存在暂时不活跃(如被用户忽略)的时间段之后,因为所有的函数都是无状态服务的,新的请求会启动一个新的容器来运行函数。这种冷启动过程需要加载依赖和初始化环境等步骤,这可能会导致慢的性能和用户体验质量下降。

一些优化方法需要考虑许多因素,例如采用什么样的运行时版本、使用什么样的依赖解析与压缩工具等等。下文将介绍几种流行的 Serverless 冷启动优化方式。

使用缓存

有时候,应用程序有大量共享的初始化数据,如数据库连接、认证令牌等。服务器状态数据和进程缓存一般会被永久存储在硬盘中,但是每个容器的文件系统都是临时性的,处理请求的容器不能访问另一个容器的本地文件系统。不过,我们可以使用云服务提供的内存缓存机制(如 AWS Lambda 提供的 AWS Cache)来解决此类问题。通过缓存功能,可以省去冷启动的初始化过程。下面是一个示例代码:

-- -------------------- ---- -------
------ -----

--- -------------- ---------
    ------------ - --------------------------------------- ----------
    ------------ - --------------------------------
  
    - ------- ------------ ----------------------
    -- ------------ -- -----
        ------------ - ------------------
        -------------------------------- ------------- -------
  
    ------ ---------------- -------------

使用预热机制

如果一个函数处于休眠状态,那么在调用该函数时会浪费时间进行加载。当函数实例 处于休眠状态时,可以定期唤醒这些实例,以防止后续请求时必须等待实例创建和启动。此外,预热机制也有助于减少网络延迟,提高应用程序的性能,并保证有足够的容器资源处于活动状态。

-- -------------------- ---- -------
------ ----
---- ---- ------ -----

--- -------------- ---------
    - ----
    --------
  
    ------ -
        ------------- ----
        ------- ----------------- ---- ---------
    -

选择轻量级运行时环境

Serverless Provider 都提供了丰富的运行时环境选择。在使用 Serverless 应用程序时,不同的运行时环境可以在某些特定场景下帮助减少冷启动时间。基于微容器技术的环境,如 AWS Lambda 使用的 Firecracker,可以在运行函数代码之前快速启动容器。所以选择一个轻量级的运行时环境,对于优化冷启动的等待时间是有帮助的。

优化包大小

云平台在启动一个函数时,需要下载并安装运行时环境,因此包大小越大,启动时间就越长。减少包大小可以加快启动速度,从而减少冷启动的等待时间。缩小包大小的方法包括:

  • 删除未被使用的依赖包
  • 确认在需要覆盖到运行时的类、模块和文件已放在了合适的路径上(编写可执行的脚本获取输出内容)
  • 将代码文件的体积减少到最低限度,并使用 gzip 进行压缩,从而减少下载时间
-- -------------------- ---- -------
------ --------
------ ----
------ -- 
------ -------

--- -------------- ---------

    -- ---------------------------------
        ------------- -- -----------------

    ---------------------------
    ---------------------------

    - ------
    -------------- ------- -------- -- -----------------
  
    -------- - -----------------------------------------------------------
    ---- - ---------------

    ------ -
      ------------- ----
      ------- -----------------
      ---------- ---------------- -------------------
    -

合理的函数配置

针对 Serverless 应用程序在调用时经常会出现的短暂等待时间,可以通过以下几点进行优化:

  • 增加合理的内存大小
  • 可以预先定义 warm-up 请求,使得容器处于就绪状态
  • 合理地设置超时时间,过长或过短都会影响性能
-- -------------------- ---- -------
-------- --------------------

---------
  ----- ---
  -------- ---------
  ------------
    ----------------- ------
  ----------- ---
  -------- -

----------
  ------
    -------- -------------

  ------ 
    -------- -------------

结论

在开发 Serverless 应用程序时,优化冷启动时间是十分必要的事情。在本文中,我们介绍了几个非常有用的优化手段,包括使用缓存、使用预热机制、选择轻量级运行时环境、优化包大小、合理的函数配置。通过实现这些优化措施,可以在极大程度上缩短冷启动等待时间,从而提高 Serverless 应用的性能,增强用户体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67091882d91dce0dc87654eb

纠错
反馈