💻

\ubd84\uc0b0 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2dc\ubbac\ub808\uc774\ud130

\ub178\ub4dc \ubcf5\uc81c, CAP \uc815\ub9ac \ud2b8\ub808\uc774\ub4dc\uc624\ud504, \uc77c\uad00\uc131 \uc804\ud30c\ub97c \uc2dc\uac01\ud654\ud569\ub2c8\ub2e4

💻 지금 사용하기

\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은 속도가 느리지만 모든 복제본에 최신 데이터가 있음을 보장합니다.

전문가

해결되지 않은 충돌을 관찰하기 위해 파티션 중에 벡터 클럭을 비활성화하고 동시 쓰기를 트리거합니다.

📚 용어집

CAP Theorem
분산 시스템이 일관성, 가용성, 파티션 허용치라는 세 가지 보장 중 최대 두 가지를 제공할 수 있다는 Brewer의 정리입니다. 네트워크 분할 중에는 C와 A 중 하나를 선택해야 합니다.
Replication Factor
클러스터 전체에 걸쳐 유지 관리되는 각 데이터 조각의 복사본 수입니다. 복제 인자 3은 모든 쓰기가 3개의 서로 다른 노드에 저장된다는 의미입니다.
Quorum
작업이 성공하려면 읽기 또는 쓰기를 승인해야 하는 대부분의 복제본입니다. RF=3의 경우 쿼럼은 2입니다. 쿼럼 쓰기와 결합된 쿼럼 읽기는 일관성을 보장합니다.
Consistency Level
읽기 또는 쓰기가 성공한 것으로 간주되기 전에 응답해야 하는 복제본 수를 결정합니다. ONE은 가장 빠르지만 오래된 데이터를 반환할 수 있습니다. ALL은 가장 느리지만 항상 일관성이 있습니다.
Network Partition
클러스터를 서로 통신할 수 없는 두 개 이상의 노드 그룹으로 분할하여 일관성과 가용성 사이에서 선택을 강요하는 네트워크 통신 오류입니다.
Split-Brain
네트워크 분할로 인해 두 노드 그룹이 충돌하는 쓰기를 독립적으로 허용하고 자신이 권한 있는 클러스터라고 믿는 위험한 상황입니다.
Vector Clock
분산 노드 전체에서 이벤트의 인과 순서를 추적하는 데이터 구조입니다. 각 노드는 논리적 카운터를 유지하며 벡터 클록을 비교하면 이벤트가 인과적으로 관련되어 있는지 또는 동시 발생하는지 여부가 드러납니다.
CRDT
충돌 없는 복제 데이터 유형 — 교환성과 같은 수학적 속성을 사용하여 서로 다른 복제본의 동시 업데이트가 조정 없이 항상 동일한 상태로 수렴되도록 설계된 데이터 구조입니다.
Last-Write-Wins (LWW)
최신 타임스탬프를 사용한 쓰기가 승리하는 간단한 충돌 해결 전략입니다. 구현하기 쉽지만 동시 업데이트를 자동으로 삭제할 수 있습니다.
Gossip Protocol
각 노드가 정기적으로 임의의 피어와 상태 정보를 교환하여 결국 모든 노드에 업데이트를 전파하는 P2P 통신 패턴입니다. 이는 소문이 퍼지는 방식에서 영감을 받았습니다.
Anti-Entropy
노드가 주기적으로 데이터를 피어와 비교하고 차이점을 동기화하여 장애 후에도 최종 일관성을 보장하는 백그라운드 복구 프로세스입니다.
Merkle Tree
복제본 데이터 간의 차이를 효율적으로 감지하는 데 사용되는 해시 트리 데이터 구조입니다. 노드는 먼저 루트 해시를 비교한 다음 드릴다운하여 다른 특정 키만 찾아서 복구합니다.
Tombstone
데이터가 삭제되었음을 나타내는 마커입니다. 이전 데이터가 있는 분할된 노드가 클러스터에 다시 참여할 때 삭제된 데이터가 다시 나타나지 않도록 TTL 기간 동안 삭제 표시를 보관해야 합니다.
Eventual Consistency
새로운 업데이트가 이루어지지 않으면 모든 복제본이 결국 동일한 값으로 수렴되도록 보장하는 일관성 모델입니다. 전파 지연은 수렴할 때까지의 시간입니다.
Write-Ahead Log (WAL)
변경 사항을 데이터베이스에 적용하기 전에 순차 로그에 기록하여 로그를 재생하여 충돌 복구를 가능하게 하는 내구성 기술입니다.

🏆 핵심 인물

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(충돌 없는 복제 데이터 유형)는 조정 없는 최종 일관성을 위한 수학적 기초를 제공합니다.

🎓 학습 자료

💬 학습자에게

분산 데이터베이스는 현대 인터넷의 중추입니다. 소셜 미디어에 게시하거나, 비디오를 스트리밍하거나, 온라인으로 구매할 때마다 수십 개의 분산 데이터베이스 노드가 배후에서 조정됩니다. CAP 정리는 네트워크가 실패하는 세상에서는 완벽함이 불가능하며 엔지니어링은 지능적인 절충에 관한 것임을 가르쳐줍니다. 여기에서 탐색하는 개념(복제, 합의, 충돌 해결)은 Google, Amazon 및 Netflix의 엔지니어가 매일 해결하는 것과 동일한 과제입니다. 이러한 기본 사항을 이해하면 디지털 세계가 실제로 어떻게 작동하는지에 대한 깊은 이해를 얻을 수 있으며 탄력적인 차세대 데이터 시스템을 구축하는 데 영감을 줄 수도 있습니다.

시작하기

무료, 가입 불필요

시작하기 →