用 Cloudflare Workers 搭一个可扩展的 Webhook 接收端
来源:dev.to — 2026-11-05
📋 概述
处理大规模 Webhook 有一组固定难题:GitHub、Stripe、Twilio 这类第三方要求几秒内返回 200,慢了就判定失败并重试;事件常常成批到达,一个突然变热的仓库或一批大任务能同时触发上千个 Webhook;端点公开可达,必须验证载荷确实来自可信方;而投递语义是「至少一次」,系统必须优雅处理重复事件。作者的方案是把职责拆开:边缘 Worker 只做验证与入队,立刻返回 200,处理交给队列异步完成。Cloudflare Workers 的卖点是近乎瞬时的冷启动、由离发送方最近的数据中心接单、以及内建的 Queues 与 Worker 原生集成。具体实践包括在边缘用 HMAC-SHA256 校验签名并做常数时间比较以防时序攻击,以及用 Queues 把接入与处理解耦;作者还以开源 AI 代码评审引擎 Codra 作为参考实现。
🔑 核心要点
- 边缘只做两件事:验证签名、入队,然后立刻返回 200,把慢处理移出请求路径。
- 大多数第三方要求几秒内响应,超时即判失败并触发重试,所以同步处理本身就是设计错误。
- 签名比较必须用常数时间比较,否则比较耗时会泄露信息,形成时序攻击面。
- 因为投递语义是「至少一次」,重复事件是常态,幂等必须做在消费端而不是假设只来一次。
- 选 Workers 的实际理由:冷启动几乎为零、由最近的数据中心接单、Queues 与 Worker 原生集成。
💡 金句
“The edge worker should only validate the request and push it to a queue.”
译:边缘 Worker 只应该做两件事:验证请求,然后把它推进队列。
👍 0
👎 0
← 返回 dev.to 首页