[데이터베이스] 분산 락
분산 락
하나의 애플리케이션이 하나의 데이터베이스에 접근하는 경우 프로세스 내 멀티 스레드 환경에서 스레드 간 데이터 경합을 방지하기 위해 데이터 락을 신경써야 한다.
여러 애플리케이션이 하나의 데이터베이스에 동시적으로 접근하는 분산 시스템 아키텍처에서는 스레드 뿐만 아니라 프로세스 간 데이터 경합을 방지하기 위한 데이터 락이 필요하며 이러한 락을 분산 락(distributed lock)이라고 한다. 분산 락을 통한 적절한 동시 실행 제어 메커니즘이 없다면 데이터 비일관성 문제가 발생하게 된다.
분산 시스템에서 공유 데이터의 일관성 유지를 위해 프로세스의 작업을 동기화하기 위한 방법 또는 메커니즘을 분산 락 관리(distributed lock management)라고 하며 분산 락을 관리하는 역할을 수행하는 소프트웨어 컴포넌트를 분산 락 관리자(distributed lock manager)라고 한다.
분산 락 관리자는 하나의 프로세스가 공유 데이터에 대한 락을 획득하고 독점적으로(exclusive) 점유하여 사용하는 동안 다른 프로세스가 해당 데이터에 접근할 수 없도록 한다.
분산 시스템에서 적절한 동기화가 필요하지 않다면 낙관적 동시 실행 제어만으로도 충분하지만 분산 락이 필요하다면 더 복잡한 알고리즘을 사용한 동기화 메커니즘이 필요하다. 분산 락은 물리적으로 또는 논리적으로 분리된 네트워크 상에서 통신하는 프로세스 간 동기화를 위한 것이므로 프로세스 내 스레드 간 동기화를 위한 락 보다 오버헤드가 크며 구현의 복잡도가 높다.
CAP 정리
컴퓨터 과학에서 CAP 정리란, 일관성(consistency), 가용성(availability), 분할 허용성(partition tolerance) 모두를 동시에 지원하는 분산 컴퓨터 시스템은 없다는 것을 말한다.
분산 락 구현 방법
주키퍼
헤이즐캐스트 락 API
레드락 알고리즘
레디스 데이터베이스를 사용하여 분산 락 관리를 수행할 수 있다. 레디스는 분산 락의 표준 알고리즘을 제공하는데 이를 레드락(Redlock) 알고리즘이라고 한다.
참고
- https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
- https://redis.io/docs/latest/develop/use/patterns/distributed-locks/
- https://redisson.org/docs/data-and-services/locks-and-synchronizers/
- https://docs.hazelcast.com/imdg/4.2/data-structures/fencedlock
- https://docs.hazelcast.com/imdg/4.2/cp-subsystem/fencedlock
- https://redisson.org/glossary/java-fencedlock.html
Comments