边缘 + Serverless 的下一站:Cloudflare Workers × K8s 混合架构,正在悄悄改写运维玩法
说实话,这两年我越来越有一个感觉:传统“服务跑在机房/云服务器上”的思路,正在被一点点拆掉重组。
以前我们做架构,脑子里是这样的:
用户 → Nginx → 后端服务 → 数据库 → Redis → 一整套 K8s 或 VM 集群
但现在慢慢变成:
用户 → 边缘节点(Cloudflare Workers)→ 就近处理/过滤 → 回源 K8s(复杂逻辑)→ 数据层
一句话总结就是:
轻的放边缘,重的留中心。
今天咱就聊一个很实战的组合:
👉 Cloudflare Workers + Kubernetes 的混合模式
一、为什么这个组合突然火了?
我先说个很现实的痛点,你一定见过:
- 接口被刷爆(边缘扛不住)
- 登录接口延迟高(跨地域)
- WAF/限流写在 K8s,根本来不及拦
- 全球用户访问一个中心机房,延迟感人
以前我们解决方案是:
“加机器 + 上 CDN + 再加一层网关”
但问题是——
你加的是“算力”,不是“位置”
而 Cloudflare Workers 的核心能力其实一句话:
把代码搬到离用户最近的地方执行
这就直接改变游戏规则了。
二、Cloudflare Workers + K8s 的分工哲学
我自己总结了一句话:
边缘做判断,中心做计算;边缘做过滤,中心做复杂。
我们拆一下:
1)Cloudflare Workers(边缘层)
适合做:
- 鉴权(JWT 校验)
- 限流(IP / Token)
- AB 测试
- 请求路由
- 简单聚合
- 缓存命中
特点:
- 极低延迟(ms级)
- 无服务器管理
- 全球分布
2)Kubernetes(中心层)
适合做:
- 复杂业务逻辑
- 数据库操作
- AI推理 / 大计算任务
- 消息队列处理
- 微服务编排
特点:
- 强计算能力
- 可扩展性强
- 生态成熟
三、一个真实架构长什么样?
我给你画个“工程味很重”的结构:
用户请求
↓
Cloudflare Edge(Workers)
↓
判断:
- 合法?
- 是否缓存?
- 是否直接返回?
↓
(命中缓存)←直接返回
↓
(未命中)
↓
K8s API Gateway
↓
微服务集群
↓
数据库 / Redis / MQ
重点是:
👉 80%请求在边缘就结束了
👉 只有20%进入K8s
这才是成本和性能双赢的关键。
四、代码层:Workers 怎么“接管入口流量”
我们先看一个最典型的 Worker 示例(简化版 API Gateway):
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
// 1. 简单鉴权(边缘完成)
const auth = request.headers.get("Authorization");
if (!auth || auth !== "Bearer demo-token") {
return new Response("Unauthorized", {
status: 401 });
}
// 2. 缓存逻辑(边缘命中)
if (url.pathname === "/api/product") {
const cache = await caches.default.match(request);
if (cache) return cache;
}
// 3. 转发到 K8s 服务
const resp = await fetch("https://k8s-gateway.example.com" + url.pathname, {
method: request.method,
headers: request.headers,
body: request.body
});
// 4. 缓存写回(边缘)
if (url.pathname === "/api/product") {
ctx.waitUntil(caches.default.put(request, resp.clone()));
}
return resp;
}
};
你看这个逻辑,其实很“运维思维”:
- 边缘做“拦截 + 判断”
- K8s 做“执行 + 计算”
五、K8s 这一层,其实反而更“纯粹”了
当 Workers 把“入口复杂度”吃掉之后,K8s 反而变得更干净。
比如一个 Spring Boot / Go API 服务:
func ProductHandler(w http.ResponseWriter, r *http.Request) {
productID := r.URL.Query().Get("id")
// 1. 查 Redis
cache, err := redis.Get(productID)
if err == nil {
w.Write(cache)
return
}
// 2. 查数据库
product := db.Query("SELECT * FROM product WHERE id = ?", productID)
// 3. 写缓存
redis.Set(productID, product, 60*time.Second)
json.NewEncoder(w).Encode(product)
}
你会发现:
👉 K8s 不再负责“抗流量入口”
👉 它只负责“业务计算”
这点非常关键。
六、这个架构真正的价值,不是快,而是“分层清晰”
很多人第一反应是:
“是不是只是加速?”
错。
它真正改变的是:
1)流量治理前移
以前:
流量进 K8s 才开始治理
现在:
在边缘就决定生死
2)安全边界前移
以前:
- WAF 在中心
- API Gateway 在中心
现在:
- 攻击在边缘直接死掉
3)成本下降(非常现实)
因为:
- K8s CPU压力下降
- 带宽减少
- 数据库压力下降
七、一个更真实的场景:秒杀系统
我们用一个电商秒杀举例:
❌ 传统方案
所有请求进入 K8s:
- 排队
- 限流
- Redis扣库存
- 数据库写入
结果:
👉 K8s 被打爆
✅ Edge + K8s 方案
Workers(边缘):
if (!rateLimit(ip)) {
return new Response("Too many requests", {
status: 429 });
}
// 提前过滤库存请求
if (cache.stock === 0) {
return new Response("Sold out", {
status: 200 });
}
K8s:
只处理“真正有效请求”
结果:
👉 90%垃圾请求死在边缘
👉 后端只处理“有效交易”
八、我对这个架构的真实感受
说点不那么“技术教科书”的话。
我觉得这套组合本质上是在做一件事:
把“分布式系统”再往前推一层,推到网络边缘。
以前我们谈分布式:
- 多机房
- 多副本
- 多集群
现在变成:
- 全球边缘节点 + 中心 K8s
说白了就是:
计算正在从“数据中心时代”进入“地理分布时代”
九、但也别神话它(重点)
这套架构也有坑,我必须说清楚:
1)调试复杂
边缘 + 中心双链路,问题定位难度翻倍。
2)一致性问题
缓存 + 边缘计算 = 数据一致性挑战
3)厂商绑定
Cloudflare Workers 很强,但也意味着:
“你得相信 Cloudflare”
十、最后一句话总结
如果让我用一句话总结 Cloudflare Workers + K8s:
K8s 负责“算”,Workers 负责“挡”,边缘负责“筛人”,中心负责“干活”。
这不是简单的技术叠加,而是一种新的系统设计思路。
未来的架构可能不会再问:
“你有没有上 K8s?”
而会问:
“你的流量,有没有在边缘就被处理掉?”
如果你愿意,我下一篇可以直接给你拆:
👉 “Cloudflare Workers + K8s + Kafka 的完整生产级架构设计(含降级与熔断策略)”