Redlock 알고리즘 관해 궁금한게 있습니다!
29
2 asked
레디스 서버 한대가 죽더라도 락의 안전성을 보장하기 위해 3~5대의 다른 레디스 서버도 함꼐 있는거라면 이 서비스의 경우에는 레디스의 데이터를 모두 동기화시키는 작업이 매 요청마다 실행되는 건가요?
동기화 시키는 과정에서 TTL 에 작은 차이가 생길 수도 있디고 생각하는데 무시가능한 정도인지요??
동기화를 시키지 않는다면 또 그 여러대의 레디스 서버가 봐라봐야할 한 곳이 다시 존재하게 됨으로써 어짜피 똑같은 건 아닌지.. 궁금합니다!
Answer 2
0
안녕하세요. 질문에 답변 드립니다.
1. Redis 노드들끼리 알아서 자동으로 동기화 되는 건 아니고, 클라이언트가 각 노드에 직접 SET NX PX 를 요청합니다. 즉 수동으로 동일한 값을 각 노드에 입력하는 것입니다. (Redis 노드들 끼리는 서로 전혀 모르는 사이입니다.)
2. 이렇게 하면 노드마다 미세한 시간 차가 생기는 게 맞습니다. 그래서 Redlock은 "설정 TTL - 락 획득에 걸린 시간"으로 실제 유효 TTL을 다시 계산하고, 이 유효 TTL안에 작업을 끝내도록 합니다. 만일 유효 TTL이 작업하기에 너무 짧으면 락 획득 자체를 포기합니다.
0
안녕하세요, 인프런 AI 인턴입니다. portal.bj님.
Redlock 알고리즘에 대한 질문을 주셨네요. Redlock은 분산 환경에서 Redis를 사용하여 안전한 락 메커니즘을 제공하기 위한 알고리즘입니다. 이 알고리즘은 단일 Redis 인스턴스의 장애나 지연에 대응하기 위해 여러 Redis 서버(보통 3~5개)를 사용하여 락의 안전성을 증대시킵니다.
Redlock 알고리즘의 기본 작동 원리:
다중 인스턴스: Redlock은 다수의 Redis 인스턴스에 락을 동시에 설정하여, 하나의 인스턴스가 실패하더라도 다른 인스턴스들이 이를 보완할 수 있도록 설계되었습니다.
동기화 필요 없음: 이 알고리즘은 각 인스턴스에 락을 독립적으로 설정하기 때문에, 인스턴스 간 데이터 동기화가 필요하지 않습니다. 락의 유일성과 만료 시간이 각 인스턴스에서 독립적으로 관리되므로 동기화로 인한 부하는 없습니다.
TTL의 차이: TTL(만료 시간)이 여러 인스턴스에서 약간 차이 날 수 있지만, 이는 Redlock 알고리즘 설계 시 고려된 바이며, 각 인스턴스에서 대부분의 동시성을 만족시킬 수 있도록 구성되어 있어 실질적으로 큰 문제가 되지 않습니다.
분산 환경의 장점: 여러 인스턴스에 대한 접근 및 락 설정을 비슷한 시간 내에 완료하는 것이 핵심입니다. 동기화 작업 없이도 TTL 차이는 신뢰할 수 있는 동작을 수행하기에 무시 가능한 수준입니다.
Redlock에 대한 보다 심화된 내용을 다룬 기존의 자료나 논의를 보시려면, 다음의 관련 정보를 참고하시면 도움이 될 것입니다:
- Redis Cluster와 Redlock 사용법: 이곳에서는 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
34
2
게시글 테스트 데이터 삽입
0
41
2
강의가 검은 화면으로 나옵니다.
0
42
1
mysql 의 bitmap
0
32
1
주제영역3 데이타 조회 문의
0
30
2
인덱스 관련 질문 있습니다.
0
51
1
비관적 락 구현 방식 문의 건
0
60
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

