n8n Autoscaling System是一个基于Docker的n8n工作流自动化平台自动缩放方案,能根据Redis队列长度动态缩放工作容器,不需要复杂的K8s或其他容器缩放工具,通过一个简单脚本就能实现,配置方便,在8核16GB内存的VPS上进行过测试,可支持数百个并发执行任务。
n8n Autoscaling System主要包含n8n主程序、Redis、自动缩放器、n8n工作容器、Redis监视器、PostgreSQL和n8n Webhook等组件。
n8n主程序将任务排入Redis队列,自动缩放器和Redis监视器会监控队列,自动缩放器依据队列长度对n8n工作容器进行缩放,PostgreSQL用于存储数据,n8n主程序还会通过Webhook发送信息到n8n Webhook。
1、动态缩放:能根据Redis队列长度,自动对n8n工作容器进行动态缩放。
2、可配置性强:可以自行设置缩放阈值和限制,满足不同使用场景需求。
3、队列监控:具备Redis队列监控功能,随时掌握队列状态。
4、部署便捷:基于Docker Compose进行部署,操作简单。
5、健康检查:对所有服务都有健康检查机制,能保障系统稳定运行。
使用n8n Autoscaling System需要先安装Docker和Docker Compose,新用户可以选择安装Docker桌面版,或者在Ubuntu系统上使用Docker便捷脚本。
1、将本仓库复制或克隆到你选定的文件夹。
2、在.env文件中配置环境变量,默认设置可以直接使用,建议设置新的密码和令牌,保障系统安全。
3、运行命令:docker compose up -d
,就能启动系统。
1、务必在.env文件中设置自己的密码和加密密钥。
2、默认情况下,每个工作容器一次处理10个任务,如果有需要,可以在docker-compose中修改N8N_CONCURRENCY_PRODUCTION_LIMIT=10
配置。
3、N8N_QUEUE_BULL_GRACEFULSHUTDOWNTIMEOUT=300
和N8N_GRACEFUL_SHUTDOWN_TIMEOUT=300
这两个参数,要设置得大于预期最长工作流执行时间(单位:秒)。
4、关键环境变量说明
变量 | 描述 | 默认值 |
---|---|---|
MIN_REPLICAS |
工作容器的最小数量 | 1 |
MAX_REPLICAS |
工作容器的最大数量 | 5 |
SCALE_UP_QUEUE_THRESHOLD |
触发扩容的队列长度 | 5 |
SCALE_DOWN_QUEUE_THRESHOLD |
触发缩容的队列长度 | 2 |
POLLING_INTERVAL_SECONDS |
检查队列长度的时间间隔 | 30 |
COOLDOWN_PERIOD_SECONDS |
两次缩放操作之间的冷却时间 | 180 |
QUEUE_NAME_PREFIX |
Redis队列前缀 | bull |
QUEUE_NAME |
Redis队列名称 | jobs |
5、n8n配置:需要确保n8n的这些环境变量已设置:
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_HEALTH_CHECK_ACTIVE=true
1、自动缩放器每隔POLLING_INTERVAL_SECONDS
检查一次Redis队列长度。
2、扩容条件:当队列长度大于SCALE_UP_QUEUE_THRESHOLD
,且当前工作容器数量小于MAX_REPLICAS
时,自动缩放器会增加工作容器数量。
3、缩容条件:当队列长度小于SCALE_DOWN_QUEUE_THRESHOLD
,且当前工作容器数量大于MIN_REPLICAS
时,自动缩放器会减少工作容器数量。同时,缩放操作会遵循冷却时间的设置,避免频繁缩放。
1、监控:系统自带Redis队列监控服务(redis-monitor
),通过Docker对所有服务进行健康检查没,自动缩放器还会记录详细日志,方便了解系统运行情况。
2、故障排查
查看容器日志:使用命令docker-compose logs [service]
。
验证Redis连接:运行docker-compose exec redis redis-cli ping
。
手动检查队列长度:执行docker-compose exec redis redis-cli LLEN bull:jobs:wait
。
Webhook URL示例:Webhook使用docker服务名而非本地主机名,例如:http://n8n-webhook:5678/webhook/d7e73b77-6cfb-4add-b454-41e4c91461d8
。