피드로 돌아가기
Designing a Scalable Recovery Service for Distributed Systems
Dev.toDev.to
Backend

Database Row-level Locking 기반의 확장 가능한 분산 복구 시스템 설계

Designing a Scalable Recovery Service for Distributed Systems

Jobinesh Purushothaman2026년 4월 12일5intermediate

Context

비동기 데이터 처리 중 발생하는 장애를 단순 In-memory Retry로 대응함에 따른 데이터 유실 및 가시성 부재 문제 발생. 서비스 크래시 시 진행 중인 재시도 작업이 소멸되는 구조적 한계와 무한 루프 진입 가능성으로 인한 시스템 불안정성 식별.

Technical Solution

  • 장애 컨텍스트와 Lifecycle Status를 분리 저장하는 Recovery Task Table 구축을 통한 상태 관리의 영속성 확보
  • SELECT FOR UPDATE SKIP LOCKED 쿼리 활용으로 별도의 Leader Election 없이 다수 Worker 간의 작업 중복 처리 방지
  • Business Logic과 Coordination Logic을 분리한 Handler 패턴 적용으로 Recovery 시스템의 범용성 및 재사용성 증대
  • Lock 정보와 Lifecycle Status의 개념적 분리를 통해 Race Condition을 원천 차단하고 상태 전이의 명확성 확보
  • Transaction 범위 내 작업 점유 및 결과 업데이트를 수행하여 원자적 상태 변경 보장
  • Idempotency 보장 Handler 설계를 통한 중복 실행 시의 데이터 무결성 유지

- 분산 환경의 작업 복구 시 Leader Election 대신 DB Row-level Locking 검토 - Recovery Task 설계 시 Lifecycle Status와 Execution Lock 필드를 엄격히 분리 - 재시도 로직 내 Handler의 Idempotency 구현 여부 검증 - 최대 재시도 횟수(Max Retry Limit) 정의 및 PERMANENT_FAILURE 상태 전이 로직 포함

원문 읽기