Zettelkasten

RedLock은 과반수 투표를 통해 락을 잡는다.

·수정 2026.04.23·수정 2

요약

  • 락을 설정할때, 다수의 인스턴스에 락을 잡고, 과반수이상 잡히게 되면 락이 잡힘

본문

필요성

  • 단일 레디스 노드에서는 동시성 문제가 발생하지 않음
    • 모든 명령을 단일 스레드로 처리함
  • 레디스가 여러개로 늘어났을 때 문제가 될 수 있음
  • RedLock 알고리즘을 사용함
    • 여러 레디스 노드에 동일한 락을 설정하고, 과반수 이상에서 락 획득을 성공한 경우에만 작업을 허용하는 방식

총 4가지 방식으로 진행됨

  1. 다중 노드에 락 설정: 클러스터에 속한 다수의 Redis 인스턴스에 동시에 락을 설정을 시도함 SET resource_name random_value NX PX ttl
  2. 특정 시간내에 과반수 이상의 Redis 인스턴스에서 락을 획득을 성공하면 락이 활성
  3. TTL 설정: 락이 설정될 때 TTL을 지정하여, 시간이 지나면 자동으로 락이 해제되도록 작업
  4. 락 해제: 작업 완료후, 획득된 락을 모든 Redis 노드에서 제거함

알려진 문제

  1. Fencing Token 부재: 단조 증가하는 fencing token을 생성하는 매커니즘이 없음
  2. 시간 의존성
    • Redlock의 안정성은 Redis 노드들의 시계가 대략적으로 동기화 되어 있다는 가정에 의존함
    • wall clock이 점프하면 여러 클라이언트가 동시에 락을 획득할 수 있음

이 문서를 참조하는 노트 (1)