분산 잠금 : RedLock 알고리즘

분산 잠금 기반 레디 스 단일 노드에 대한 우리의 마지막 기사는,이 단일 노드 문제는 실제로 꽤 큰 (가) 그것을 수행하는 방법을 서버 붕괴를 레디 스 있다면 ? 전체 사업을 냉각합니다. 우리가 일반적으로 더 레디 스 서버가 필요합니다 그래서 함께 잠금 장치를 배포했습니다.

알고리즘 과정

다섯 가지 주요 서버 완전히 독립적 인 레디 스이있다 가정하자

클라이언트를 잠금 (1) 요청은 현재 시간의 타임 스탬프를 얻기 위해 (또한 스레드가 있음 자세한 점을 말한다).

또한 각 서버가 사용 레디 스 각 클라이언트 는 단일 노드의 실시 락킹.

(2) 클라이언트가 동일한 키를 사용하려고하기 위해, 값 획득은 모든 잠금 레디 스 서비스도 값은 스레드 ID입니다 전에 말했다. 시간의 만료가 훨씬 작은 것보다 잠금 시간을 설정하는 잠금을 획득, 그것이 레디 스 서버를 끊었 경우, 클라이언트는 바보 후 시간 낭비이며, 기다려야하기 때문에 , 일반적으로 최소 설정 더이 시간보다, 다음 포기하는 경우, 대기 시간 것은 레디 스 서버 잠금하에 수행.

(3) 잠금이 획득 할 수 후 모든 시간을 얻을 수있는 첫 번째 단계를 차감하여 고객의 시간,이 시간 차이가 적은 TTL보다 (시간이 만료) 시간과 성공적인 레디 스의 적어도 세 가지 예는 진정한 성공이 자물쇠로 잠금 액세스 권한을 획득하다 . 시간 차이가 TTL보다 큰 경우이므로, 다음 잠금의 첫 번째 세트는 사용 기간이 만료 레디 스. 또한 반 레디 스이 작업에 갇혀보다 더 필요합니다.

(4) 잠금의 실질 실효 시간이 TTL을 뺀 시간이 세 번째 단계 사이의 시간 차이 잠금이 성공적으로 취득하는 경우이며, 예를 들면 : TTL은 5 초이며, 사실합니다 (2S, 실제 효과적인 잠금 시간 -3 모든 잠금을 얻을 다시해야 마이너스 클럭 드리프트);

(5) 클라이언트가 어떤 이유로 잠금을 획득하지 못할 경우, 모든 인스턴스를 레디 스의 잠금을 해제하기 시작합니다, 그렇지 않으면 잠금 다른 클라이언트 취득에 영향을 미치는, 세 개 미만의 잠금을 해제해야이 구입하기 수 있기 때문에

 

여부 RedLock 알고리즘은 비동기 알고리즘을 무엇입니까? ?

그것은 동기화 알고리즘으로 간주 될 수있다하더라도 동기 클록없이 (복수의 컴퓨터 중) 간하지만, 프로세스가 실질적으로 동일한 유속마다 때문에, 클록 드리프트는 무시 될 수 TTL에 비해 작다는 동기화 알고리즘을 알 수있다 ( 지구의 양쪽 끝에서 두 컴퓨터, 시계 편차가 매우 큰 경우 때문에하지 엄격한만큼, 알고리즘은), 클럭 드리프트를 계산합니다.

RedLock의 실패시 다시 시도

및 잠금 잠금의 적절한 릴리스에서 작업을 완료하기 위해 클라이언트에 인수 된, 잠금을 획득 할 수있는 클라이언트는 임의의 시간 후에 다시 시도해야 할 때 잠금을 획득하고, 바람직하게는 모든 인스턴스에 동일한 전송 시간 동시 set 명령 레디 스 이 시간을 절약하는 것입니다;

RedLock 릴리스 잠금

값을 심판 할 것이다 잠금이이 삭제 된 경우, 잠금을 해제하기 위해 자신의 시간을 설정하지 않기 때문에, 그래서 잠금을 해제하는 것은 매우 간단 때 한 명령이 잠금을 해제하기 위해 발행하는 모든 경우에 관계없이 잠금 해제의 성공;

RedLock주의 사항 (안전 인자) :

