← 中文资源

简体中文版本

用 Cloudflare Workers 做蓝绿切换

通过 Worker 在两个源站间按权重分流,并以变量编程切换,实现秒级回退。

阅读英文原文

目标

环境切换需要即时且可逆,又不能等 DNS 传播。本配方在 Cloudflare Worker 中读取环境变量权重,按比例在蓝绿源站间分流,两个源站始终保持暖机;切换与回退只需修改变量并重新部署,数秒内完成;同时提醒会话粘性需按稳定标识哈希路由。

步骤要点

  1. 在 Worker 中按环境变量权重分流到两个源站。
  2. 通过更改变量并重新部署实现切换与回退。
  3. 按稳定标识哈希路由以保持会话粘性。
  4. 显式设置目标主机名以匹配 TLS 与路由。
export default {
  async fetch(request, env) {
    const toGreen = Math.random() * 100 < Number(env.GREEN_WEIGHT || 0);
    const origin = toGreen ? 'green.internal' : 'blue.internal';
    const url = new URL(request.url);
    url.hostname = origin;
    return fetch(new Request(url, request));
  },
};

排错提示

  • 会话粘性若破坏需按用户哈希路由。
  • 权重是概率而非精确配额。
  • 遍历 Worker 会增加一跳延迟。

适用边界

  • 两套源站需始终健康。
  • 权重控制是概率性的。