[ParkNav] 비관적락, 스핀락, 분산락 성능 테스트

Doyeon·2023년 4월 27일
1

[프로젝트] ParkNav

목록 보기
7/7
post-thumbnail

분산락은 스핀락과 달리 분산 환경에서 여러 서버 사이에서 락을 관리하기 위해 네트워크 통신을 필요로 합니다. 분산 환경에서 여러 서버 사이에서 락을 관리하기 위한 네트워크 통신은 로컬 네트워크보다 훨씬 느리기 때문에, 분산락을 이용할 경우 락 관리에 필요한 시간이 더 오래 걸릴 수 있습니다.

스핀락은 별도의 락 서버가 필요 없이, 락이 필요한 스레드가 직접 락을 요청하고 성공할 때까지 반복하여 검사하기 때문에 락 관리에 필요한 오버헤드가 적습니다. 따라서 스핀락이 분산락보다 더 빠른 결과가 나온것 같습니다.

비관적 락 기법은 현재 프로젝트와 같이 락이 필요한 코드 구간이 매우 짧은 경우에는 비관적 락 기법이 성능면에서 우수한 면을 보여주었지만, 동시에 많은 요청이 들어오면 데드락(deadlock)이 발생할 가능성도 있습니다. 또한, 특정 데이터에 락을거는 특성상 해당 로직의 추가적인 수정이 발생시 락의 위치를 바꾸거나 추가적인 락을 걸어야 하며, 완벽한 동시성 제어가 되지 않을 수 있다는 점이 있습니다.

Version2에서 시간대별 예약 현황 테이블을 만듦으로써 성능적인 면의 상승이 있었지만 동시성 제어가 실패하게 되면 이전 Version1보다 치명적일 수 있어 동시성 제어의 성능을 조금 잃더라도 전체적인 프로젝트의 안정성을 위해 Lettuce의 스핀락을 이용하게 되었습니다.


동시성 제어가 적용되지 않은 경우

  • 10자리가 있는 주차장에서 예약구역은 4자리로, 총 4대만 예약되어야 하나, 15개의 Thread 요청을 동시에 보냈을 때 10대 예약이 성공되어버렸다.

동시성 제어가 적용된 경우

  • 10자리가 있는 주차장의 예약구역은 4자리고, 15개의 Thread 요청을 동시에 보냈을 때 4대 예약만 정상적으로 성공된 것을 확인할 수 있다.
profile
🔥

0개의 댓글