什么是 Serverless?
Serverless 是一种无服务器计算模型,它允许开发人员构建和运行应用程序和服务,而无需考虑服务器管理和维护。在 Serverless 模型中,资源和应用程序状态由云服务提供商维护和管理,并根据请求调整资源。
FaaS(函数即服务)
FaaS 是一种 Serverless 模型,它允许开发人员在无需管理基础设施的情况下运行代码。以 AWS Lambda 为例,FaaS 允许您定义函数并将其上传到 Lambda。无论何时发生事件(例如 WebHook 请求,SNS 主题发布等),Lambda 将运行函数。
FaaS 对于短时间处理、事件驱动的应用程序以及微服务都非常适合。
示例代码:
以下是一个 Node.js Lambda 函数,它会对从 API 网关收到的请求进行回复:
exports.handler = async (event) => { const body = JSON.parse(event.body); return { statusCode: 200, body: `Hello, ${body.name}!`, }; }
BaaS(后端即服务)
BaaS 是一种 Serverless 模型,它允许开发人员在无需管理基础设施的情况下运行后端服务。BaaS 将后端服务与云服务提供商的数据存储集成,并提供 API 用于访问数据。
Firebase 是一个提供 BaaS 的云服务提供商。它提供数据存储、身份验证、云函数和即时通信等功能。
示例代码:
以下是一个使用 Firebase Auth 进行身份验证并读取数据库的示例:
-- -------------------- ---- ------- ----- --------- - ------------------------------ ----- ----- - -------------------------- ---------------------- ------------------- - ----------------------------- -------- -- - -- --------------- - ----- --- --------------------------------------------- ----- -- --- ----------------- - ----- --- - ----------------- ------ ----- ----------- -------------------- -------------- ---------------- -- - ------ --------------- --- ---
CAP(一致性、可用性和分区容错性)
CAP 原则是分布式系统设计中必须考虑的三个属性之一。在 CAP 原则中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)是互斥的。
在 Serverless 应用程序中,使用 CAP 原则可以帮助确定数据存储的适当方案。大多数 Serverless 数据库只能满足 CAP 三者中的两个。
例如,AWS DynamoDB 支持一致性和分区容错性,但在可靠性上妥协。相反,AWS Aurora Serverless 相对较新,具有高可用性和一致性,但是当前不支持分区容错性。
IOC(控制反转)
IOC 是一种软件设计模式,它可以将依赖关系从高层次模块中分离出来,从而促进代码的可测试性和可维护性。在 Serverless 应用程序中,IOC 很重要,因为您经常需要引入多个服务,例如云存储、消息队列和身份验证。
示例代码:
以下是使用 InversifyJS 的 TypeScript 代码示例,它允许您在 AWS Lambda 中进行控制反转:
-- -------------------- ---- ------- ------ ------------------- ------ - ----------- - ---- ----------------- ------ - --------- - ---- --------------------- ------ ----- ------- - ----- ------- --- - ---- ------------ -- - ----- ----------- - -------------------------------------------- ------ -------------------------- -
import { Container } from 'inversify'; import { SomeService } from './some-service'; const container = new Container(); container.bind<SomeService>(SomeService).toSelf().inSingletonScope(); export { container };
结论
Serverless 是一种新兴的开发模型,它具有许多优点,例如灵活性、可扩展性和较低的维护成本。通过深入了解 Serverless 模型和函数编程模型(FaaS、BaaS、CAP、IOC),可以构建强大的应用程序,而无需考虑底层基础设施。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6707ae66d91dce0dc86b5aa9