Serverless 是一种新型的架构风格,它可以使你以更少的工作量和成本构建出高效可靠的应用程序。Serverless 框架就是一种用于部署 Serverless 应用程序的“取巧”方式,让你零配置就可以快速构建和部署应用程序。本文将介绍如何使用 Serverless 框架来设计分层架构。
什么是 Serverless 架构
Serverless 架构(无服务器架构)是一种计算模型,该计算模型基于事件驱动的无状态函数,函数将通过云提供商在运行时被调用,以处理事务和服务请求。这种设计方式用于极简化应用程序、减少运维复杂度和成本、增加快速响应性。
但是,在使用 Serverless 架构时,我们要注意以下几点:
- 无状态:每次函数调用都是一次新的请求,函数间不共享任何数据或状态。
- 冷启动(针对 AWS Lambda):由于函数是每次运行时动态调用的,第一次调用的挂载时间可能会比较长(这称之为“冷启动”)。
- 运行时间限制:通常,函数运行时间有计时器限制,通常为 5 - 15 分钟。
Serverless 架构的分层架构
对于 Serverless 架构,我们可以将它分成三层架构:数据层、业务层和界面层。
数据层
在 Serverless 中,数据应该存储在云服务提供商的数据库或存储桶中。例如,AWS S3(或 Azure Blob 存储)可以存储静态数据;AWS DynamoDB(或 Azure 表存储)可以存储半结构化数据;AWS RDS(或 Azure SQL 数据库)可以存储高度结构化数据。我们可以使用 AWS CloudFormation 或 AWS Cloud Development Kit(CDK)创建这些云服务。
在代码中,我们可以使用 AWS SDK 或 Azure SDK 来调用这些数据库或存储桶。
以下是使用 Serverless Framework 创建 DynamoDB 表的示例框架代码。
-- -------------------- ---- ------- -------- ------------------------- -------- - ------------------------- - ------------------ ------- ---------- ---- --------- ----- --- -------- ---------- ------- --------- ---------- ---------- ------------------------------ ----- -------------------- ----------- ---------- ------------------------ --------------------- - -------------- ------ -------------- - ---------- - -------------- ------ -------- ---- ---------------------- ------------------ --- ------------------- ---
业务层
业务层包含一组逻辑程序功能,例如处理业务数据和逻辑检查、调用其他服务(例如 AWS SNS)进行消息推送、验证 OAuth 标记等。对于 Serverless 中的每个业务功能,我们可以创建单独的 Lambda 函数。
以下是使用 Serverless Framework 创建 Lambda 函数的框架代码。
-- -------------------- ---- ------- -------- -------------------------- -------- - ------------------ --------- ----- --- -------- ---------- ------- --------- ---------- --------- -------- -------------
以下是一个处理 POST 请求的 Lambda 函数示例,该请求处理用户名和密码。
-- -------------------- ---- ------- ---- -------- ----- --- - ------------------- ----- --------- - --- ------------------------------ ----- ------ - ------------------ ----- ----------- - --- ---------------------- - ----- ------- -------- -- - ----- -------- - -------------------- ----- -------- - -------------------- ----- -------------- - ----- --------------------- ------------- ----- --- - - ---------- --------------------------- ----- - --- --------------------- --------- --------- --------- -------------- - -- ------ ------------------------------------ -- - ----- -------- - - ----------- ---- ----- ------------------------ -- ------ --------- --- -
界面层
界面层通常是通过 Web API(例如 REST API)或移动应用程序(例如 Android 或 iOS 应用程序)与终端用户进行交互和通信的视觉组件。对于服务器端渲染的应用程序,我们可以使用 Node.js Express 框架提供界面层。对于静态网站,则可以使用 AWS S3 和 CDN。
以下是使用 Serverless Framework 部署静态网站的框架代码。
-- -------------------- ---- ------- -------- ------------------------- -------- - -------------------- - -------------------------------- --------- ----- --- -------- ---------- ------- --------- ------- --- ----------- --------- --------- ------ ---------- ---------- --------- ----- --------------- ----------- ----------- ---------------------------- ------------- ----- ---------------------------- ----------- --------- -------------- ------------------------------------------------------------------------------- ---------------- ----- ----------- ----------- ---------------------------- -------------- -------------------------- ---------------- ----- ----------------------------- ----------- ------------------- -------- ---- ------------ --- ---------- -------- - ----------- --------------------------------------------- --- -------- --------------- --------------------- -- -------- ---- --------------------- --------------- -------- ---------------- ------------ ------- --------------------- ------------------- --------------- - --- - ---- ----------- ----- ------- ---- -------- - ----------- ----------- -------------- ---------- - ------------
结论
由于 Serverless 是一种新的架构风格,它可以减少工作量和成本,从而构建出高效、可靠且快速响应的应用程序。在 Serverless 中,我们可以通过分层架构设计将业务逻辑和数据模型分离,从而更好地扩展和维护代码。Serverless 框架提供了一种“取巧”的方式来构建和部署 Serverless 应用程序,它提供了自己适当的代码拆分和代码测试工具,同时也具有无缝部署和易于调试的功能。相信本文可以为你提供有深度、有学习和指导意义的 Serverless 开发技巧。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674c84cda336082f254203c9