当前,通过获取具有唯一 ID 的容器,然后启动容器来手动扩展 Containers。请注意,获取容器并不会自动启动它。
// get and start two container instances
const containerOne = getContainer(
env.MY_CONTAINER,
idOne,
).startAndWaitForPorts();
const containerTwo = getContainer(
env.MY_CONTAINER,
idTwo,
).startAndWaitForPorts();每个实例将运行到其 sleepAfter 时间结束,或者直到它被手动停止。
当您想要显式控制容器实例的生命周期时,此行为非常有用。例如,您可能希望为特定用户启动容器后端实例,或者您可能短暂运行代码沙盒以隔离 AI 生成的代码,或者您可能希望运行短期的批处理作业。
如果您想要运行容器的多个实例并在它们之间路由请求,请使用 getRandom 辅助函数:
import { Container, getRandom } from "@cloudflare/containers";
const INSTANCE_COUNT = 3;
class Backend extends Container {
defaultPort = 8080;
sleepAfter = "2h";
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const containerInstance = await getRandom(env.BACKEND, INSTANCE_COUNT);
return containerInstance.fetch(request);
},
};使用 getRandom 路由到多个无状态容器实例。它为每个请求随机选择 N 个实例之一,这意味着:
- 它要求用户设置固定的要路由到的实例数。
- 它将随机选择每个实例,而不管其位置如何。
我们计划在不久的将来通过内置的自动缩放和路由功能来解决这些问题。