요약
- 락을 설정할때, 다수의 인스턴스에 락을 잡고, 과반수이상 잡히게 되면 락이 잡힘
본문
필요성
- 단일 레디스 노드에서는 동시성 문제가 발생하지 않음
- 모든 명령을 단일 스레드로 처리함
- 레디스가 여러개로 늘어났을 때 문제가 될 수 있음
- RedLock 알고리즘을 사용함
- 여러 레디스 노드에 동일한 락을 설정하고, 과반수 이상에서 락 획득을 성공한 경우에만 작업을 허용하는 방식
총 4가지 방식으로 진행됨
- 다중 노드에 락 설정: 클러스터에 속한 다수의 Redis 인스턴스에 동시에 락을 설정을 시도함
SET resource_name random_value NX PX ttl - 특정 시간내에 과반수 이상의 Redis 인스턴스에서 락을 획득을 성공하면 락이 활성
- TTL 설정: 락이 설정될 때 TTL을 지정하여, 시간이 지나면 자동으로 락이 해제되도록 작업
- 락 해제: 작업 완료후, 획득된 락을 모든 Redis 노드에서 제거함
알려진 문제
- Fencing Token 부재: 단조 증가하는 fencing token을 생성하는 매커니즘이 없음
- 시간 의존성
- Redlock의 안정성은 Redis 노드들의 시계가 대략적으로 동기화 되어 있다는 가정에 의존함
- wall clock이 점프하면 여러 클라이언트가 동시에 락을 획득할 수 있음