使用 Deno Subhosting 与 AWS Lambda 运行不受信任的用户代码的比较
Deno Subhosting 是在网络上运行用户不受信任代码的最简单方式。由于它基于 Deno Deploy v8 多租户隔离云构建,因此经过优化,能够以最小的开销和最高的安全性部署和运行 JavaScript。
尽管许多用户喜欢通过 Deno Subhosting REST API 以编程方式部署 JavaScript 的简洁性,但也有人询问为什么他们不能使用 AWS Lambda 构建相同的东西。简短的答案是:您当然可以!由于 AWS Lambda 是一个更小的“构建块”,如果您有 Deno Subhosting 无法处理的特定需求,并且有时间实现许多关键功能,如代码和部署管理、安全和最大租户隔离,以及部署的自动伸缩,那么它会是一个很好的选择。
在这篇博客文章中,我们将探讨使用 Deno Subhosting 或 AWS Lambda 构建部署平台时,两者之间的关键差异,例如功能、性能和计费模型。
Deno Subhosting 与 AWS Lambda 比较
在构建一个用户可以在网络上部署和运行其代码的平台时,有以下两个关键方面需要确保正确无误:
- 安全性:如果一个用户的代码可以访问另一个用户的代码,那么没有人会足够信任该平台,从而继续使用它。
- 性能:部署和运行代码应以秒为单位,而不是分钟,否则用户可能会因为糟糕的体验而流失。
尽管这两个方面至关重要,但我们还列出了我们认为与评估集成部署平台的解决方案相关的其他维度:
Deno Subhosting | AWS Lambda | |
---|---|---|
支持的语言 | JavaScript/TypeScript | JavaScript, Java, Go, PowerShell, Node.js, C#, Python, Ruby |
性能:冷启动 | 毫秒 | 秒 |
性能:部署时间 | 秒 | 分钟 |
部署和代码管理 | 是 | 否 — 您必须自行构建 |
安全和租户隔离 | 是 | 否 — 您必须自行构建 |
全球 | 是 | 区域 |
尽管 AWS Lambda 支持的语言比 Deno Subhosting 多得多,但我们选择仅支持 JavaScript 和 TypeScript,这使得我们能够优化整个体验,以实现最高的部署和冷启动性能。然而,如果您的开发者强烈偏好使用非 JavaScript 或 TypeScript 的语言,那么使用 AWS Lambda 构建解决方案是合理的。
由于 AWS Lambda 是一种无服务器函数,它比 Deno Subhosting 灵活得多,但这需要您重新实现关键的基础设施组件,例如:
编排和管理部署
以编程方式将代码放入 Lambda 并进行部署只是构建部署平台的一小部分。使用 AWS Lambda 构建此功能将需要找出通过 HTTP 传输代码、压缩和解压缩代码以加载到 Lambda 中、如何存储和检索代码等最佳方法。而 Deno Subhosting 不仅解决了并实现了这些步骤,还对其速度进行了优化,以确保无缝的用户体验。
此外,使用 AWS Lambda 构建时,您还需要创建流程来检测最终用户代码何时失败或挂起并终止它们,以防止资源产生过高费用。Deno Subhosting 已经解决了这些边缘情况,因此您只需专注于提供良好的用户体验。
安全和租户隔离
任何可以在云端运行不受信任代码的平台都必须将安全性视为最重要的考虑因素。我们如何防止有人运行试图访问其他用户代码甚至您内部系统的恶意代码?
使用 AWS Lambda 从头开始构建此功能需要实现隔离 Lambda 之间相互访问以及与底层 AWS 账户中任何其他系统访问的流程。另一方面,Deno Subhosting 从一开始就被设计为尽可能安全,具有最大的租户隔离和检测资源滥用的机制。
这些组件对于构建一个运行第三方不受信任用户代码的部署平台至关重要,如果使用 AWS Lambda 构建,则需要从头开始实现。然而,如果您正在寻找一个需要最少开发和持续维护的解决方案,Deno Subhosting 更简单,因为它旨在安全地运行不受信任的代码并支持基本功能。
计费模型和定价
评估任何技术时,另一个关键考虑因素是定价。虽然 Subhosting 和 AWS Lambda 之间的总体定价难以比较,因为 Lambda 的价格不包括与 Subhosting 中包含的其他云服务(例如数据存储)相关的成本,但关键区别在于计费模型。
Deno Subhosting(和 Deno Deploy)采用基于计算的计费模型,而 AWS Lambda 采用实时(或“挂钟时间”)计费模型。这意味着在 Deno Subhosting 中,您只在服务器进行计算时付费,而不是在等待外部系统响应时付费。相比之下,AWS Lambda 会在 Lambda 收到请求到处理完请求的整个过程中进行计费,即使大部分时间都在等待第三方 HTTP 响应。
在上述流程中,“实时”(也称为“挂钟时间”)计费从应用程序收到 POST 请求开始,直到应用程序响应客户端为止。相比之下,“CPU 时间”仅在函数实际处理时(由蓝线表示)才计算。从这个意义上讲,CPU 时间是根据所执行的工作收费的,并且“更无服务器化”,即您无需为闲置时间付费。
哪种解决方案适合您?
如果您想要一个更开箱即用的解决方案,能够以更简单的设置处理 JavaScript 和 TypeScript,我们鼓励您了解 Deno Subhosting。它经过优化以运行不受信任的代码,因此在设计时考虑了租户隔离、部署的伸缩、流量路由和子域名生成,这样您就不必自行实现这些基本功能。此外,由于仅支持 JavaScript,它还通过快速部署和更快的冷启动时间进行了性能优化。
然而,如果您有时间实现基本功能,并希望构建一个更适合您产品特定需求的定制化部署平台,或者希望支持 Go、Python 和 Java 等语言,那么 AWS Lambda 是一个不错的选择。
想了解更多关于 Deno Subhosting 如何为您的产品赋能增长的问题?