본문 바로가기

카테고리 없음

TIL_2024_10_15(분산락)

지난번에 버전을 사용하는 낙관적 락과, 무조건 충돌이 일어난다고 가정하는 비관적 락에 대해서 알아보았습니다. 오늘은 그 두가지의 단점을 보완한 분산락에 대하여 알아보겠습니다.

 

분산락을 사용하는 이유: 여러 인스턴스나 서버가 동일한 자원에 접근하려고 할 떄 이들이 동시에 동일한 자원에 접근해 데이터가 손상되거나 일관성이 깨지는 문제가 발생 할 수 있습니다. 이를 해결하기 위해 하나의 인스턴스가 해당 자원을 먼저얻고(Lock) 작업이 끝나면 락을 해제해 다른 인스턴스가 자원에 접근할 수 있도록 하는 방식이 필요합니다. 이 과정에서 Redis를 사용할 수 있습니다.

 

왜 Redis인가?

1.속도가 빠릅니다

 

2.레디스는 단일 스레드로 동작하기 때문에 동시성 문제가 발생할 여지가 적습니다.

 

3.레디스는 이와 관련된 명령어를 통해 간단하게 분산락을 구현할 수 있습니다.

 

레디스에서는 어떤식으로 분산락을 구현하는가?

 

Redlock 알고리즘으로 구현 쉽게 설명하면 인스턴스가 최대로 락을 사용할수 있는 최대 시간을 설정해 한 인스턴스가 락을 획득한 후 작업을 진행하고 작업이 끝나거나 시간이 다되면 락을 해제해 다른 인스턴스가 락을 획득 할 수 있게합니다. 때문에 다른인스턴스들이 Redis에 지속적으로 요청을 보내야합니다. 이것때문에 속도가 빠른 Redis를 분산락에서 사용하는 것입니다.