2016-10-07 7 views
8

다른 노드의 노드 사이에 링크를 생성하여 연결된 노드 그룹을 병합하여 새로운 그룹을 형성 할 수있는 알고리즘을 찾고 있습니다. 또한 그룹을 분할하여 새로운 파티션을 만들 수 있습니다.강력하게 일관된 그룹 구성원 프로토콜이 있습니까?

파티셔닝 후에 하나의 그룹 만 남을 수있는 합의 프로토콜 스타일 (예 : 뗏목 신문에 설명 된 합의 프로토콜)과 달리 새 파티션을 만들 때마다 새로운 그룹을 구성하고 싶습니다.

또한 저는 각 파티션에 대해 각 멤버가 강력한 일관성 보장을 통해 해당 파티션에 속한 것에 동의 할 것이라고 생각합니다.

다른 말로하면 다음 속성을 보유하고 싶습니다. 그룹이 멤버십 변경을 겪은 후에 원래 그룹에 속한 두 노드가 여전히 통신 할 수 있으면 (둘 사이에 경로가 있음) 그룹에 일어난 일련의 변화에 ​​동의한다.

각 새로운 파티션이 의미에서 다른 구성원 집합에 동의한다는 사실은 CAP 정리의 일관성 부분이 완화된다는 것을 의미합니다. 그러한 프로토콜이 존재할 수 있기를 바랍니다 (?).

답변

1

다중 그룹 구성원 프로토콜을 개발하기 위해 합의 된 프로토콜 (예 : Paxos, Raft 등)을 활용할 수 없습니다. 이것은 모든 합의 의정서가 다수의 회원국이 동의 한 경우에만 결정이 내려 질 수 있다는 근본적인 생각에 근거하고 있기 때문이다. 이 방법으로, "split-brain"현상은 피하게됩니다. 왜냐하면 다른 리더 (그리고 회원 세트)에 동의 한 2 개의 파티션 (대다수보다 큰 크기의 파티션)이 존재할 수 없기 때문입니다. 두 파티션의 회원이 될 것이며 하나의 파티션 (투표를 먼저 요청한 파티션)에 대해서만 투표했을 것입니다.

다중 그룹 구성원 프로토콜을 만들기 위해 활용할 수있는 프로토콜은 Virtual Synchrony입니다. 그러나 가상 동기화는 메시지를 (정적으로) 미리 정의 된 프로세스 그룹, 즉 이러한 그룹의 현재 기존 구성원에게 보내는 데 사용되는 프로토콜입니다. 결과적으로 새 파티션마다 새 프로세스 그룹을 (동적으로) 작성해야하는 경우에는 적합하지 않습니다. 가상 대기열은 메시지 대기 시간이 그룹 크기에 비례하므로 더 큰 구성원으로 확장되지 않는 프로토콜입니다.

나는 그룹이 회원 변화를 겪는다 후 두 개의 노드가 원래 그룹에 속한 그 경우 가상 동시성 프로토콜을 사용하여, 당신은 조건을

를 만족시킬 수있는 등 회원 프로토콜을 개발할 수 있다고 생각 여전히 (둘 사이의 경로가) 통신 할 수 있습니다, 그들은

그러나 그룹에 일어난 변화의 순서에 동의,이 회원은 엄격한 의미에서 강하게 일치하지 않는 점에 유의해야 실패 때문에 결국 노드 내부에서 전파 될 수 있습니다. . 그럼에도 불구하고 메시지 배달 (가장 중요한 것은)은 이러한 배달이 그룹의 회원 자격을 따르는 방식으로 전달됩니다. 이것은 회원 측에서 메시지 전달에 대한 명령을 강요함으로써 달성됩니다. 실제 구현이 같은 Consul로, 업계에서 다양한 도구에 통합되면서


회원 프로토콜에 대한 또 다른 접근 방법은, gossip-based membership protocols 있습니다.이 접근법을 활용하기 위해 모니터링하려는 다른 그룹에 따라 각 구성원에서 여러 가지 메시지 클래스를 내보낼 수 있습니다. 그러나이 그룹은 다시 프로토콜 내에서 정적으로 정의되고 결국 일관성을 유지합니다. 즉, 모든 실패가 모든 라이브 구성원에 의해 마침내 감지됩니다. 결론적으로


, 난 당신이 실패한 구성원 정말 - 정말 느린 응답 회원 (기초 구별 할 수 있기 때문에 강력한 일관성있는 회원 프로토콜, 엄격한 정의의 실현이 아니라고 생각 FLP 및 CAP 정리).

+0

고맙지 만 그래도 동의어라는 단어를 사용하지 않은 이유는 하나의 그룹 만 남을 수 있기 때문입니다. Virtual Synchrony가 정적으로 미리 정의 된 노드 집합을 필요로한다는 것을 알지 못했기 때문에 흥미 롭습니다. "_... 그리고 이것들은 훨씬 더 복잡해서 post_에 대해 자세히 설명 할 수 있습니다."나는 운이 좋다면 google + 뭔가 높은 수준의 설명이있는 링크 또는 알고리즘의 이름이 필요하다고 말해야합니다 (예 : 컨센서스 알고리즘에 대해 물어 본 누군가에게 뗏목 논문에 대한 깊은 설명은 기대하지 않을 것이다). –

+0

가상 동기화는 매우 복잡하기 때문에 위키 링크를 출발점으로 제공했습니다. 유용한 자료를 찾는데 도움이되기를 바랍니다. 가상 동기화를 설명하는 것을 생략했습니다. 여러 버전이 있고 다시 많은 공간이 필요하기 때문입니다. 컨센서스 알고리즘에 관해서는 단일 값 (단일 그룹 일 필요는 없음)에 대해 동의하는 데 사용되므로 이론적으로 그룹의 매핑을이 값으로 사용하여 여러 그룹을 만들 수 있습니다 (대다수가없는 경우 - 위에서 설명한 제한). – Dimos

+0

처음에는 질문을 약간 잘못 해석 했으므로 초기 응답을 조금 수정했습니다. 또한 몇 가지 대안을 추가했습니다. 업데이트 된 응답이 도움이되기를 바랍니다. – Dimos