한양과학기술고등학교

에듀테크 프로젝트 대시보드

Paxos 합의 알고리즘

여러 대의 서버가 네트워크로 연결돼 있는데, 그중 일부는 언제든 느려지거나 멈출 수 있다. 이런 상황에서 "다음 값은 이걸로 하자"라는 결정을 서버들끼리 어떻게 안전하게 합의할 수 있을까? 1989년 레슬리 램포트가 제안한 Paxos는 이 문제를 푸는 가장 오래되고 유명한 알고리즘이다. 복잡하기로 악명 높아서, 훗날 이해하기 쉽게 설계한 대안이 바로 이 사이트에도 있는 Raft다.

1. 세 가지 역할

실제로는 한 서버가 여러 역할을 동시에 겸하는 경우가 많다.

Proposer
"이 값으로 정하자"고 제안 번호(ballot)를 붙여 제안을 보낸다.
Acceptor
제안에 투표한다. 과반수(정족수)가 같은 값을 받아들이면 그 값이 확정된다.
Learner
확정된 값이 무엇인지 전달받아 그대로 적용한다.

2. 왜 하필 "과반수"일까 — 정족수(Quorum)

Acceptor 5대 중 몇 대를 꺼도 합의가 유지되는지 직접 꺼보자. 과반(3대) 미만이면 합의가 불가능해진다.

3. Paxos 한 라운드 — 직접 진행해보기

Paxos는 항상 두 단계다: Phase 1 (Prepare / Promise)로 "번호 N보다 낮은 제안은 무시해달라"고 예약하고, Phase 2 (Accept / Accepted)에서 실제 값을 과반수에게 확정시킨다. 버튼을 눌러 Proposer 하나가 값 "CACHE_TTL=60"을 제안하는 과정을 한 단계씩 지켜보자.

단계 0 / 대기 중

4. 프로포저 둘이 동시에 나서면? — 듀얼링 프로포저

리더가 정해져 있지 않은 Basic Paxos는 두 Proposer가 번호를 계속 높여가며 서로를 밀어내는 라이브락(livelock)에 빠질 수 있다. 아래에서 두 Proposer A, B가 번갈아 제안 번호를 올리며 경쟁하는 모습을 재생해보자.

A
B
8라운드 동안 A와 B가 서로의 Promise를 가로채기만 하고 누구도 Phase 2(Accept)를 완료하지 못했다. 실무에서는 이를 막기 위해 하나의 Proposer만 제안하도록 리더를 선출하는 Multi-Paxos를 쓴다 — Raft의 리더 선출과 같은 발상이다.

5. Raft와 무엇이 다른가

Paxos (Basic)Raft
리더고정 리더 없음 — 누구나 Proposer가 될 수 있음항상 리더 1명이 선출되어 제안을 대표
합의 단위값 하나(단일 슬롯) 합의에 초점연속된 로그 항목 복제에 초점
경쟁 상황동시 제안 시 라이브락 가능 (위 데모 참고)무작위 타임아웃으로 스플릿 보트 확률을 낮춤
이해 난이도수학적으로 우아하지만 구현·설명이 어렵기로 유명"이해 가능성(understandability)"을 설계 목표로 함

6. 어디에 쓰이나

Google Chubby분산 락 서비스의 합의 계층으로 Paxos 사용
Apache ZooKeeperPaxos에서 파생된 ZAB 프로토콜로 조정 서비스 제공
Google Spanner샤드별 복제 그룹 합의에 Paxos 변형 사용