3

나는 Raft, Paxos 또는 Zab과 같은 현재 마스터 선거 알고리즘이 클러스터에서 마스터를 선택하는 방법을 읽었으며 단순한 불량 알고리즘 대신 정교한 알고리즘을 사용하는 이유를 이해할 수 없었습니다.불량 알고리즘보다 향상된 마스터 선거 알고리즘의 이점은 무엇입니까?

클러스터 라이브러리를 개발 중이며 하트 비트 메시지에 UDP 멀티 캐스트를 사용하고 있습니다. 각 노드는 멀티 캐스트 주소에 조인하고 해당 주소에 주기적으로 데이터 그램 패킷을 보냅니다. 노드가 패킷을이 멀티 캐스트 주소로 보내는 새 노드를 찾으면 클러스터에 노드를 간단히 추가하고 클러스터의 노드가 노드에서 패키지를 가져 오지 않으면 클러스터에서 노드를 제거합니다. 마스터 노드를 선택해야 할 때 클러스터의 노드를 반복하고 가장 오래된 노드를 선택하기 만하면됩니다.

이 접근법이 효과적이지 않고 Paxos와 같은보다 정교한 알고리즘을 사용하여 마스터를 선출하거나 하트 비트 메시지를 통해 오류를 감지해야한다는 내용의 기사를 읽었습니다. 나는 Paxos가 분할 뇌 상황이나 다른 네트워크 장애에 대해 왜 더 나은지 이해할 수 없었다. 왜냐하면 나는 노드의 쿼럼이 뗏목을 사용하지 않고 클러스터에서 떠날 때 쉽게 알 수 있기 때문이다. 내가 볼 수있는 유일한 이점은 각 서버가 처리해야하는 패킷 수입니다. 유일한 마스터는 뗏목에서 하트 비트 메시지를 전송하지만이 경우 각 노드는 하트 비트 메시지를 서로 보내야합니다. 그러나 나는 마스터 선거 알고리즘을 변경하지 않고 비슷한 하트 비트 알고리즘을 구현할 수 있기 때문에 이것이 문제라고 생각하지 않습니다.

누군가가 자세히 설명해 주실 수 있습니까?

+3

네트워크에 일시적으로 분할되어 나중에 봉쇄 된 경우 노드는 누가 가장 오래된 노드인지에 대해 동의하지 않을 수 있습니다. –

답변

5

이론적 인 관점에서, Raft, Paxos 및 Zab은 리더 선출 알고리즘이 아닙니다. 그들은 합의라고 불리는 다른 문제를 해결합니다.

구체적인 시나리오에서 차이점은 다음과 같습니다. 리더 선거 알고리즘을 사용하면 결국 한 노드 만 리더가 될 수 있습니다. 즉, 일정 기간 동안 여러 노드가 자신이 리더라고 생각할 수 있으므로 결과적으로 하나의 노드처럼 작동 할 수 있습니다. 이와는 대조적으로 위의 합의 알고리즘을 사용하면 논리적 인 시간에 리더가 하나만 존재할 수 있습니다.

결과는 다음과 같습니다. 시스템의 안전성이 단일 리더의 존재 여부에 달려있는 경우 리더 선거에만 의존하는 것이 어려울 수 있습니다. 예를 들어 보겠습니다. 노드는 UDP 멀티 캐스트에서 메시지를 수신하고 보낸 사람이 리더 인 경우 A를 수행하지만 보낸 사람이 리더가 아닌 경우 B를 수행합니다. 두 노드가 약간 다른 시점에서 클러스터의 가장 오래된 노드를 확인하면 다른 리더를 볼 수 있습니다. 이 두 노드는 멀티 캐스트 메시지를 수신하여 다른 방식으로 처리 할 수 ​​있습니다. 예를 들어 시스템의 안전성을 침해 할 수 있습니다 (예 : 모든 노드가 A 또는 B 중 하나를 수행하지만 A는 수행하지 않고 다른 노드는 수행하지 않음). 비).

뗏목, Paxos 및 Zab을 사용하면 이러한 알고리즘이 각각에 하나의 리더를 갖는 논리적 에포크를 생성하므로 이러한 문제를 극복 할 수 있습니다.

두 개의 메모가 여기에 있습니다. 첫째, 불량 알고리즘은 동기 시스템에 대해 정의됩니다. Garcia-Molina의 논문에서 설명한 것처럼 실제로 구현하면 부분 동기식 시스템에서 문제가 발생할 수도 있습니다. 둘째, Zab 알고리즘은 비동기 시스템에 대한 일종의 불량 알고리즘에 의존합니다. 지도자는 역사의 길이를 비교함으로써 선택됩니다 (시스템의 회복 시간을 최소화합니다). 일단 리더가 선출되면, Zab 프로토콜을 시작하려고합니다. Zab 프로토콜은 리더의 신기원을 잠급니다.