2014-10-23 11 views
0

분산 클러스터에서 내용을 읽는 방법을 소개 할 수 있습니까?paxos 기반 분산 클러스터에서 읽기 수행

나는 Paxos 알고리즘에 의해 일관성이 보장되는 분산 클러스터가 있음을 의미합니다.

실제 응용 프로그램에서 클라이언트는 클러스터에 작성한 내용을 어떻게 읽습니까?

예를 들어 5 서버 클러스터에서 네트워크 지연 등으로 인해 최신 데이터를 얻은 서버가 3 개이고 다른 2 개는 오래된 데이터를 가지고있을 수 있습니다.

클라이언트가 모든 노드의 과반수 이상을 읽어야한다는 의미입니까? 5 서버의 경우 최소 3 대의 서버에서 데이터를 읽은 다음 최신 버전의 데이터를 확인합니다.

그렇다면 3 권을 읽어야하므로 상당히 느립니다. 현실 세계는 어떻게 이것을 구현합니까?

+0

클라이언트가 여러 노드에서 읽는 경우 메시지가 손실, 복제, 지연, 재정렬 될 수 있다는 사실을 처리해야합니다. 클러스터가 단지 키 - 값 저장소 (map)를 복제하고 있고 3 개의 노드에'getKey (1)'을 요청했고 복제 지연 때문에'null','10','4'라고 세 번에 세 개의 응답을 얻었을 때를 상상해보십시오 노드와 클라이언트에서 클러스터 노드로의 메시지 지연 간의 차이. 그래서 당신은 반드시 필사자의 리더 형태를 읽어야하고 그것이 주도하는 시점에서 여전히 주인임을 알기 위해 리드는 클러스터의 대다수와 메시지를 교환해야합니다. – simbo1905

답변

1

고객은 리더로부터 읽어야합니다. 노드가 리더가 아님을 알면 클라이언트를 리더로 리디렉션해야합니다. 노드가 누가 리더인지 알지 못하면 오류를 던져야하며, 클라이언트는 알려 지거나 리더를 찾을 때까지 임의로 다른 노드를 선택해야합니다. 노드가 리더라고 생각하면 로컬 상태에서 읽기를 반환하는 것이 위험합니다. 대용량 실속 (CPU로드, IO 스톨, VM 오버로드, 대형 gc , 일부 백그라운드 작업, 서버 유지 보수 작업 ...) 클라이언트에 회신하는 동안 실제로 리더십을 잃어 버리고 오래된 읽기를 제공합니다. 이것은 읽으려는 (다중) Paxos 라운드를 실행하여 피할 수 있습니다.

램 포트 시계 및 벡터 시계는 다른 컴퓨터에서 실행되는 작업 B보다 먼저 해당 작업 A를 지정하는 메시지를 전달해야한다고 말합니다. 그렇지 않은 경우에는 동시에 실행됩니다. 이것은 클러스터의 대다수와 메시지를 교환하지 않고 지도자로부터의 읽기가 부실하다고 말할 수없는 이유에 대한 이론적 토대를 제공합니다. 메시지 교환은 읽기와 다음 쓰기 ("장애가 발생하여 새 리더에서 발생할 수 있음")의 "일어난"관계를 설정합니다.

리더 자체는 수락 자일 수 있으므로 3 노드 클러스터에서는 (다중) Paxos 라운드를 완료하기 위해 다른 노드의 응답 하나만 있으면됩니다. 병렬로 메시지를 보내고 첫 번째 응답을받을 때 클라이언트에 응답 할 수 있습니다. 노드 간 네트워크는 클러스터 내 트래픽 (클라이언트가 얻을 수있는 최상의 성능)에 전념하여 클라이언트에 많은 대기 시간을 추가하지 않아야합니다.

충돌 시나리오가 논의 된 곳에서 부실 읽기 또는 재정렬 된 쓰기를 허용 할 수없는 잠금 서비스에 대해 Paoxs를 사용할 수있는 방법을 설명하는 답변이 some questions about paxos에 있습니다. 잠금 서비스에서 잠금에 대한 읽기 및 쓰기가 가능하지 않음 " 동시에 "따라서 각 클라이언트 메시지에 대해 (다중) Paxos 라운드를 수행하여 클러스터 전체에서 읽기 및 쓰기를 엄격하게 명령합니다.