amazon-web-services - 无服务器函数如何比调用服务器的普通端点更快?
问题描述
据我所知,
无服务器函数(例如:Firebase Cloud Function)每次调用都会执行整个代码。它可能包括加载依赖项、第 3 方模块、设置数据库连接和拆除它们等,这需要花费大量时间。
在传统服务器中,所有依赖项都被加载,数据库连接被缓存和重用。
因此,无服务器函数如何比典型的服务器调用更快地工作?
解决方案
“无服务器”功能只不过是一个普通的服务器(可能是一个容器),所有正常的依赖项和东西都是按需加载的。
因此,当您进行 API 调用时会创建一个服务器(因此当您没有收到这些 API 调用时会为您节省资金)。现在,一旦创建了这些服务器(容器)中的一个,您可能会保留它一段时间,以便随着时间的推移让它处理更多的 API 调用。当您的服务器的流量下降时,您可以将其终止以节省成本。
因此,您可以想象最终的结果是您进行的第一个 API 调用需要大量时间(“冷启动”),然后后续请求很快(因为一切都已设置好)。
现在取决于分配给这些“按需服务器”的资源量——它们可能比更传统的服务器更快。我还猜想,由于这些是云提供商提供的一流产品,它们的实现比其他可能做同样事情的服务更优化(比如 RDS 比在 EC2 上运行的数据库更快)。
因此,平均而言,您可能会看到您的无服务器功能执行得更快。当然,总会有“冷启动”问题,这对您来说可能是个问题。
当然还有其他优点和缺点:
- 优点:无需维护基础设施
- 优点:与其他云服务无缝集成
- 缺点:供应商锁定
推荐阅读
- c# - 为什么在 ToDictionary 中使用 GroupBy 中的密钥时出现“已添加密钥”错误?
- pip - 如何卸载使用 pip3 安装的软件包及其依赖项?
- openwrt - 删除路由 OpenWRT
- android - 从文件中获取内容:// Uri
- node.js - 在使用 http.request 在 node.js 中执行 rest api 调用时出现错误:getaddrinfo ENOTFOUND
- r - 带有预定义标题的excel导入
- android - 列表视图大小适应项目
- javascript - 如何通过将值作为另一个对象的键来创建新对象?
- django - 在 django 管理站点中添加按钮
- elixir - HTTPoison 发布请求超时 Eixir