Paxos 알고리즘

Paxos 알고리즘

해당 내용은 2025년 02월 5일 'Ceph Code Walkthruogh 2.0' 에서 '이*규'님께서 발표한 '[6차] paxos 알고리즘' 에 대한 내용을 정리한 내용입니다. ceph에 관련된 내용을 공부하고 싶다면 연락부탁드립니다.

paxos 알고리즘의 본인의 필기노트 일부 발취

Paxos 의 어원

래슬리 램포트 (1941 ~ 생존)

래슬리 램포트(Leslie Lamport)가 1989년에 이 알고리즘을 제안하면서, 논문 제목을 "The Part-Time Parliament"(시간제 의회)라고 지었는데, 여기서 Paxos 섬의 의회(Parliament) 가 등장합니다.

그리스의 paxos섬 - 이탈리아 반도 (부츠 힐부분) 옆

어원의 배경

  • 램포트는 Paxos 알고리즘을 설명하기 위해 그리스 Paxos 섬에서 운영되던 의회(Parliament)를 기반으로 한 이야기를 만들었습니다.
  • 이 의회의 의원들이 일정하지 않은 시간에 참여(Part-Time) 하는 상황에서도 의사 결정을 내릴 수 있어야 했습니다. 지각한 의원이 가져온 의제가 이미 결정됬거나 아예 참석하지 않는 의원들이 존재할 수 있는 상황이 발생합니다.
  • 그래서 누구든 해당 안건에 대한 임시 의장(Proposer)이 되어 참석한 의원들에게 의사결정을 묻고 참석인원이 모두 동의했다면, 의제를 완료시키고 임시의장에서 물러닙니다.
  • 이와 비슷하게 Paxos 알고리즘도 분산 시스템에서 노드들을 제안자, 수락자 또는 학습자로 부분적으로 참여시켜 일관된 합의를 이끌어내는 특징을 가집니다.

하지만 이 가상의 배경 이야기가 너무 복잡해서 연구자들이 이해하는 데 어려움을 겪었고, 이후 램포트는 1998년에 "Paxos Made Simple" 논문을 발표하며 더 직관적으로 설명했습니다.

즉, Paxos 알고리즘의 어원은 그리스 Paxos 섬에서 유래되었으며, "부분적으로 참여하는 의회"라는 개념에서 출발한 것입니다.


Paxos 알고리즘

분산 시스템에서 합의(Consensus) 를 이루기 위한 알고리즘으로, 충돌 없이 하나의 값이 선택되도록 보장하는 것이 핵심입니다.

1. 역할(Role) 정의

  • Proposer(제안자): 합의할 값을 제안하는 역할
  • Acceptor(수락자): Proposer의 제안을 수락하고 합의할 값을 결정하는 역할
  • Learner(학습자): 최종 결정된 값을 학습하는 역할

Paxos 알고리즘 과정

1단계: Prepare Phase (제안 준비 단계)

  1. Proposer는 제안 번호(N)와 함께 Prepare 요청을 Acceptor에게 보낸다.
  2. Acceptor는 다음을 수행한다.
    • 이전에 응답한 제안이 없다면, 해당 제안(N)을 기억하고 응답한다.
    • 이전에 더 큰 제안을 수락한 적이 있다면, 기존 값과 함께 거절한다.

2단계: Accept Phase (제안 수락 단계)

  1. Proposer는 다수의 Acceptor로부터 Prepare 응답을 받으면, 가장 높은 제안 번호(N)로 Accept 요청을 보낸다.
  2. Acceptor는 다음을 수행한다.
    • 제안 번호(N)가 자신이 응답한 최대 번호보다 크거나 같다면 제안을 수락하고 다른 Acceptor에게 전달한다.
    • 그렇지 않다면 거절한다.

3단계: Learn Phase (학습 단계)

  1. 다수의 Acceptor가 동일한 값을 Accept하면 합의가 완료된다.
  2. Learner는 다수의 Acceptor로부터 값을 받아 최종적으로 결정된 값을 학습한다.

Paxos 알고리즘을 다룬 이유

  1. 합의 알고리즘의 근본적인 개념을 다룸
  2. 다음 포스팅인 ceph에서 사용하는 Multi-Paxos를 위해
  3. 다다음 포스팅인 raft를 위해....
  4. ceph code walkthrough를 알리기 위해
  5. 스터디한 기억날때 정리하기 위해

Read more

푸름이세요? 아니요 구름인데요

푸름이세요? 아니요 구름인데요

클라우드 컴퓨팅(Cloud Computing) 이란? 클라우드 컴퓨팅은 IT 인프라를 손쉽게 관리할 수 있도록 도와주며, 확장성과 유연성을 제공하는 기술입니다. 물리적인 서버를 직접 구매하지 않아도 되며, 필요한 만큼의 자원을 사용하고 비용을 절감할 수 있다는 점에서 많은 기업과 개인이 활용하고 있습니다. 클라우드 서비스의 유형을 크게 세 가지 모델로 나눌 수 있습니다. 인프라스트럭처 서비스(

By hyobin
빔슬람(Vimslam)이 되보자

빔슬람(Vimslam)이 되보자

Vim이란? Vim은 서버에서 작업하는 사람들 사이에서 유용한 텍스트 편집기입니다. UNIX 시스템에서 표준 편집기였던 VI의 개선판으로 Vi Improved의 약자입니다. 그래서 대부분의 유닉스기반(리눅스를 포함한) 운영체재에 설치되어있고 작동합니다. Vim은 다음과 같은 특징을 갖고 있습니다. * 모드 기반 편집 Vim은 입력 모드와 명령 모드로 구분됩니다. 사용자는 명령 모드에서 편집, 삭제, 검색 등을 빠르게 할

By hyobin
스근하게 Go 한 스푼

스근하게 Go 한 스푼

Golang 이란? Go(Golang)는 Google에서 개발한 오픈소스 프로그래밍 언어로, 높은 성능과 간결한 문법을 제공하는 언어입니다. 2009년에 발표되었으며, 빠른 컴파일 속도와 강력한 동시성(concurrency) 지원이 특징입니다. C 언어와 비슷한 성능을 내면서도 Python처럼 직관적인 코드 작성을 목표로 설계되었습니다. Golang의 장점 Go 언어를 사용하면 다음과 같은 장점을 얻을 수 있습니다. 간결한 문법

By hyobin