뗏목 사이트를 참고하세요!



뗏목(Raft)이란?

출처 : 뗏목 사이트

뗏목은 여러 개의 나무를 이어서 물에 동동 뜰 수 있게 만든 일종의 운송 수단이다. 여러 개의 나무가 지탱하고 있기 때문에 일부 나무가 손상 되어도 뗏목은 앞으로 나아갈 수 있다.

뗏목 알고리즘은 뗏목처럼 여러 서버 중 일부에 장애가 생겨도 제 기능을 유지하도록 하는 합의 알고리즘(Consensus Algorithm)이다. 도커 스웜에서 매니저 노드가 스웜의 일관된 상태를 유지하기 위해 사용하는 알고리즘이다. 뗏목 합의 알고리즘을 이해하기 위해 다음의 용어들을 살펴보자.



1. 합의 알고리즘(Consensus Algorithm)

합의 알고리즘이란 다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘이다. (출처 : 해시넷)

서버에서 명령을 실행하기 위해 다른 서버의 합의를 요청한다. 각 서버에 문제가 없는 경우 동일한 명령을 처리하고, 동일한 결과를 생성하고, 동일한 상태에 도달한다. 좀 더 자세한 설명은 아래에서!



2. 장애 허용 분산 시스템(fault-tolerance distributed system)

시스템 중 일부에 오류가 발생해도 정상적으로 작동할 수 있도록 하는 시스템이다. 마치 4발 자전거에서 바퀴 하나가 고장나도 굴러가는 것처럼 말이다.





뗏목 알고리즘의 진행

뗏목 알고리즘은 어떻게 진행될까? 앞서 이해한 장애 허용 시스템에서 합의 알고리즘이 어떻게 사용되는지 살펴본다.



1. 상태 시스템과 로그

각 서버에 상태 시스템로그가 있다.

여기서 상태 시스템은 오류를 허용하려는 특징을 지닌다. 여러 서버 중 특정 서버에 장애가 생겨도, 클라이언트는 정상 작동하는 다른 상태 시스템과 상호작용할 수 있다.

각 상태 시스템은 각 로그로부터 입력(input)을 받는다. 위에서 본 합의 알고리즘은 서버의 로그에 있는 명령을 합의하는 데에 사용된다.

※ 상태 시스템 : 각 상태를 조건에 따라 연결해 놓은 것이다. 어떤 조건이 충족되거나 이벤트가 발생하면 현재 상태에서 다음 상태로 이동하는 동작을 수행한다.

※ 로그 : 시스템의 처리 내용과 이용 상황을 시간 흐름에 따라 기록한 것.



2. 합의 요청

서버가 명령을 실행할 때 다른 서버에게 합의를 구한다. 한 서버가 명령을 적용하면 다른 서버는 다시 그 명령을 적용할 필요 없다(=명령 실행을 위해 다른 서버에게 다시 합의를 구할 필요가 없다.). 합의를 한 서버(장애가 없는 서버)는 같은 명령을 처리하고 동일한 상태가 된다.

반면, 장애가 있는 서버가 소수가 아니라 다수라면 더 이상의 진행은 중단되나, 명령으로 인한 잘못된 결과는 반환하지 않는다.





뗏목 알고리즘의 시각화

뗏목 사이트에서는 시각화해서 합의 알고리즘이 어떻게 진행되는지 확인할 수 있다.

1. 뗏목이 완벽한 경우

1번 서버가 어떤 조건이 충족되어 로그의 명령을 적용하고 다른 서버에게 합의를 요청한다. 다른 서버 모두 장애가 없는 상태로, 1번 서버의 명령에 합의하면 모두 같은 상태로 갱신된다.


출처 : 뗏목 사이트



2. 일부 뗏목에 문제가 생긴 경우

소수 서버에 문제가 생기면 어떻게 될까? 3번, 4번 서버를 중지 시킨 상태로 명령을 적용하도록 했다. 5번 서버에서 합의를 구하는데, 합의한 서버들은 2번 명령을 처리한 상태로 갱신되고, 중지된 서버는 그대로 남는다.


출처 : 뗏목 사이트



3. 다수 뗏목에 문제가 생긴 경우

다수 서버에 문제가 생긴 경우, 합의를 요청해도 결과는 반환되지 않는다. 합의를 요청한 서버는 다음 로그로 넘어가면서 계속 합의를 요구한다.


출처 : 뗏목 사이트