Serverless 节点如何处理依赖关系?

什么是 Serverless?

Serverless(无服务器)指的是在构建应用时,开发者不必关心底层的服务器搭建、部署和维护,只需关注核心业务逻辑开发即可。Serverless 通常采用基于事件-trigger的计算模型,在触发事件后自动调用相应的函数执行。

Serverless 中的依赖关系

Serverless 的应用一般会包含多个函数,这些函数之间会存在依赖关系。举个例子,有一个论坛应用,需要处理用户发表的文章并进行审核,如果审核通过则将文章发布到首页供其他用户浏览。这个过程中,我们需要以下几个函数:

  1. 用户发表文章后,触发文章审核函数;
  2. 文章审核函数需要调用 User Service 验证用户身份;
  3. 如果用户身份验证通过,审核函数会调用 Storage Service 存储文章信息;
  4. 存储文章信息失败时,需要调用 Notification Service 发送通知邮件告知管理员。

从上面的例子我们可以看到,Serverless 应用存在函数的依赖关系,这些依赖关系需要在部署时进行管理。

Serverless 中的依赖关系处理方式

1. 手动处理依赖关系

最直观的方法是手动处理函数间的依赖关系。在部署函数时,我们通过部署多个函数为一组,然后设置这些函数的触发条件,来实现函数间的依赖关系。

下面是一个基于 AWS Lambda 平台的例子:

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

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

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

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

上面的代码中,我们首先分别创建了 StorageService、UserVerify、NotificationService 这三个函数及其所需的配置,然后再创建 ArticleReview 函数时,通过配置 ArticleReview_CONFIG 参数来指定 StorageService、UserVerify、NotificationService 三个函数的 ARN(Amazon Resource Name)。在执行 ArticleReview 函数时,Lambda 会自动读取这些 ARN,通过执行相应的函数来进行函数间的动态调用。

2. 使用 Serverless Framework 管理依赖关系

手动管理函数间的依赖关系需要编写大量的部署脚本和处理代码,这会让我们的部署过程变得越来越复杂。因此,更好的方式是采用 Serverless Framework 管理依赖关系。

Serverless Framework 是一个开源的、面向云原生应用的端到端解决方案,它提供了可编程的、模块化的架构,让开发者可以快速地构建和部署 Serverless 应用。通过 Serverless Framework,我们可以轻松地管理依赖关系。

下面是一个使用 Serverless Framework 管理依赖关系的例子:

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

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

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

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

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

上面的代码中,我们定义了 Service 名字为 serverless-website,提供商为 AWS,函数则有 verifyUser、storeArticle 和 reviewArticle。其中,reviewArticle 执行时依赖于 verifyUser 和 storeArticle 两个函数,这个依赖关系则通过 dependsOn 指定。

3. 采用 Serverless Workflow 管理依赖关系

如果您的 Serverless 应用中包含的运算较多或业务逻辑较复杂,可以使用 Serverless Workflow 管理所有函数间的依赖关系。Serverless Workflow 是一个轻量级的工作流引擎,它可以帮助您更好地管理 Serverless 应用中的各个函数。

下面是一个使用 Serverless Workflow 管理依赖关系的例子:

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

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

上面的代码中,我们定义了两个 Service:store-article 和 verify-user。store-article 服务定义了一个名字叫做 store-article 的工作流,这个工作流的 defination 包含了两个 States:verify-user 和 store-article,它们依次依赖运行。另一方面,verify-user 定义了一个名字叫做 verify-user 的工作流,这个工作流只包含一个 State:verify-user,它是该服务的主要运算逻辑。

总结

Serverless 应用中的依赖关系处理不仅仅是函数之间的调用关系,还涉及到代码库、运行环境等方面,需要我们在部署时进行细致的管理和配置。通过手动处理、使用 Serverless Framework 或采用 Serverless Workflow,我们可以更加高效地管理和部署 Serverless 应用中的依赖关系。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ca4f6a5ad90b6d041a770d


猜你喜欢

相关推荐

    暂无文章