Currently, updo creates one goroutine per target for concurrent monitoring. While this works well for typical usage, it can be problematic for deployments with hundreds of targets or in resource-constrained environments.
Current behavior
- One goroutine per target (unlimited parallelism)
- All targets checked simultaneously
- No control over concurrent request limits
Use cases for parallelism control
- High-scale deployments: Monitoring hundreds of targets may overwhelm networks or hit rate limits
- Resource-constrained environments: Containers with limited CPU/memory need bounded concurrency
- Rate limiting compliance: Some services require limiting concurrent requests
- Network bandwidth management: Controlling simultaneous outbound connections
Proposed implementation
Add --parallelism N flag and config option:
- Limit concurrent HTTP requests to N
- Maintain individual target timing schedules
- Default to unlimited (current behavior) for backward compatibility
Technical approach
Replace current per-target goroutines with a worker pool pattern that limits concurrent HTTP requests while maintaining individual target timing schedules.
Currently, updo creates one goroutine per target for concurrent monitoring. While this works well for typical usage, it can be problematic for deployments with hundreds of targets or in resource-constrained environments.
Current behavior
Use cases for parallelism control
Proposed implementation
Add
--parallelism Nflag and config option:Technical approach
Replace current per-target goroutines with a worker pool pattern that limits concurrent HTTP requests while maintaining individual target timing schedules.