\ud83e\udd14 \ubd84\uc0b0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub780 \ubb34\uc5c7\uc778\uac00\uc694?
\ubd84\uc0b0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub294 \uc5ec\ub7ec \uc704\uce58\uc758 \uc11c\ubc84(\ub178\ub4dc)\uc5d0 \ub370\uc774\ud130\ub97c \ubd84\uc0b0 \uc800\uc7a5\ud569\ub2c8\ub2e4. CAP \uc815\ub9ac\uc5d0 \ub530\ub974\uba74 \uc138 \uac00\uc9c0 \uc18d\uc131 \uc911 \ub450 \uac00\uc9c0\ub9cc \ubcf4\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4: Consistency(\uc77c\uad00\uc131), Availability(\uac00\uc6a9\uc131), Partition Tolerance(\ubd84\ub2e8 \ub0b4\uc131).
\uc65c \uc911\uc694\ud55c\uac00\uc694? Google\uc5d0\uc11c Netflix\uae4c\uc9c0 \ubaa8\ub4e0 \ub300\ud615 \uc778\ud130\ub137 \uc11c\ube44\uc2a4\uac00 \ubd84\uc0b0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4. \uc77c\uad00\uc131\uacfc \uac00\uc6a9\uc131 \uac04\uc758 \ud2b8\ub808\uc774\ub4dc\uc624\ud504\ub97c \uc774\ud574\ud558\ub294 \uac83\uc740 \uc218\uc2ed\uc5b5 \uc0ac\uc6a9\uc790\ub97c \uc11c\ube44\uc2a4\ud558\ub294 \uc2e0\ub8b0\uc131 \ub192\uc740 \uc2dc\uc2a4\ud15c \uad6c\ucd95\uc5d0 \ud544\uc218\uc801\uc785\ub2c8\ub2e4.
📖 심층 분석
비유 1
5개 도시에 지점이 있고 모두 동일한 카탈로그를 공유하는 도서관 시스템을 상상해 보십시오. 누군가 A 지점에서 책을 대출하면 다른 모든 지점에서는 기록을 업데이트해야 합니다. 지점 C에 대한 전화선이 다운되면(네트워크 파티션) 지점 C에서 여전히 책을 사용 가능한 것으로 표시할 수 있습니다. 이는 일관성 문제입니다. 지점 C가 다시 연결될 때까지 모든 대출을 잠그거나(일관성 선택) 각 지점이 독립적으로 대출을 유지하고 나중에 조정하도록 할 수 있습니다(가용성 선택).
비유 2
여러 나라에 걸쳐 친구들과 그룹 채팅을 한다고 생각해 보세요. 메시지를 보내면 모든 사람이 동일한 순서로 메시지를 확인해야 합니다. 그러나 누군가의 인터넷이 끊어지면 메시지를 놓치고 오래된 정보에 답장을 보내 대화 스레드가 충돌하게 될 수 있습니다. 분산 데이터베이스는 대규모로 이러한 정확한 문제에 직면하고 있으며 벡터 시계 및 CRDT와 같은 기술을 사용하여 모든 사람이 다시 연결할 때 혼란을 해결합니다.
🎯 시뮬레이터 팁
초보자
5개의 노드와 복제 요소 3으로 시작합니다. 이는 각 데이터 조각이 5개의 노드 중 3개에 저장된다는 의미입니다.
중급자
쓰기 일관성 ALL과 ONE 비교 - ALL은 속도가 느리지만 모든 복제본에 최신 데이터가 있음을 보장합니다.
전문가
해결되지 않은 충돌을 관찰하기 위해 파티션 중에 벡터 클럭을 비활성화하고 동시 쓰기를 트리거합니다.
📚 용어집
🏆 핵심 인물
Eric Brewer (2000)
UC Berkeley에서 CAP 정리를 공식화하여 일관성, 가용성 및 파티션 허용성을 동시에 보장할 수 없음을 입증하여 분산 데이터베이스 설계를 근본적으로 형성했습니다.
Leslie Lamport (1998)
Paxos 합의 알고리즘을 만들고 논리 시계, Lamport 타임스탬프 및 비잔틴 장군 문제와 같은 개념을 사용하여 분산 시스템 이론을 개척했습니다.
Diego Ongaro (2014)
Stanford에서 Raft 합의 알고리즘을 설계하여 etcd 및 CockroachDB와 같은 실제 시스템에서 분산 합의를 이해하기 쉽고 실용적으로 만들었습니다.
Werner Vogels (2007)
일관된 해싱, 벡터 클록 및 엉성한 쿼럼을 도입한 Amazon Dynamo의 설계를 주도하여 Cassandra, Riak 및 전체 NoSQL 운동에 영감을 주었습니다.
Jeff Dean & Wilson Hsieh (2012)
TrueTime API 및 GPS/원자 시계 동기화를 사용하여 외부적으로 일관된 트랜잭션을 제공하는 최초의 전 세계적으로 분산된 데이터베이스인 Google Spanner를 공동 설계했습니다.
Marc Shapiro (2011)
INRIA에서 개척된 CRDT(충돌 없는 복제 데이터 유형)는 조정 없는 최종 일관성을 위한 수학적 기초를 제공합니다.
🎓 학습 자료
- Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services [paper]
분산 시스템의 근본적인 불가능성 결과를 확립하는 CAP 정리의 형식적 증명(ACM SIGACT News, 2002) - Dynamo: Amazon's Highly Available Key-value Store [paper]
일관된 해싱, 벡터 클록 및 엉성한 쿼럼을 사용하는 최종적으로 일관된 분산 스토리지에 대한 Amazon의 영향력 있는 논문(SOSP 2007) - Spanner: Google's Globally Distributed Database [paper]
GPS 및 원자시계 동기화를 통해 외부 일관성을 달성하는 Google의 TrueTime 기반 글로벌 일관성 데이터베이스(OSDI 2012) - In Search of an Understandable Consensus Algorithm (Raft) [paper]
이해하기 쉽도록 설계된 Raft 합의 알고리즘은 현재 etcd, CockroachDB 및 TiKV에서 사용됩니다(USENIX ATC 2014) - Designing Data-Intensive Applications [article]
분산 시스템 기본, 복제, 파티셔닝 및 일관성 모델에 대한 Martin Kleppmann의 종합 가이드 - Jepsen.io [article]
실제 장애 상황에서 분산 데이터베이스 정확성 주장에 대한 Kyle Kingsbury의 엄격한 테스트 및 분석 - The Raft Consensus Algorithm Visualization [article]
단계별 리더 선택 및 로그 복제를 통해 Raft 합의 알고리즘의 대화형 시각화