© 加速工具
jiasugongju#
outlook.com

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。

n8n Autoscaling System功能

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,就能启动系统。

n8n Autoscaling System详细配置

1、务必在.env文件中设置自己的密码和加密密钥。

2、默认情况下,每个工作容器一次处理10个任务,如果有需要,可以在docker-compose中修改N8N_CONCURRENCY_PRODUCTION_LIMIT=10配置。

3、N8N_QUEUE_BULL_GRACEFULSHUTDOWNTIMEOUT=300N8N_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

n8n Autoscaling System缩放机制

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