Distributed Systems Principles & Consensus
물리적으로 분리된 노드들 간의 상호작용 원리, 네트워크 비결정성 문제, 그리고 동일 상태에 도달하기 위한 합의 알고리즘의 역학을 다루는 학습 노드입니다.
sys.entry
M
Me
hyunyoun's Blog
posts6 min read
1. Overview
분산 시스템 원리 및 합의(Distributed Systems Principles & Consensus, DPC)는 연산 성능의 한계를 돌파하기 위해 여러 대의 컴퓨터를 하나의 거대한 논리적 시스템으로 묶는 물리적 원리를 다룹니다.
분산 시스템의 가장 큰 적은 '부분 장애'와 '네트워크 불확실성'입니다. 학습자는 지연 시간(Latency)이 연산 정합성에 미치는 물리적 영향, 데이터 일관성을 지키기 위한 CAP 정리의 선택, 그리고 신뢰할 수 없는 환경에서 하나의 결론을 내리는 Paxos/Raft 합의 알고리즘을 학습합니다. 이를 통해 어떤 노드가 죽거나 메시지가 누락되어도 전체 시스템의 신뢰성을 유지하는 고수준 분산 로직을 설계합니다.
2. Scope & Boundaries
In-Scope
- Core Challenges: 부분 장애(Partial Failure), 비동기 모델, 네트워킹 비결정성 물리
- Reasoning Models: CAP 정리, PACELC 정리, 일관성 모델(Strong vs Eventual)
- Time & Ordering: Lamport Clocks, Vector Clocks, 물리적 시계 동기화의 한계
- Consensus Protocols: Paxos, Raft 알고리즘의 동작 단계 및 리더 선출 역학
Out-of-Scope
- 특정 분산 데이터베이스(NoSQL) 관리 기술 (06-02 NoSQL 영역으로 위임)
- 분산 시스템상의 보안 인증 및 암호화 (10. Security 영역으로 위임)
Boundaries
- DPC vs. Distributed Logic: 06-03(DL)이 '분산된 저장 매체와 데이터 정합성'에 특화된다면, DPC는 '연산 노드 간의 상태 공유와 일반적인 합의 메커니즘'이라는 아키텍처 원론에 집중합니다.
3. Counterexample
- 단순히 API를 여러 서버로 분산 처리하는 것은 DPC 학습이 아닙니다. 여러 서버에 분산된 공유 변수값을 업데이트할 때, **경쟁 상태(Race Condition)**를 막기 위해 어떻게 물리적인 **분산 락(Distributed Lock)**을 구현하거나, 합의 알고리즘을 통해 **선형성(Linearizability)**을 보장할지 논리적으로 증명할 수 있어야 합니다.
4. Prerequisites
- 기초 자료 구조 (Basic): 큐, 그래프 탐색, 해시 테이블 개념이 프로토콜 구현에 필요합니다. (04. CDS)
- 네트워크 기초 및 OSI 스택 (Recommended): TCP/UDP의 신뢰성 차이와 타임아웃 개념 이해가 필수적입니다. (08. Network)
5. Learning Map
- Facing Uncertainty: 네트워크 지연과 패킷 유실이 시스템에 주는 물리적 리스크를 인지합니다.
- Synchronizing Time: 물리 시계가 없는 분산 환경에서 이벤트 순서를 정하는 논리 시계를 이해합니다.
- Reaching Consensus: 신뢰할 수 없는 다수 노드가 하나의 값에 동의하는 합의 알고리즘을 익힙니다.
- Resilient States: 장애 노드가 복구되어 다시 클러스터에 합류하는 상태 복구 물리 과정을 배웁니다.
6. Learning Topics
Basic
Core: 분산 시스템의 특징과 CAP 정리 (Distributed Challenges)
- Why to Learn: 분산 환경에서 모든 것을 동시에 가질 수 없음을 인지하고 현실적인 설계를 하기 위함입니다.
- What to Learn:
- 분산 시스템의 8가지 오해(Fallacies of Distributed Computing)
- CAP 정리: Consistency(일관성), Availability(가용성), Partition Tolerance(단절 용인)
- 장애 모델: 크래시 장애 vs 비잔틴 장애 정체
- How to Learn:
- 네트워크 단절 상황을 가정한 시나리오에서 데이터 정합성과 응답성 중 무엇을 택할지 의사결정 연습
- 특정 시스템(예: DNS, Redis 클러스터)이 CAP 중 무엇에 집중하는지 분석
- Implement: CAP 정리의 트레이드오프를 도식화한 아키텍처 의사결정 가이드
Recommended
Core: 논리적 시계와 이벤트 순서 (Logical Clocks & Ordering)
- Why to Learn: 물리적 시계가 일치하지 않는 서버들 사이에서 '누가 먼저 했는가'를 판별하기 위해서입니다.
- What to Learn:
- 인과 관계(Causality)와 선행 발생(Happened-before) 관계의 정의
- 램포트 시계(Lamport Clock)의 물리적 카운터 증가 규칙
- 벡터 시계(Vector Clock)를 이용한 데이터 버전 충돌 감지 물리
- How to Learn:
- 3대 이상의 서버 간 메시지 교환 시퀀스를 그려보고 각 시점의 램포트 시계값 수기 계산
- DynamoDB 스타일의 충동 해결(Conflict Resolution) 시나리오 실습
- Implement: 벡터 시계를 활용하여 데이터 충돌을 감지하고 병합하는 기초 로직
Practical
Core: Raft 합의 알고리즘 실무 (Raft Consensus)
- Why to Learn: 이해하기 쉬우면서도 강력한 합의 메커니즘을 실제 시스템에 적용하기 위함입니다.
- What to Learn:
- Raft의 3가지 상태: Leader, Follower, Candidate 물리 거동
- 리더 선출(Leader Election) 과정과 텀(Term) 관리 논리
- 로그 복제(Log Replication) 및 안정적 커밋(Commitment) 프로세스
- How to Learn:
- Raft 인터랙티브 시뮬레이터를 통해 리더 노드 정지 시 Candidate로 전환되는 과정 관측
- 로그 인덱스 불일치 상황에서 리더가 Follower의 로그를 동기화하는 물리적 절차 분석
- Implement: Go나 Python을 이용한 간단한 Raft 기반 키-값 저장소의 리더 선출 모듈
Advanced
Core: 비잔틴 장애와 고수준 합의 (Byzantine Fault Tolerance)
- Why to Learn: 악의적인 노드의 공격이나 극심한 신뢰 불능 상황(블록체인 등)에 대응하기 위해서입니다.
- What to Learn:
- 비잔틴 장군 문제(Byzantine Generals Problem)의 정의와 임계치 분석
- PBFT (Practical Byzantine Fault Tolerance) 기초 논리
- 분산 스냅샷과 체크포인팅(Checkpointing)을 통한 복구 가속화 물리
- How to Learn:
- 노드 4대 중 1대가 거짓 정보를 보낼 때 전체가 합의에 도달하는 프로세스 연구
- 블록체인의 합의(PoW, PoS)가 고전적 합의 알고리즘과 물리적으로 어떻게 다른지 비교
- Implement: 일부 노드의 오작동이나 변조를 탐지하여 격리하는 비잔틴 합의 시뮬레이션 환경
7. Terminology
8. References
Primary References
- [P1] CS2023 - AL/Distributed Algorithms — Theoretical consensus basis.
- [P1] CS2023 - AR/Distributed Systems — System architecture constraints.
Secondary References
- [Distributed Systems: An Algorithmic Approach] Sukumar Ghosh — Formal approach.
- [Reliable Distributed Systems] Kenneth Birman — Focus on high availability.
Industry References
- [Consensus: Bridging Theory and Practice] Diego Ongaro (Raft creator) — Practical implementation guide.
- [Etcd Documentation - Why Raft?] — Real-world usage of consensus for configuration.
9. Final Checklist
Primary Checklist
- 네트워크 단절(Network Partition) 발생 시 가용성을 위해 일관성을 포기한다는 것이 실제 데이터 조회 시 어떤 의미인지 사례를 들어 설명 가능한가? (P1)
- Paxos와 Raft 알고리즘에서 왜 과반수(Quorum) 찬성이 필요한지 물리적 논리를 기술할 수 있는가? (P1)
Secondary Checklist
- 램포트 시계가 이벤트의 '전체 순서(Total order)'가 아닌 '부분 순서(Partial order)'만을 보장하는 이유를 인지하고 있는가?
- 분산 시스템에서 '멱등성(Idempotency)'이 중복 메시지 전송 문제를 어떻게 물리적으로 해결하는지 이해하는가?
Industry Checklist
- Kubernetes의 컨트롤 플레인이나 DB 클러스터에서 리더 선출 실패 시 서비스에 미치는 물리적 영향도를 시뮬레이션 가능한가? (SFIA)
- 전역적으로 분산된 시스템에서 물리적 시계 동기화(NTP 등) 오차 범위를 고려한 타임아웃 설정을 할 수 있는가?