在传统的自动化工作流架构中,事件触发后需要通过网络请求发送到中心化服务器处理,这往往带来 100-500ms 的网络延迟。对于实时监控、即时响应等场景,这样的延迟是不可接受的。
本教程将带你实战搭建 Edgeflow 边缘工作流系统—— 一套结合 Cloudflare Workers 边缘计算能力与 n8n 工作流编排的混合架构,实现:
- ✅ 零延迟响应:事件在最近的边缘节点即时处理
- ✅ 高可扩展:利用 Cloudflare 全球 320+ 数据中心自动扩容
- ✅ 低成本运维:无服务器架构,按实际使用量计费
- ✅ 灵活编排:n8n 图形化界面管理复杂业务逻辑
核心架构与原理
Edgeflow 架构采用「边缘触发 + 中心编排」的双层设计:
准备工作:环境搭建与依赖配置
步骤 1:Cloudflare 账户与 Workers 配置
注册并启用 Workers 服务
访问 Cloudflare Dashboard,完成账户注册后进入 Workers & Pages 页面,点击「Create Application」。
安装 Wrangler CLI
# 使用 npm 安装
npm install -g wrangler
# 或使用 bun(推荐)
bun install -g wrangler
# 登录 Cloudflare 账户
wrangler login
初始化 Worker 项目
# 创建项目目录
mkdir edgeflow-worker && cd edgeflow-worker
# 使用 TypeScript 模板初始化
wrangler init --template common/create-worker
步骤 2:部署 n8n 环境
n8n 支持两种部署方式:n8n Cloud(托管服务)和自托管(Docker/Node.js)。
使用 Docker 快速部署(推荐)
# 创建 docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_secure_password
- N8N_HOST=your-domain.com
- WEBHOOK_URL=https://your-domain.com/
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
配置 Redis 队列(生产环境必需)
# docker-compose.yml 追加配置
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
# n8n 服务添加以下环境变量
- EXECUTIONS_PROCESS=main
- QUEUE_BULL_REDIS_HOST=redis
实战:编写 Edgeflow Worker
Worker 是整个边缘工作流的触发器,负责接收事件并调用 n8n Webhook。
创建 Worker 脚本
在 edgeflow-worker/src/index.ts 中写入以下代码:
import { Env } from './env';
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise {
const url = new URL(request.url);
// 只处理 POST 请求
if (request.method !== 'POST') {
return new Response('Method not allowed', { status: 405 });
}
try {
// 解析请求体
const body = await request.json();
// 边缘侧快速验证:检查必填字段
if (!body.eventType || !body.payload) {
return new Response(JSON.stringify({
error: 'Missing required fields: eventType, payload'
}), {
status: 400,
headers: { 'Content-Type': 'application/json' }
});
}
// 添加时间戳和边缘节点信息
const enrichedPayload = {
...body,
timestamp: Date.now(),
edgeLocation: request.cf?.colo || 'UNKNOWN',
edgeIp: request.headers.get('CF-Connecting-IP'),
};
// 调用 n8n Webhook
const n8nResponse = await fetch(env.N8N_WEBHOOK_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${env.N8N_API_KEY}`,
},
body: JSON.stringify(enrichedPayload),
});
if (!n8nResponse.ok) {
throw new Error(`n8n webhook failed: ${n8nResponse.status}`);
}
const result = await n8nResponse.json();
return new Response(JSON.stringify({
success: true,
executionId: result.executionId,
message: 'Event processed successfully',
}), {
status: 200,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-store',
},
});
} catch (error) {
console.error('Edgeflow Worker error:', error);
return new Response(JSON.stringify({
success: false,
error: error instanceof Error ? error.message : 'Unknown error',
}), {
status: 500,
headers: { 'Content-Type': 'application/json' },
});
}
},
};
配置环境变量与绑定
编辑 wrangler.toml:
name = "edgeflow-worker"
main = "src/index.ts"
compatibility_date = "2026-03-01"
node_compat = true
[vars]
N8N_WEBHOOK_URL = "https://your-n8n-domain.com/webhook/edgeflow-trigger"
# 生产环境使用 Secrets
# wrangler secret put N8N_API_KEY
N8N_API_KEY 等敏感信息请使用 wrangler secret put 命令设置,不要硬编码在配置文件中。
部署 Worker
# 开发环境本地测试
wrangler dev
# 生产环境部署
wrangler deploy
# 设置 API Key Secret
wrangler secret put N8N_API_KEY
# 按提示输入你的 n8n API 密钥
配置 n8n 工作流
登录 n8n 管理后台,创建名为「Edgeflow Event Processor」的工作流。
添加 Webhook 触发器
在画布上添加 Webhook 节点,配置如下:
- HTTP Method: POST
- Path: edgeflow-trigger
- Response Mode: Last Node
- Options: 启用「Binary Data」支持
添加条件分支节点
使用 Switch 节点根据 eventType 路由到不同处理分支:
// Switch 规则配置
{{ $json.eventType === 'user.signup' ? 'handle_signup' :
$json.eventType === 'order.created' ? 'handle_order' :
'handle_default' }}
集成第三方服务
以用户注册场景为例,添加以下节点:
- HTTP Request:调用 CRM API 创建客户记录
- Slack:发送通知到销售频道
- Google Sheets:记录到数据看板
启用队列模式(生产环境必需)
在 n8n 设置中启用队列模式:
# docker-compose.yml 追加
n8n-worker:
image: n8nio/n8n:latest
command: worker
environment:
- EXECUTIONS_PROCESS=main
- QUEUE_BULL_REDIS_HOST=redis
deploy:
replicas: 3 # 根据负载自动扩缩
进阶:边缘数据存储与优化
利用 Cloudflare KV 实现边缘缓存,进一步减少延迟。
// 1. 创建 KV 命名空间
wrangler kv:namespace create EDGE_CACHE
// 2. 在 wrangler.toml 中绑定
[[kv_namespaces]]
binding = "EDGE_CACHE"
id = "your-namespace-id"
// 3. Worker 中使用
// 读取缓存
const cached = await EDGE_CACHE.get(`user:${userId}`);
if (cached) {
return new Response(cached);
}
// 写入缓存(TTL: 1 小时)
await EDGE_CACHE.put(`user:${userId}`, JSON.stringify(userData), {
expirationTtl: 3600
});
常见问题与解决方案
Q1: Worker 调用 n8n 超时怎么办?
Cloudflare Workers 默认超时为 10 秒(免费计划)或 30 秒(付费计划)。对于长耗时任务,采用异步模式:Worker 仅将事件推送到队列(如 Cloudflare Queues),立即返回成功响应,n8n 消费队列后通过回调通知结果。
Q2: 如何保证 Webhook 安全性?
三层防护:(1) Bearer Token 认证;(2) Cloudflare Access 限制来源 IP;(3) 请求签名验证(HMAC-SHA256)。Worker 代码中验证 cf-access-jwt-assertion 头部。
Q3: 队列积压如何监控?
在 n8n 中配置 Prometheus 导出器,配合 Grafana 仪表盘监控 Redis 队列长度。设置告警阈值(如队列长度 > 1000 持续 5 分钟),自动触发 Worker 扩容。
总结
- ✅ Edgeflow 架构:Cloudflare Workers 边缘触发 + n8n 中心编排,实现零延迟响应
- ✅ 环境搭建:Wrangler CLI 部署 Worker,Docker 快速启动 n8n + Redis
- ✅ 实战代码:完整的 TypeScript Worker 脚本与 n8n 工作流配置
- ✅ 生产优化:KV 边缘缓存、队列模式、安全认证、监控告警