什么是 Serverless?
Serverless(无服务器)指的是在构建应用时,开发者不必关心底层的服务器搭建、部署和维护,只需关注核心业务逻辑开发即可。Serverless 通常采用基于事件-trigger的计算模型,在触发事件后自动调用相应的函数执行。
Serverless 中的依赖关系
Serverless 的应用一般会包含多个函数,这些函数之间会存在依赖关系。举个例子,有一个论坛应用,需要处理用户发表的文章并进行审核,如果审核通过则将文章发布到首页供其他用户浏览。这个过程中,我们需要以下几个函数:
- 用户发表文章后,触发文章审核函数;
- 文章审核函数需要调用 User Service 验证用户身份;
- 如果用户身份验证通过,审核函数会调用 Storage Service 存储文章信息;
- 存储文章信息失败时,需要调用 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