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

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

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

Kubernetespod 1standbychronos-gopod 3standbychronos-gopod 2 · leaderchronos-goRedisqueue + 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