제 1 설정 명령 T1 내지 지난 후 설정된 명령 전에 (1) 가정 먼저 클라이언트가 동시에 만료 모든 인스턴스 모든 인스턴스는 서로 다른 시간에 발생할 수 동일한 키 만료 시간합니다 (TTL),하지만 세트 명령의 각각의 인스턴스를 포함하는 취득 최소 시간 T2,이 로크를 취득 유효한 클라이언트, TTL (T2-T1)은 - 클럭 드리프트;

(2) 내지 N / 2 + 1 (즉 절반 이상) 실시 예의 절반 미만이 성공 판정되는 경우, 클라이언트가 다수있을 수 있기 때문에, 취득한 로크 성공 성공적 발생 로크를 획득할지 여부를 결정하므로 로킹 효과 그 .

(3) 클라이언트 또는 잠금 만료 근처에 소요되는 시간, 잠금이 유효하지 않은 것으로 간주하고, 레디 스 예제 (사업을 실시하지 않음)의 잠금을 해제하는 것보다 더 큰 대부분의 경우 잠겨, 한 잠금이 성공적으로 더 TTL의 시간의 절반 이상 인수로 유효한 것입니다 잠금, 그렇지 않으면 무효.

시스템 특성 활성을 갖는

(1) 자동으로 잠금을 해제

이 자동으로 만료 될 때까지 (2) 자동으로 잠금이 획득에게 잠금 실패를 (절반 이하) 해제 또는 작업이 완료, 기다리지 않는다

로크 종래 아 (제 실패 재시도 간격의 제)을 얻었다 (3) 클라이언트 시도 소비 1 자물쇠 획득 시간보다 크다;

(4)을 특정하도록 로크를 획득하기위한 재시도 한계

관련 솔루션 RedLock 성능 및 응급 복구

(1) 레디 스 영속 기능이 clientA의 잠금 성공을 취득하는 경우, 모든 레디 스 그렇게 독점 상호 배타적 잠금을 위반하는, clientB 잠금을 다시 얻을 수있을, 다시 시작, 예를 들어 지금은 5 레디 스, 이제이있는 잠금 장치는 두 개의 잠금 팀은 다시 스레드가 세 번 봐가 얻을 수있을 것입니다, 자물쇠를 가져, 왼쪽, 튕겨 중 하나 세, 차지합니다.

(2) AOF 영구 저장을 시작하면 상황이 더 나은 것, 예를 들어 : 비즈니스에 영향을주지 않습니다, 우리는 인해 만료, 레디 스를 다시 시작하면 그래서 다시 시작한 후, 이동 타임 스탬프 유닉스에 따라 메커니즘 레디 스하고, 규정 된 시간에 따라 만료됩니다 ;하지만 때문에 기본적으로 초당 디스크에 동기화 방식 AOF의 - 두 번 일초 내에서 정전이 데이터가 손실 될 경우, 즉시 재시작는 상호 배타적 잠금에 실패 할 수 있지만 당신은 동기 디스크 모드 항상 (모든 쓰기를 사용하는 경우 명령은 성능의 급격한 하락의 결과로) 하드 디스크에 동기화됩니다, 그래서 완전한 잠금의 효과와 성능이 선택을해야; 

(3) 효과와 효율적인 성능 전체 잠금, 심지어 정전 방법을 모두 확보 할 수있는 효과적인 솔루션은 어떤 이유 레디 스에서 초당 기본 디스크를 유지하는 방법을 동기화 레디 스되고, (의 TTL 시간 후 다시 시작한 후에 기다려야 중지 학명 : 재시작 지연 ); 단점은 TTL 시간에 상응하는 서비스가 중지 상태이다;

개요

(1) TTL 기간은 정상 업무가 + 서비스 수행보다 더 오래해야합니다 모든 레디 스 + 클럭 드리프트를 얻기 위해 시간이 많이 소요

(2) 훨씬 적은 TTL 이상 소요되는 모든 서비스 레디 스 시간 가져 오기 및 잠금의 수는 일반적으로 총 위의 성공을 획득 : N / 2 + 1

(3)마다 획득 시도 레디 스 인스턴스 잠금 훨씬 덜 때 TTL보다

제한의 특정 번호 (4) 모든 잠금이 실패 취득하려고 후이 시도되어야한다

(5) (의 여부에 관계없이 하나 또는 모두) 레디 스 붕괴 후 TTL 시간 재시작 레디 스 지연

(6)는 다중 노드에 공통 달성 단일 노드 분산 로크 알고리즘과 함께 레디 스

게시 된 134 개 원래 기사 · 원의 찬양 (91) · 전망 160 000 +

추천

출처blog.csdn.net/weixin_44588495/article/details/104570594