inflearn logo
강의

Course

Instructor

2026! A Practical Guide to Redis for Backend Developers: From Basics to Real-World Patterns

Pattern 06: Distributed Lock - Solving Concurrency Issues

Redlock 알고리즘 관해 궁금한게 있습니다!

29

portalbj6372

2 asked

0

레디스 서버 한대가 죽더라도 락의 안전성을 보장하기 위해 3~5대의 다른 레디스 서버도 함꼐 있는거라면 이 서비스의 경우에는 레디스의 데이터를 모두 동기화시키는 작업이 매 요청마다 실행되는 건가요?

동기화 시키는 과정에서 TTL 에 작은 차이가 생길 수도 있디고 생각하는데 무시가능한 정도인지요??

동기화를 시키지 않는다면 또 그 여러대의 레디스 서버가 봐라봐야할 한 곳이 다시 존재하게 됨으로써 어짜피 똑같은 건 아닌지.. 궁금합니다!

아키텍처 redis FastAPI

Answer 2

0

codingpe

안녕하세요. 질문에 답변 드립니다.

1. Redis 노드들끼리 알아서 자동으로 동기화 되는 건 아니고, 클라이언트가 각 노드에 직접 SET NX PX 를 요청합니다. 즉 수동으로 동일한 값을 각 노드에 입력하는 것입니다. (Redis 노드들 끼리는 서로 전혀 모르는 사이입니다.)

2. 이렇게 하면 노드마다 미세한 시간 차가 생기는 게 맞습니다. 그래서 Redlock은 "설정 TTL - 락 획득에 걸린 시간"으로 실제 유효 TTL을 다시 계산하고, 이 유효 TTL안에 작업을 끝내도록 합니다. 만일 유효 TTL이 작업하기에 너무 짧으면 락 획득 자체를 포기합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. portal.bj님.

Redlock 알고리즘에 대한 질문을 주셨네요. Redlock은 분산 환경에서 Redis를 사용하여 안전한 락 메커니즘을 제공하기 위한 알고리즘입니다. 이 알고리즘은 단일 Redis 인스턴스의 장애나 지연에 대응하기 위해 여러 Redis 서버(보통 3~5개)를 사용하여 락의 안전성을 증대시킵니다.

Redlock 알고리즘의 기본 작동 원리:

  1. 다중 인스턴스: Redlock은 다수의 Redis 인스턴스에 락을 동시에 설정하여, 하나의 인스턴스가 실패하더라도 다른 인스턴스들이 이를 보완할 수 있도록 설계되었습니다.

  2. 동기화 필요 없음: 이 알고리즘은 각 인스턴스에 락을 독립적으로 설정하기 때문에, 인스턴스 간 데이터 동기화가 필요하지 않습니다. 락의 유일성과 만료 시간이 각 인스턴스에서 독립적으로 관리되므로 동기화로 인한 부하는 없습니다.

  3. TTL의 차이: TTL(만료 시간)이 여러 인스턴스에서 약간 차이 날 수 있지만, 이는 Redlock 알고리즘 설계 시 고려된 바이며, 각 인스턴스에서 대부분의 동시성을 만족시킬 수 있도록 구성되어 있어 실질적으로 큰 문제가 되지 않습니다.

  4. 분산 환경의 장점: 여러 인스턴스에 대한 접근 및 락 설정을 비슷한 시간 내에 완료하는 것이 핵심입니다. 동기화 작업 없이도 TTL 차이는 신뢰할 수 있는 동작을 수행하기에 무시 가능한 수준입니다.

Redlock에 대한 보다 심화된 내용을 다룬 기존의 자료나 논의를 보시려면, 다음의 관련 정보를 참고하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

라우팅 테이블 설정 중 궁금한게 있습니다.

0

26

1

user-service jwt

0

27

2

애그리거트 질문있습니다!

0

21

2

좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.

0

26

2

Agent Builder 서비스가 보이지 않아요

0

23

1

Build 관련 문제 (테스트 관련 문제)

0

30

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

33

2

게시글 테스트 데이터 삽입

0

41

2

강의가 검은 화면으로 나옵니다.

0

42

1

mysql 의 bitmap

0

32

1

주제영역3 데이타 조회 문의

0

30

2

인덱스 관련 질문 있습니다.

0

51

1

비관적 락 구현 방식 문의 건

0

58

2

강의노트는 제공 안해주시는 게 맞나요?

0

43

1

[개발 환경 준비 인증하기] 미션 제출 방법 문의

0

58

3

백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제

0

77

1

강사님 GETDEL 관련해서 질문 있습니다

0

84

2

미션 마감은 언제 되는 건가요?

0

55

1

비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우

0

72

2

보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요

0

55

2

29강 업로드 일정 문의드립니다.

0

45

2

Redis Container 해킹

0

99

1

동영상길이가 3초입니다.

0

51

1

기존에 학습했던 진도는 체크가 전부 풀려있습니다.

0

50

2