What are Workers?
Workers are Node.js processes that:- Consume jobs from Redis queue (BullMQ)
- Execute workflows using the execution engine
- Poll external APIs for scheduled triggers
- Renew webhooks for trigger subscriptions
- Process async tasks (emails, notifications)
Workers are separate from the API server, allowing independent scaling based on workload.
Worker Architecture
Worker Process Lifecycle
Job Types
Workers process different job types from the queue:1. ExecuteFlowJob
Purpose: Execute a workflow instanceTriggered by:Processing:
- Webhooks
- Manual runs
- Scheduled triggers
- Child flows
- Load flow version from database
- Spawn execution engine
- Pass flow definition and payload
- Collect execution result
- Save flow run to database
2. PollingJob
Purpose: Poll external API for new dataTriggered by: Cron schedule (default: every 5 minutes)Data:Processing:
- Load trigger configuration
- Call piece’s
onEnablehook - Fetch new items from API
- Deduplicate items
- Enqueue ExecuteFlowJob for each item
3. WebhookJob
Purpose: Process webhook payloadTriggered by: Incoming webhook HTTP requestData:Processing:
- Validate webhook signature
- Transform payload if needed
- Enqueue ExecuteFlowJob
4. RenewWebhookJob
Purpose: Renew webhook subscriptionsTriggered by: Cron schedule (before expiration)Data:Processing:
- Call piece’s renewal endpoint
- Update webhook registration
- Store new webhook URL/token
5. UserInteractionJob
Purpose: Handle human-in-the-loop tasksData:Processing:
- Resume paused flow run
- Continue from approval step
- Complete execution
Worker Configuration
Container Type
Control what runs in each container:- WORKER_AND_APP
- APP
- WORKER
Default: Both API and workers in one containerUse for:
.env
- Development
- Small deployments
- Single-server setups
docker-entrypoint.sh):Worker Concurrency
Number of jobs processed simultaneously per workerFormula:Trade-offs:
- CPU-bound workflows:
concurrency = CPU cores - I/O-bound workflows:
concurrency = CPU cores × 2-4
- Higher concurrency = more throughput
- Higher concurrency = more memory usage
- Too high = context switching overhead
Worker Token (Dedicated Workers)
Authentication token for dedicated worker deploymentsUsed to authenticate worker API calls to main app.
.env
BullMQ Integration
Activepieces uses BullMQ for job queue management.Queue Structure
Location:app/workers/queue/queue-manager.ts
Queue configuration:
Job Lifecycle
Job Priorities
Delayed Jobs
Repeating Jobs
Worker Scaling
Horizontal Scaling
Add more worker containers:docker-compose.yml
Kubernetes Scaling
Auto-scaling Rules
Scale based on queue depth:Monitoring Workers
Queue Metrics
Check queue health:Queue UI
Enable BullMQ Board for visual monitoring:.env
http://your-domain/admin/queues
Features:
- View waiting/active/failed jobs
- Retry failed jobs
- Remove jobs
- View job data and stack traces
- Queue statistics
Logs
Monitor worker logs:Metrics API
Activepieces exposes queue metrics:Performance Tuning
Redis Configuration
Optimize Redis for queue performance:redis.conf
Worker Optimization
Increase Concurrency
For I/O-bound workflows:
Pre-warm Cache
Load pieces into memory on startup:
Adjust Timeouts
Increase for long-running workflows:
Resource Limits
Set Docker resource limits:
Error Handling
Retry Strategy
BullMQ retries failed jobs automatically:Failed Job Retention
Configure how long to keep failed jobs:.env
Dead Letter Queue
After max retries, jobs move to failed queue:Best Practices
Separate APP and WORKER
Separate APP and WORKER
Use dedicated containers for production:Benefits:
- Independent scaling
- Resource optimization
- Better fault isolation
- Easier monitoring
Monitor Queue Depth
Monitor Queue Depth
Alert when queue grows:
Set Resource Limits
Set Resource Limits
Prevent memory leaks:
Enable Queue UI
Enable Queue UI
Visual debugging:
Troubleshooting
Jobs stuck in waiting
Jobs stuck in waiting
Symptoms: Jobs not processingCheck:
- Workers running:
docker ps | grep worker - Redis connection:
redis-cli ping - Worker logs for errors
High memory usage
High memory usage
Symptoms: Workers consuming too much RAMCheck:
- Worker concurrency:
AP_WORKER_CONCURRENCY - Workflow complexity
- Memory leaks in custom code
Jobs failing repeatedly
Jobs failing repeatedly
Symptoms: Many jobs in failed queueCheck:
- Failed job details in Queue UI
- Worker logs for stack traces
- External API availability
Next Steps
Engine
Understand execution engine
Scaling
Scale workers horizontally
Architecture
System architecture overview
Monitoring
Setup monitoring and alerts