합의 알고리즘(Consensus Algorithm)은 분산 시스템에서 여러 노드가 동일한 데이터를 일관되게 유지하도록 보장하는 알고리즘입니다.
노드 간에 장애, 네트워크 지연, 메시지 유실이 발생하더라도 **시스템 전체의 정합성(consistency)**을 유지하는 것이 핵심 목적입니다.
기술사 관점에서 합의 알고리즘은 CAP 이론, FLP 이론, 분산 트랜잭션의 정합성 유지와 밀접히 연결되어 있으며, 다음과 같은 핵심 요소를 고려해야 합니다:
개발자: Leslie Lamport (1998)
특징:
단점:
📌 활용: Google Chubby, Microsoft Azure
개발자: Diego Ongaro, John Ousterhout (2014)
Paxos를 대체하기 위해 탄생 – 더 쉽게 이해하고 구현할 수 있도록 설계
역할: Leader, Follower, Candidate
과정:
장점:
📌 활용: etcd (Kubernetes 내부 키-값 저장소), Consul, TiDB 등
비잔틴 장애: 노드가 악의적으로 잘못된 정보를 보내는 상황까지 고려
PBFT (Practical Byzantine Fault Tolerance):
📌 활용: Hyperledger Fabric, Tendermint (Cosmos), 일부 블록체인
알고리즘 | 장애 허용 | 특징 | 주요 사용 사례 |
---|---|---|---|
Paxos | Crash fault | 이론적으로 강력, 구현 복잡 | Chubby, Azure |
Raft | Crash fault | 직관적 설계, 리더 기반 | etcd, Consul |
PBFT | Byzantine fault | 악의적 노드 대응, 느림 | 블록체인, Hyperledger |
Gossip (간접적 합의) | Eventually consistent | 빠르고 확장성 높음, 강한 일관성은 없음 | Cassandra, DynamoDB |
합의 알고리즘은 분산 시스템 설계의 핵심 요소로, 시스템의 신뢰성, 가용성, 확장성에 직접적인 영향을 미침
선택 시 고려 요소:
합의 알고리즘은 단순한 데이터 저장을 넘어 마이크로서비스 간 상태 동기화, 블록체인, 멀티 데이터센터 동기화 등 광범위한 분야에 적용됨