Skip to content

RedLock으로 동시성 제어

ez edited this page Dec 4, 2024 · 3 revisions

RedLock이란?

RedLock이란 분산 환경에서 redis를 사용하여 Lock을 제공하는 분산 락 알고리즘입니다.

주로 여러 서버를 운영하는 환경에서 분산 환경에서 공유 자원에 대한 동시성을 제어하기 위해 사용합니다.

물론 저희 프로젝트는 분산 환경이라고 보기 어렵지만 동시성 문제를 해결하기 위해 RedLock을 적용했습니다.

프로젝트 변경 사항 갱신 플로우

저희 프로젝트에서는 웹 소켓을 통해 변경 사항을 받아서 이를 redis에 임시로 저장한 뒤 스케줄러를 통해 주기적으로 postgres에 반영하고 있습니다.

image

그리고 변경 사항을 반영할 때 redis의 값을 꺼내서 postgres에 반영한 뒤 메모리 절약을 위해 redis의 값을 삭제하고 있습니다.

이 과정 동안 redis에 대한 변경 사항을 막기 위해 RedLock 알고리즘을 통해 lock을 적용했습니다.

변경 사항 갱신 흐름

앞에서 말씀드렸던 것처럼 변경 사항 갱신 흐름은 다음과 같습니다.

  1. redis에 저장된 변경 사항 조회
  2. 변경 사항 postgres에 반영
  3. 메모리 절약을 위해 redis 변경 사항 삭제

그런데 2번과 3번 연산을 수행 도중 변경 사항이 발생할 경우 아래 그림처럼 변경 사항이 postgres에 반영되지 않을 수 있습니다.

즉 1, 2, 3번 연산을 수행하는 동안 redis에 대한 접근을 막아야 합니다.

이를 위해 lock을 적용했습니다.

변경 사항을 갱신하는 3개의 연산을 수행하기 전에 lock을 획득하고 수행이 끝난 뒤 lock을 해제합니다.

그리고 lock을 획득해야만 redis에 값을 갱신하는 작업을 수행할 수 있도록 합니다.

저희 OctoDocs 팀은 이렇게 RedLock을 적용하여 동시성 문제를 해결했습니다.

개발 문서

⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
🚧 트러블슈팅

팀 문화

🧸 팀원 소개
⛺️ 그라운드 룰
🍞 커밋 컨벤션
🧈 이슈, PR 컨벤션
🥞 브랜치 전략

그룹 기록

📢 발표 자료
🌤️ 데일리 스크럼
📑 회의록
🏖️ 그룹 회고
🚸 멘토링 일지
Clone this wiki locally