기술 동향

Raft Consensus Algorithm

gozalex 2020. 6. 25. 10:31

What is Raft?

Raft는 이해하기 쉽게 설계된 합의 알고리즘입니다. 내결함성과 성능면에서 Paxos와 같습니다. Raft가 더 많은 사람들에게 합의를 제공 할 수 있기를 희망하며이 더 많은 사람들이 오늘날 이용 가능한 것보다 다양한 고품질의 합의 기반 시스템을 개발할 수 있기를 바랍니다.

Hold on—what is consensus?

합의는 내결함성 분산 시스템에서 근본적인 문제입니다. 합의는 "값"을 공유하는 여러 서버를 포함합니다. 일단 값에 대한 결정에 도달하면, 그 결정이 최종입니다. 일반적인 합의 알고리즘은 대부분의 서버를 사용할 수있을 때 진행됩니다. 예를 들어, 2 대의 서버에 장애가 발생하더라도 5 대의 서버 클러스터가 계속 작동 할 수 있습니다. 더 많은 서버가 실패하면 진행이 중지되지만 잘못된 결과는 반환되지 않습니다.

일반적으로 내결함성 시스템을 구축하기위한 일반적인 접근 방식인 Replicated Machine과 합의가 이루어집니다. 각 서버에는 상태 시스템과 로그가 있습니다. 상태 머신은 해시 테이블과 같이 내결함성을 만들려는 구성 요소입니다. 클러스터의 소수의 서버에 장애가 발생하더라도 클라이언트가 신뢰할 수있는 단일 상태 시스템과 상호 작용하는 것으로 나타납니다. 각 상태 머신은 로그에서 입력 명령으로 사용됩니다. 해시 테이블 예에서 로그에는 set X to 3과 같은 명령이 포함됩니다. 합의 알고리즘은 서버 로그의 명령에 동의하는 데 사용됩니다. 합의 알고리즘은 상태 머신이 X에 3을 n 번째 명령으로 적용 할 경우 다른 상태 머신이 다른 n 번째 명령을 적용하지 않도록해야합니다. 결과적으로, 각 상태 머신은 동일한 일련의 명령을 처리하므로 동일한 일련의 결과를 생성하고 동일한 일련의 상태에 도달합니다.

Raft Visualization

브라우저에서 실행중인 Raft 클러스터는 다음과 같습니다. Raft가 작동하는 것을 보기 위해 상호 작용할 수 있습니다. 왼쪽에는 5 개의 서버가 표시되고 오른쪽에는 로그가 표시됩니다. 

A node can be in 1 of 3 states:

Follower State
Candidate State
Leader State

 

Become a candidate
Become a leader
 Append Entry Message within a hearbeat

 

Commit
Consensus - Log replication
Election Timeout - The election timeout is the amount of time a follower waits until becoming a candidate.The election timeout is randomized to be between 150ms and 300ms.
Send "Request Vote Message" to all nodes and waits...
Append Entries messages
Heartbeat timeout
Split Vote - Wait another term and re-vote
Log Replication with the exactly same as heartbeat flow
Commit -> Reply to the client
Partitioned Network
Can't replicate
Become a new leader due to "HIGHER TERM" and roll back 

 

본 문서는 raft.github.io 를 번역하였습니다. raft.github.io  에 접속하면 시각화 도구를 이용하여 어떻게 Leader Election이 일어나는지 쉽게 이해할 수 있습니다.