← 질문 목록
#12깊이 0
Redis 분산 락의 스핀과 Pub/Sub 방식 차이는?
스핀 락은 풀릴 때까지 계속 두드린다. Pub/Sub은 풀렸다는 신호가 올 때까지 기다린다.
- 1. 클라이언트에서 Redis로: 락 획득 시도
- 2. Redis에서 클라이언트로: 실패 (Retry loop)
- 3. 클라이언트에서 Redis로: 락 획득 시도
스핀 락의 반복 요청은 Redis 부하를 키운다.
스핀 락은 구현이 단순하지만, 락을 획득하지 못했을 때 계속해서 Redis에 요청을 보내므로 CPU와 네트워크 부하가 발생한다.
반면 Pub/Sub 방식은 락 구현(예: Redisson)이 해제할 때 알림을 발행해 불필요한 요청을 줄인다. 알림은 유실될 수 있어 대기자는 시간 제한을 두고 다시 확인한다. 폴링은 풀렸는지 계속 두드리지만 Pub/Sub은 풀릴 때 깨운다.
경합이 심할수록 헛된 왕복이 줄어든다. 대신 구독을 관리하는 비용이 붙는다.
두 방식 모두 TTL과 장애 시 락 안전성을 따로 확인해야 한다.