什么是 Serverless?
Serverless 是最近几年非常流行的一种云原生开发方式,他的基本思想是:
- 将服务部署到云上,并使用云服务提供的底层资源(例如 CPU,存储,网络)。
- 每个服务都只有一个入口函数,并且根据实际需求,按需调用其他函数。
- 按需计费,使用更为灵活,成本更低。
Serverless 的另一个好处是,开发人员无需关注底层资源的管理,可以更专注于业务逻辑的实现。
常见问题
1. 限制性
Serverless 平台限制了各种资源的使用,例如:
- 内存:通常只支持几百 M 的内存,不支持自定义内存大小。
- CPU:CPU 配置不可见,由平台自动调整。
这对一些需要占用较大内存或者需要大量计算量的函数来说是常见的问题。
2. 网络延迟
许多 Serverless 平台在每次函数调用时都要等待一段时间,这通常称为“启动时间”。在这段时间里,函数的代码需要被装载到虚拟机上,这可能需要多达几秒钟。
因此,如果函数的执行时间较短,则由于启动时间占用了大量时间,函数的实际执行时间可能会很短。
3. 多个函数间的数据传输
当多个函数需要协作时,Serverless 平台的数据传输机制通常较为复杂
Serverless 平台提供了一些机制,如 HTTP API 和消息队列。然而,使用这些机制可能会使数据处理变得麻烦。例如,如果大量数据需要在多个函数之间传输,则可能会遇到诸如数据传输和转换之类的问题。
深入挖掘
处理时区
时区处理是 Serverless 中常见的问题之一。如果您的 Serverless 应用程序涉及到使用本地时间进行计算,时区差异可能会变得棘手。
您可以使用 Serverless 应用程序中的以下方法来避免这些问题:
- 在应用程序中使用 UTC(协调世界时)而不是本地时间。
- 如果必须使用本地时间,请将时区信息存储在环境变量中,并在应用程序中使用。
let date = process.env.TZ ? new Date().toLocaleString("en-US", {timeZone: process.env.TZ}) : new Date()
处理日志
当我们使用 Serverless 进行开发时,通常需要记录各种事件和消息,例如错误堆栈,成功的请求或错误的请求等。
Serverless 平台通常会提供一些日志服务,例如 AWS CloudWatch(云监控),Google StackDriver(堆栈驱动程序),Azure Application Insights(应用程序洞察),它们可以帮助您快速发现问题并优化您的应用程序。
以下示例演示如何在 AWS Lambda 中记录消息:
console.info('This is a console message', {"lambda_function_name": context.functionName, "input": event});
在 Serverless 中使用数据库
许多 Serverless 平台支持使用各种关系型和非关系型数据库,并提供与这些数据存储服务的整合(如 RDS, DynamoDB, CosmosDB 等)。
以下是在 AWS Lambda (使用 DynamoDB)中进行数据读取和写入的代码示例:
-- -------------------- ---- ------- ----- --- - ------------------ ----- ------ - --- ----------------------------- ------- ----------- -- ----- --- - ----- -- -- - --- - ----- ------ - - ---------- ------------------ ---- - --- ---------- - - ----- -------- - ----- ---------------------------- ------ ------------- - ----- ------- - -------------------- - - ----- --- - ----- ------ -- - --- - ----- ------ - - ---------- ------------------ ----- ---- - ----- -------- - ----- ---------------------------- ------ -------- - ----- ------- - -------------------- - -
部署
在 Serverless 中部署应用程序通常称为“上传”应用程序。这是一个常见的问题,因为与传统应用程序部署相比,Serverless 应用程序通常比较复杂。
以下是一个在 AWS Lambda 中上传应用程序的示例:
sls deploy
总结
Serverless 开发模式需要开发人员熟练掌握平台提供的观察、调试、监控和日志等工具,以便能够及时发现和解决问题。同时,在处理数据、启动时间、网络延迟等方面要特别注意,以确保 Serverless 应用程序的高效运行。
另一方面,Serverless 的好处同样不少,可以极大地降低应用程序运行的成本和复杂性,并使开发人员专注于业务逻辑的开发和创新。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6466a03a968c7c53b071f139