레디스 분산 락이란?
레디스(Redis) 분산 락은 여러 컴퓨터 또는 프로세스 간에 자원의 동시 접근을 제어하기 위한 메커니즘
입니다.
분산 시스템에서 여러 노드가 동일한 자원에 접근
하려 할 때, 일관성과 순서를 유지하면서 동시성 문제를 해결
하는 데 쓰입니다.
레디스 분산 락의 필요성
- 동시성 관리: 복수의 인스턴스가 동일한 데이터를 동시에 수정하려 할 때, 데이터 불일치를 방지합니다.
- 일관성 유지: 분산 시스템 내에서 데이터의 일관성을 유지하며, 작업의 순서를 보장합니다.
- 데드락 방지: 데드락을 감지하고 해결하는 메커니즘을 제공합니다.
레디스 분산 락의 작동 원리 ( Redisson )
- 락 회득: Redisson은 Lua 스크핍트를 사용하여 락을 획득합니다. 이 스크립트는 락키가 존재하지 않는 경우에만 락 키를 생성하고, 이 키에 대한 유효 시간 (TTL)을 설정합니다.
이로 인해 서버나 애플리케이션에 문제가 발생하여 락을 해제하지 못하는 경우에도 설정된 유효 시간 이후에 자동으로 락이 해제됩니다.
- 레디스 키의 유효기간: 락을 회득 시 레디스 키에 유효기간을 설정하여 락 획득자가 특정 시간 안에 작업을 완료하지 못하면 락이 자동으로 해제되도록 합니다.
이를 통해 데드락을 방지합니다.
- 락 재진입: Redisson은 동일한 락을 여러번 회득 할 수 있는 재진입 가능한 락을 지원합니다.
Lua 스크립트는 락을 요청하는 쓰레드나 인스턴스가 이미 락을 보유하고 있는지를 확인하고 만약 락을 가지고 있다면 락 획득 요청을 허용하여 재진입을 가능하게 합니다.
- 락 해제: 락을 해제할 때도 Lua 스크립트를 사용하여 락 획득자만이 락을 해제할 수 있도록 합니다.
스크립트는 락 획득자의 식별자와 저장된 식별자가 일치하는지 확인하고, 일치할 경우에만 락을 해제합니다.
- Pub/Sub 메커니즘: 락이 사용 중일 때 다른 프로제스가 락을 획득하기 위해 대기해야하는 경우, Redisson은 Redis의 발행/구독(pub/sub) 기능을 사용하여 락이 해제될 때까지 대기 중인 프로세스에게 알림을 전달합니다.
→ 모든 작업이 Lua 스크립트를 통해 원자적으로 처리되기에 분산 환경에서도 높은 성능과 일관성을 유지하여 락을 안전하게 관리할 수 있습니다.
레디스 분산 락의 특징
- 성능: 레디스는 인-메모리 데이터 스토어로, 빠른 성능을 제공합니다.
- 가용성: 레디스 클러스터를 통해 고가용성을 보장하고, 노드 장애가 발생해도 락 기능이 지속됩니다.
- 확장성: 큰 트래픽과 데이터 셋에도 확장이 가능합니다.
구현 시 고려사항
- 락의 안전성: 장애 상황에서 락이 안전하게 해제되는지 확인해야 합니다.
- 락의 성능: 락이 시스템의 성능에 미치는 영향을 평가합니다.
- 락 해제 메커니즘: 락을 안전하게 해제할 수 있는 메커니즘이 필요합니다.
- 시계 동기화: 분산 시스템의 서로 다른 노드 간 시계 동기화 문제를 고려해야 합니다.
프로젝트[카프카 분산 환경]에서 가장 적합한 락은?
카프카를 활용하는 다수의 서버가 존재하는 환경
에서 데이터베이스 또는 애플리케이션 레벨의 락은 몇 가지 한계점을 드러냅니다.
카프카는 분산 스트리밍 플랫폼으로, 높은 처리량과 메시지 순서의 정확성을 목표로 설계되었습니다.
개별 파티션 내에서는 이러한 목표를 효과적으로 달성하지만, 다수의 파티션에 걸쳐 병렬로 처리될 때 전체 시스템의 일관성 유지는 쉽지 않은 과제가 됩니다.
데이터베이스 락
은 일관성을 위해 필수적이긴 하지만 병렬 처리 환경에서 성능 저하와 시스템 복잡도의 증가라는 대가를 치르게 됩니다.
애플리케이션 레벨의 락
도 코드 복잡도를 높이고, 데드락과 같은 부작용을 초래할 위험이 있습니다. 특히 분산 환경에서는 여러 인스턴스 간의 상태 동기화에 있어서 이러한 전통적인 락 방식이 한계를 보이는 경우가 많습니다.
이에 반해 레디스를 활용한 분산 락
은 분산 시스템 상에서의 서비스 인스턴스 간 동기화 문제에 효과적인 해결책을 제시합니다.
레디스는 인-메모리 데이터 스토어로서, 빠른 처리 속도와 함께 대규모 트래픽을 관리할 수 있는 안정적인 성능을 자랑합니다.
이를 통해 카프카의 병렬 처리 능력을 유지하면서도 레디스의 신속한 데이터 액세스 능력과 결합해, 동시성 문제를 효과적으로 해결하고 시스템의 전반적인 성능을 최적화
할 수 있는 방안을 제공합니다.
프로젝트 내 카프카 및 레디스 분산락 구현 흐름도
