Files
goplt/docs/adr/0024-job-scheduler.md
0x1d 6a17236474 docs: add implementation plan, ADRs, and task tracking system
- Add comprehensive 8-phase implementation plan (docs/plan.md)
- Add 28 Architecture Decision Records (docs/adr/) covering all phases
- Add task tracking system with 283+ task files (docs/stories/)
- Add task generator script for automated task file creation
- Add reference playbooks and requirements documentation

This commit establishes the complete planning foundation for the Go
Platform implementation, documenting all architectural decisions and
providing detailed task breakdown for Phases 0-8.
2025-11-04 22:05:37 +01:00

1.5 KiB

ADR-0024: Background Job Scheduler

Status

Accepted

Context

The platform needs background job processing for:

  • Periodic tasks (cron jobs)
  • Asynchronous processing
  • Long-running operations
  • Retry logic for failed jobs

Options considered:

  1. asynq (Redis-based) - Simple, feature-rich
  2. cron + custom queue - Build our own
  3. Kafka consumers - Use event bus
  4. External service - AWS SQS, etc.

Decision

Use asynq (Redis-backed) for job scheduling:

  1. Cron jobs: github.com/robfig/cron/v3 for periodic tasks
  2. Job queue: github.com/hibiken/asynq for async jobs
  3. Storage: Redis (shared with cache)
  4. Features: Retries, backoff, job status tracking

Rationale:

  • Simple, Redis-backed (no new infrastructure)
  • Good Go library support
  • Built-in retry and backoff
  • Job status tracking
  • Easy to integrate
  • Can scale horizontally (multiple workers)

Consequences

Positive

  • Simple (uses existing Redis)
  • Feature-rich (retries, backoff)
  • Good performance
  • Easy to scale
  • Job status tracking

Negative

  • Tied to Redis (but we're already using it)
  • Requires Redis to be available

Implementation Notes

  • Install: github.com/hibiken/asynq and github.com/robfig/cron/v3
  • Create pkg/scheduler/scheduler.go interface
  • Implement internal/infra/scheduler/asynq_scheduler.go
  • Register jobs in internal/infra/scheduler/job_registry.go
  • Start worker in fx lifecycle
  • Configure retry policies (exponential backoff)
  • Add job monitoring endpoint