Redisson
Why Redisson?
큐를 사용한 DB 적재 로직을 개발을 진행하면서, 동기화에 대한 처리가 필요하여 이를 해결할 수 있는 방법을 모색하다 분산락을 고민하게 되었다.
멀티 인스턴스 상황에서 락을 공유하는 방법은 결국 특정 스토리지를 참조하고 이를 통하여 락을 구현하는 방법밖에 없다고 생각이 들었고, 이에 따라 개발환경에 셋팅이 되어 있는 레디스를 활용하는 쪽으로 방향을 잡았다.
위 문서에서는 레디스를 활용한 락에 대한 구현을 설명하고 있는데 요약하자면 아래와 같다.
- Redis를 사용하여 리소스를 잠그는 가장 간단한 방법은 인스턴스에서 키를 만드는 것
- 이 키는 일반적으로 Redis expires 기능을 사용하여 제한된 수명으로 생성되므로 결국 키가 해제됨. 클라이언트는 리소스를 해제해야 할 때 해당 키를 삭제 처리
레디스 인스턴스가 장애가 발생하는 상황(SPOF)이라면, 레디스 클러스터를 사용하여 슬레이브가 마스터로 승격이 되는 상황에 키에 대한 락 잠금 키에 대한 중복 생성이 생길 수 있다. 클러스터 설정에 따라 다르겠지만, 이럴 경우를 대비하여 클러스터 각 노드에 리플리케이션 노드까지 붙인다면 이에 대한 적절한 솔루션이 될 수 있다고 한다.