【问题标题】:What causes cold start in serverless [closed]是什么导致无服务器冷启动[关闭]
【发布时间】:2021-05-01 10:23:10
【问题描述】:

我已经阅读了足够多关于无服务器冷启动的论文,但没有找到关于导致冷启动的原因的明确解释。您能从商业和开源平台的角度来解释一下吗?

  1. AWS Lambda 或 Azure Funtion 等商业平台。我知道它们对我们来说更像是一个黑匣子
  2. 有 OpenFaaS、Knative 或 OpenWhisk 等开源平台。这些平台是否也存在冷启动问题?

我对冷启动延迟的初步理解是花在启动容器上的时间。容器启动后,如果还没有被杀死,可以重复使用,所以有一个热启动。这种理解真的是真的吗?我尝试从镜像本地运行容器,无论镜像有多大,延迟几乎没有。

图片下载时间也是冷启动的一部分吗?但是无论一个节点发生多少次冷启动,都只需要下载一张图片,所以这似乎没有意义。

也许是一个不同的问题,我也想知道当我们从图像中实例化一个容器时发生了什么?在此阶段是否将可执行文件及其依赖库(例如 Python 库)从磁盘复制到内存中?如果有多个容器基于同一个镜像怎么办?我想应该有多个副本从磁盘到内存,因为每个容器都是一个独立的进程。

【问题讨论】:

  • @VovaBilyachat 谢谢。这看起来仍然类似于拉取图像和实例化容器的过程。但是我还是觉得实例化一个容器不需要太多时间。至少从我使用docker run 的经验来看,我听说 Lambda 和 Azure 会在冷启动上浪费几秒钟。我知道真正的无服务器应用程序比本地容器复杂得多,所以我可以放手。
  • 我回家后再输入答案
  • @VovaBilyachat 嗨,Vova,不确定是否仍然可以看到并评论这个问题。抱歉,我的帖子已被某人关闭。我应该在 DevOps Beta Stack Exchange 上提问吗?因为评论有字数限制。
  • 是的,你可以,但我认为它已经关闭,因为这个话题很大。

标签: kubernetes azure-functions serverless-framework serverless aws-serverless


【解决方案1】:

有很多级别的“冷启动”都会增加延迟。热路径中最热的是容器仍在运行,并且可以将其他请求路由到它。最冷的是一个全新的节点,因此它必须拉取映像、启动容器、向 SD 注册、等待无服务器平面的路由内容更新,如果你挖掘得足够深,可能还需要更多步骤。其中一些可以并行发生,但大多数不能。如果 pod 因为没有被使用而被关闭,并且下一次运行计划在同一台机器上,那么是的 kubelet 通常会跳过拉取镜像(除非 imagePullPolicy 总是被强制在某个地方),所以你可以更快地启动。不过,K8s 的调度程序通常不会对此进行优化。

【讨论】:

  • 谢谢! (1)我想知道什么是向 SD 注册(2)您的意思是 k8s 调度程序通常不会将新请求调度到活动 pod 上?即使该节点存储了图像,它也与节点没有关联。但是,如果调度器没有亲和性,那么热启动怎么可能发生。
  • k8s 调度器与请求无关,它负责在节点上放置新的 pod。作为该过程的一部分,它不会针对“图像已在磁盘上”进行优化。请求路由取决于您特定的无服务器框架,它们中的每一个都会在某个地方拥有某种 HTTP 服务,或者配置一个现有的服务,该服务处理传入的请求,找出对应的代码,并在途中发送内容。在大多数情况下,这也是 SD 系统(SD == 服务发现),或者至少构建在 K8s(服务)中包含的系统之上。
  • 我不熟悉k8s和serverless框架的关系。你能给我一些材料来阅读,或者我应该弄脏手来理解。对于openfaas,看起来 serverless 框架是响应请求的前端,即在 k8s 集群上运行 serverless。但是对于像openwhisk 这样的框架,我知道它的架构是什么样的。我真的很困惑它如何与 k8s 集群结合。
  • 解释每个无服务器工具的架构远远超出了 SO 评论的范围,抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多