Skip to content
Cloudflare Docs
非官方翻译 - 此文档为非官方中文翻译版本,仅供参考。如有疑问请以 英文官方文档 为准。

架构

此页面描述了 Cloudflare 容器的架构。

容器如何以及在哪里运行

在您部署使用容器的 Worker 后,您的镜像会上传到 Cloudflare 的注册表 并全球分发到 Cloudflare 的网络。 Cloudflare 将在全球范围内预调度实例并预获取镜像,以确保在扩展并发容器实例数量时快速启动。这允许您调用 env.YOUR_CONTAINER.get(id) 并快速获得新实例,而无需担心 底层扩展。

当发出启动新容器实例的请求时,将选择最近的具有预获取镜像的位置。对同一实例的后续请求, 无论它们来自何处,只要实例保持活动状态,都将路由到此位置。

启动额外的容器实例将使用其他具有预获取镜像的位置, Cloudflare 将自动开始在后台准备额外的机器, 以便进行额外扩展和快速冷启动。由于预热位置数量有限, 一些容器实例可能会在距离最终用户较远的位置启动。 这样做是为了确保容器实例快速启动。您只需为主动运行的实例付费,而不是为任何未使用的预热镜像付费。

每个容器实例都在自己的 VM 中运行,这提供了与 Cloudflare 网络上运行的其他工作负载的强隔离。容器 应该为 linux/amd64 架构构建,并且应该保持在 大小限制 内。日志记录、指标收集和 网络会在每个容器上自动设置。

容器请求的生命周期

当向任何 Worker(包括具有关联容器的 Worker)发出请求时,它通常由 与请求用户之间具有最佳延迟的位置的数据中心处理。 如果智能放置 开启,或者最近的位置负载过重,可能会选择不同的数据中心来优化整体延迟。

当向容器实例发出请求时,它通过 Durable Object 发送,该对象 可以通过使用 DurableObjectContainer 来定义,后者 使用容器特定的 API 和帮助程序扩展 Durable Objects。我们建议使用 Container,请参阅 Container 类文档 了解更多详细信息。

每个 Durable Object 是一个全局可路由的隔离沙箱,可以执行代码并存储状态。这允许 开发者轻松地寻址和路由到特定的容器实例(无论它们放置在何处), 定义并在容器状态更改时运行钩子,对实例执行定期检查,以及存储与每个实例关联的持久状态。

如上所述,当容器实例启动时,它在最近的预热位置启动。这意味着 容器中的代码通常在与处理 Workers 请求的位置不同的位置执行。

由于所有容器请求都通过 Worker 传递,最终用户无法向容器实例发出 TCP 或 UDP 请求。如果您有需要来自最终用户的入站 TCP 或 UDP 的用例,请告知我们