使用 Deno Subhosting 与 AWS Lambda 运行不受信任的用户代码
Deno Subhosting 是在 Web 上运行用户不受信任代码的最简单方法。因为它构建于 Deno Deploy v8 多租户隔离云之上,所以它经过优化,可以以最小的开销和最大的安全性部署和运行 JavaScript。
虽然许多用户喜欢通过 Deno Subhosting REST API 以编程方式部署 JavaScript 的简便性,但也有其他人询问为什么他们不能使用 AWS Lambda 构建同样的东西。简短的答案是:你绝对可以!由于 AWS Lambda 是一个更小的“构建块”,如果您有 Deno Subhosting 无法处理的特定需求,并且有时间实现许多关键功能,例如代码和部署管理、安全性和最大租户隔离以及部署的自动向上和向下扩展,那么它可能是一个很好的选择。
在这篇博文中,我们将介绍使用 Deno Subhosting 或 AWS Lambda 构建部署平台的主要差异,例如功能、性能和计费模式。
Deno Subhosting 与 AWS Lambda 的比较
在构建用户可以在 Web 上部署和运行其代码的平台时,有两个关键方面需要做好
- 安全性:如果一个用户的代码可以访问另一个用户的代码,那么没有人会信任该平台并继续使用它
- 性能:部署和运行代码应该在几秒钟内而不是几分钟内完成,否则您将面临用户因糟糕的体验而流失的风险
虽然这两点至关重要,但我们还列出了其他维度,我们认为这些维度与评估用于集成部署平台的解决方案的人员相关
Deno Subhosting | AWS Lambda | |
---|---|---|
支持的语言 | JavaScript/TypeScript | JavaScript、Java、Go、PowerShell、Node.js、C#、Python、Ruby |
性能:冷启动 | 毫秒 | 秒 |
性能:部署时间 | 秒 | 分钟 |
部署和代码管理 | 是 | 否 — 您必须构建自己的 |
安全性和租户隔离 | 是 | 否 — 您必须构建自己的 |
全局 | 是 | 区域性 |
虽然与 Deno Subhosting 相比,AWS Lambda 支持更多语言,但我们选择仅支持 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 如何解锁您的产品增长有更多疑问吗?