云函数成本高昂?试试这些 Serverless 优化技巧

阅读时长 5 分钟读完

随着云计算的流行,越来越多的应用程序将自己的后端逻辑迁移到云端。Serverless 架构是目前很流行的一种云端架构,它可以大大减少维护和运维的成本,提高开发团队的效率。然而,随着应用程序的增长,Serverless 架构的成本也会变得越来越高。本文将介绍一些 Serverless 优化技巧,帮助您降低成本。

1. 启用请求批处理

每次调用云函数都需要支付一定的费用。如果您的应用程序需要大量的小请求,则会导致不必要的成本。因此,启用请求批处理可以将多个请求合并为一个请求。这样可以减少请求数量,并降低成本。

例如,假设有一个需要将多个图片转换为缩略图的应用程序。您可以采用以下方式启用请求批处理:

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

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

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

在上述代码中,我们首先将每个记录中的对象键提取出来,并将其转换为格式化请求的数组。然后,我们创建了一个 S3 对象,使用 Promise.all() 并行处理所有请求。

启用请求批处理不仅可以减少请求数和成本,还可以提高处理速度。

2. 利用缓存

许多应用程序都会有一些常见的计算结果,这些结果可能会被多个函数反复使用。如果没有缓存,这些函数的执行时间和成本可能会相当高。

因此,服务器端缓存是一个非常重要的优化技巧,在 Serverless 应用程序中同样适用。AWS Lambda 支持内存级别的缓存,您可以将其用于共享数据,以避免重复执行某些计算。请注意,因为内存级别的缓存不是持久的,所以对于需要长时间存储的数据,需要使用其他服务,如 Amazon ElastiCache。

以下是一个示例代码片段,展示如何使用 AWS Lambda 内存级别的缓存:

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

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

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

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

在上述代码中,我们首先检查缓存是否已经中存在 bucket-list 中。如果没有,我们使用 AWS SDK 调用 S3 API 获取所有存储桶列表,并将结果保存在缓存中。如果缓存中已经存在 bucket-list 数据,我们就直接返回它。

使用内存缓存可以大幅度减少重复计算的执行时间和成本,提高函数的性能。

3. 缩小函数的尺寸

函数的大小对于其启动和执行时间有很大影响。因为每个函数都要加载到内存中,并且在执行时要解压缩代码包,因此代码包越大,函数的启动和执行时间就会越长。此外,代码包大也意味着更多的内存使用,从而导致更高的成本。

为了缩小代码包的尺寸,请考虑以下几个优化技巧:

  • 删除不需要的依赖项
  • 使用 Babel 等工具来删除不必要的代码
  • 避免将 Node.js 的可执行文件打包到代码包中
  • 避免打包大型文件

以下是一个示例 Lambda 函数的目录结构,其中包含了一个不必要的 npm 包:

在上述示例中,我们将 unused-package 从目录中移除,同时在 package.json 中也将其删除。

缩小函数的尺寸可以减少函数启动和执行时间,并降低运行成本。

结论

以上是 Serverless 优化的三个技巧,您可以通过启用请求批处理、利用缓存和缩小函数的尺寸来降低 Serverless 架构的成本。使用这些技巧可以提高函数的性能和可扩展性,增强应用程序的稳定性,并节省运行成本。当然,这里提到的技巧只是冰山一角,还有很多其他的优化策略可以帮助您优化 Serverless 架构,我们希望这些技巧可以帮助您开始 Serverless 的旅程。

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

纠错
反馈