- #1
- 已编辑
CF 昨天发的文,论坛我看到已经有人发了快讯,但感觉传着传着,被传“变味了”。
我读了下原文,说下我的理解。
不是变成容器,而是集成容器
Simple, scalable, and global: Containers are coming to Cloudflare Workers in June 2025
“Containers are coming to Cloudflare Workers”,其实意思是“容器即将融入 Cloudflare Workers 的体系”。
即,不是原本的 Workers 变成容器化部署,而是支持 Workers 去集成容器应用。
原本的 Workers 依旧存在,只是新增了容器,可供 Workers 去调用(一般是基于 Durable Objects)。
那容器在这里面其实是充当了后端,是有状态的,且自带了分布式和扩容伸缩的能力。
原本的 Workers,简单理解,是变成了一个前端,负责充当 API 网关、服务网格或编排器的角色(更像是个BFF了)。
具体的角色描述如下:
- API 网关:让您在请求到达容器之前控制路由、身份验证、缓存和速率限制
- 服务网格:通过可编程的路由层在容器之间创建私有连接
- 编排器:允许您为容器编写自定义的调度、扩展和健康检查逻辑
啥意思呢,就是我可以使用容器去部署一个有状态的后端,怎么部署呢?可以写一个这样的wrangler.jsonc:
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "ai-container",
"main": "src/index.ts",
"compatibility_date": "2025-04-03",
"containers": [{
"name": "code-executor",
"image": "./Dockerfile",
"class_name": "CodeExecutor",
"max_instances": 2
}],
"durable_objects": {
"bindings": [
{
"class_name": "CodeExecutor",
"name": "CODE_EXECUTOR"
},
]
},
"migrations": [
{
"new_sqlite_classes": [
"CodeExecutor",
],
"tag": "v1"
}
],
"observability": {
"enabled": true
},
"ai": {
"binding": "AI"
}
}
里面 Dockerfile 就是我们的容器文件,max_instances
指定了最多会扩充为2个后端容器实例。
然后它目前并不能直接对客开放服务,而是需要通过 Workers 来作为中转,提供对客服务。
最简单的,可以新建一个 Workers,作为API 网关
,用来端口转发:流量还是先进 Workers,然后再转发到后端容器的某个端口(比如8080)。
Workers 怎么调用后端容器呢,代码 sample 文章里也有:
import { Container } from "cloudflare:workers";
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname.startsWith("/execute-code")) {
const { sessionId, messages } = await request.json();
// pass in prompt to get the code from Llama 4
const codeToExecute = await env.AI.run("@cf/meta/llama-4-scout-17b-16e-instruct", { messages });
// get a different container for each user session
const id = env.CODE_EXECUTOR.idFromName(sessionId);
const sandbox = env.CODE_EXECUTOR.get(id);
// execute a request on the container
return sandbox.fetch("/execute-code", { method: "POST", body: codeToExecute });
}
// ... rest of Worker ...
},
};
// define your container using the Container class from cloudflare:workers
export class CodeExecutor extends Container {
defaultPort = 8080;
sleepAfter = "1m";
}
跟以前一样,Worker 作为网关,先接收了 “https://{host}/execute-code” 这个请求,sandbox
就是上面通过 wrangler.jsonc
创建出的后端容器,这里是将请求包装了下,转发给了容器的/execute-code
接口。
源码sample是开源的,在这儿:cloudflare/containers-demostree/main/ai
收费
收费目前看是即用即付,按使用量收费。
结束
具体玩法,可能还要看六月下旬的 beta 版出来。
个人主要关注,可能就是那个 Dockerfile,是必须上传源码加 Dockerfile?还是说可以应用镜像仓库的镜像(比如 dockerhub)?
前者麻烦点,后者可玩性就高很多了。
总之是个利好消息,给需要部署有状态服务的人提供了多一个选择。
等六月下旬的 beta 版发布时,再一起拭目以待吧,看看大善人会不会还有其他“隐藏彩蛋”~