Escalabilitat i Producció
7.1. Queue Mode amb Redis
Configuració:
# docker-compose.yml
services:
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
- redis_data:/data
n8n-main:
image: n8nio/n8n
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=0
ports:
- "5678:5678"
n8n-worker-1:
image: n8nio/n8n
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
n8n-worker-2:
image: n8nio/n8n
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
n8n-worker-3:
image: n8nio/n8n
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
Avantatges: - ✅ Execucions distribuïdes - ✅ Alta disponibilitat - ✅ Escalat horitzontal (afegir workers) - ✅ Isolation (worker crashes no afecten altres)
7.2. Optimització de workflows
Best practices:
1. Batch processing:
2. Caching:
[Check Redis Cache]
↓ miss
[Fetch from API] (slow)
↓
[Store in Cache: TTL 3600s]
↓
[Use cached data] (fast)
3. Parallel execution:
[Main Flow]
├─ [Branch 1: Process A] ─┐
├─ [Branch 2: Process B] ─┤
└─ [Branch 3: Process C] ─┴─> [Merge Results]
4. Evitar nested loops:
❌ Mal:
[Loop 1000 users]
└─> [Loop 100 orders per user] = 100,000 iterations
✅ Bé:
[Get all orders for all users: 1 query]
└─> [Group by user: 1 operation]
7.3. Monitoratge
Mètriques clau:
// Workflow execution metrics
{
workflow_id: "abc123",
execution_id: "exec_456",
start_time: "2026-02-09T10:00:00Z",
end_time: "2026-02-09T10:05:23Z",
duration_ms: 323000,
status: "success", // or "error"
nodes_executed: 12,
items_processed: 5000,
error_count: 0,
retry_count: 1
}
Alertes:
[Workflow Complete]
↓
[IF: Duration > 5min OR Errors > 0]
↓ true
[Slack: Alert DevOps]
Message: "⚠️ Workflow {{$workflow.name}} took {{$json.duration}}ms"
↓
[PagerDuty: Create Incident]
Log streaming:
environment:
- N8N_LOG_LEVEL=info
- N8N_LOG_OUTPUT=file
- N8N_LOG_FILE_LOCATION=/var/log/n8n/
# Filebeat config
filebeat.inputs:
- type: log
paths:
- /var/log/n8n/*.log
output.elasticsearch:
hosts: ["elasticsearch:9200"]
7.4. CI/CD
Export workflows:
# Exportar workflow
curl -X GET http://localhost:5678/api/v1/workflows/123 \
-H "X-N8N-API-KEY: $API_KEY" > workflow.json
# Importar workflow
curl -X POST http://localhost:5678/api/v1/workflows \
-H "X-N8N-API-KEY: $API_KEY" \
-H "Content-Type: application/json" \
-d @workflow.json
Git integration:
# Structure
repo/
├── workflows/
│ ├── etl_sales_daily.json
│ ├── sync_customers.json
│ └── reports_weekly.json
├── credentials/ (encrypted)
└── .github/workflows/
└── deploy.yml
# GitHub Actions
name: Deploy N8N Workflows
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to N8N
run: |
for workflow in workflows/*.json; do
curl -X POST $N8N_URL/api/v1/workflows \
-H "X-N8N-API-KEY: ${{ secrets.N8N_API_KEY }}" \
-d @$workflow
done