随着云计算的普及,Serverless 架构成为了快速构建云端应用的一种热门选择。Serverless 架构可以大幅度降低运维成本和增强应用可扩展性,但也存在一些缺陷,需要注意。
在本文中,我将讨论一些 Serverless 架构的缺陷以及如何解决这些问题。
缺陷:冷启动
当函数处于闲置状态时,Serverless 架构通常会将其释放掉,为了再次启动这个函数,需要重新加载应用程序,这就需要额外的时间,这就是所谓的“冷启动”问题。
对于短时间的计算或实时互动式响应,冷启动可能对系统的性能产生负面影响,也会让用户等待太久。
解决方式:预热函数
为了解决冷启动问题,可以使用预热函数。顾名思义,预热函数是在实际请求到达之前提前调用的函数,是一种主动预热缓存的技术。
下面是一个 Node.js 函数的示例,它会被定期运行以“预热”函数,然后在实际请求到达之前防止函数被关闭。
-- -------------------- ---- ------- ----- --- - ------------------ ----- ------ - --- ------------ --------------- - ----- --------------- - -- ------ ------ - ----------- ---- ----- ------- ------- - - ----- ------ - ----- ---------- - --- - --------------------- -------- ----- ------ - ----- --------------- ------------- ------------------------------------- --------------- ------------------ -------- ---------------- ------- ---- -- ------------ ------------------- ------------ ------- - ----- ----- - --------------------- --------- ---- - - -- ------ ------------------ ---- - -- - ---
缺陷:不支持长连接
Serverless 架构不能保持长连接,这意味着在执行完成后,应用程序被释放,与之相关的任何连接都会被关闭。尽管这限制了 Serverless 应用程序的某些功能,但这并不是令人困扰的,因为应用程序可以针对特定任务使用。
解决方式:使用 WebSocket API
虽然 Serverless 架构的函数不能支持常连接,但是 AWS API Gateway 提供了一个 WebSocket API,这个 API 支持实时双向消息传递,以便对 Serverless 架构进行扩展以支持长连接。
WebSocket API 提供了一种类似于 HTTP 的协议,以在服务器和客户端之间建立双向的、持续的网络连接。以下 Node.js 代码示例演示如何使用 AWS SDK for JavaScript 来访问 WebSocket API。
-- -------------------- ---- ------- ----- --- - ------------------ ----- ----------------------- - --- ----------------------------- ----------- ------------- --------- ---------------------------------------------------------------- -- --------------- - ----- --------------- - ----- - ------------- ---- - - ----- ------------------------ ----- ----- -------------------------- ----- ------ -- - ----- ------------ - ----- ---------------------- ----- - --- - ----- ------------------------------------------ ------------- ------------- ----- ------------------------------------ ------------ -------------------- ----- - ----- ----- - ------------------- -- ------- ---- - -
缺陷:难以调试
Serverless 架构不支持本地调试,开发人员必须打包和部署应用程序才能进行调试。这可能会导致问题的出现和解决时间延长。
解决方式:使用本地图像和仿真环境
可以针对函数进行仿真,以验证函数并调试代码。AWS X-Ray 采用影像(Image)和仿真(Emulate)来快速生成 Serverless 应用程序的虚拟环境,以在本地执行函数。
例如,以下 Node.js 代码演示使用 AWS SAM(Serverless Application Model)在本地构建、调试和部署 Serverless 应用程序的方法。
-- -------------------- ---- ------- ---------- --------- ----- ------------------------- ----------- -------- - -------- ------------- -------- ---------- ------- - ----- ----- - ------- --- -------- --------- -------- -- ---------- ---------------------------- -------- ------------- ------ ---- -----------------
本地构建、调试和测试:
$ sam build $ sam local start-api $ curl -s localhost:3000
总结
Serverless 架构的缺陷包括冷启动、不支持长连接和难以调试等问题。为了解决这些问题,可以使用预热函数等技术来缓解冷启动问题,使用 WebSocket API 来支持长连接,并使用本地图像和仿真环境来快速调试 Serverless 应用程序。
以上这些方法都是非常实用的技术,希望可以对大家在实际项目中运用 Serverless 架构有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646820c4968c7c53b0853d21