오픈소스 · Go 1.26+ · Redis 6.2+

예약 작업을 모든 인스턴스에서 정확히 한 번만

chronos-go는 Go를 위한 Redis 기반 분산 태스크 큐·스케줄러입니다 — 타입 안전 태스크, 리더를 선출하는 스케줄러, 크래시 복구, 그리고 Chains & Groups.

Kubernetespod 1standbychronos-gopod 3standbychronos-gopod 2 · leaderchronos-go★Redisqueue + lockenqueue ×1worker runs it

chronos-go runs in every pod — only the leader (★) enqueues each trigger once; standby pods take over on failure.

기능

Go 백그라운드 작업에 필요한 모든 것

asynq의 현대적 대안 — 타입 안전하고, 분산되며, 안정적입니다.

타입 안전 제네릭 API

태스크 타입을 정의하고 Handler[T]를 등록하세요. interface{} payload도, 수동 unmarshal도 없습니다.

분산 스케줄러

interval·cron 작업. Redis 리더 선출로 각 트리거를 오직 한 인스턴스만 enqueue합니다.

기본으로 안정적

지수 백오프+지터, XAUTOCLAIM 크래시 복구, 훅이 달린 dead-letter.

Chains & Groups

순차 체인과 병렬 그룹, 단계 간 결과 전달까지.

Redis Cluster 안전

해시태그 키로 큐를 한 슬롯에 모아 멀티키 Lua가 원자적으로 유지됩니다.

관측성

메트릭, Inspector API, 그리고 큐·태스크용 chronos CLI.

왜 chronos-go인가

chronos-go vs asynq

asynq은 유지보수 모드입니다. chronos-go는 단순한 모델은 지키고 빈틈을 메웁니다.

asynqchronos-go
분산 스케줄러 (run-once)✗✓
제네릭 타입 안전 태스크✗✓
Stream·dead-letter 증가 제한—✓
장시간 처리 중 unique 락 갱신✗✓
활발한 유지보수maintenance✓

동작 원리

즉시 작업은 Streams, 시간 작업은 ZSET

즉시 작업은 Redis Stream을 타고, 지연·재시도·보관 태스크는 sorted set에 있습니다. forwarder가 도래한 항목을 승격하고, recoverer가 죽은 워커의 태스크를 회수합니다.

flowchart LR E["Enqueue"] --> S[("Redis Stream")] T["Delayed · retry · scheduled"] --> Z[("ZSETs")] Z -- "forwarder promotes due" --> S S --> W["Workers"] W -. "recoverer reclaims" .-> S

chronos-go를 써볼 준비가 되셨나요?

문서를 읽고 Go 서비스에 안정적인 백그라운드 작업을 추가하세요.

문서 읽기GitHubpkg.go.dev