1️⃣ Apache Cassandra
- 파티션 기반의 Wide Column 저장소 모델을 활용
- multi-master data replication
- 높은 가용성(availability)과 low latency를 제공함
- 단일 장애 지점(single point of failure)이 없음
- 궁극적 일관성(eventual consistent) 데이터베이스
- 모든 업데이트는 궁극적으로 레플리카 노드에 도달함
- 궁극적 일관성으로 인해 임시적으로 노드마다 데이터가 다를 수 있음
- Consistent Hashing으로 데이터를 여러 노드에 분산함
- Murmur3Partitioner을 기본 파티셔너로 사용함
- 모든 노드가 마스터기 때문에 모든 노드가 Read/Write 요청을 수용할 수 있음
- 가십 프로토콜(gossip protocol)을 이용해 노드끼리 정보 업데이트 가능
- 멀티 마스터의 세계에서 Concurrent Update를 해결하기 위해 Reconcile하는 메커니즘이 필요함
- 카산드라는 Reconciliation 방법으로 Last-Write-Wins 모델을 사용함
2️⃣ MongoDB
- 도큐먼트 기반 데이터베이스
- 레플리카 집합의 구성원이 모든 요청을 처리함
- 자동 페일오버 중 샤드가 이용 불가능한 상태
- 따라서 Strongly Consistent 데이터베이스
- 샤드 키 선택이 데이터베이스 성능에 영향을 미침
- Hashed Sharding and Ranges Sharding 지원
- 데이터 인접성 개선을 위해 'Zone'개념 사용
- 프라이머리 노드와 세컨더리 노드 개념 존재
- 프라이머리 노드가 작동하지 않을 때 적격의 세컨데리가 프라이머리가 될 수 있음
- Write 요청을 처리할 때 Majority 인지 개념을 사용함
3️⃣ Redis
- 데이터베이스, 캐시, 메시지 브로커로 사용할 수 있는 오픈소스 데이터 스토어
- 가용성(availability)와 성능을 Consistency보다 더 선호함
- 마스터-슬레이브(master-slave) 아키텍처 사용
- 마스터 노드가 클라이언트의 Write 요청을 처리함
- Hashed Sharding and Ranges Sharding뿐만 아니라 여러가지 샤딩 메커니즘 지원
- Redis 클러스터의 모든 노드는 TCP 버스로 연결됨
- 가십 프로토콜(gossip protocol)을 이용해 노드끼리 정보 업데이트 가능
4️⃣ Kafka
- 이벤트 Publish/Subscribe 가능
- 이벤트 스트림을 견고하고(durably) 신뢰할 수 있게(reliably) 저장
- 가용성(availability)과 높은 일관성을 제공
- ZooKeeper를 사용하여 파티션 위치와 같은 메타데이터를 저장함
- 모든 동기화된 레플리카가 Write을 받기 전까지 Write이 커밋되지 않은 것으로 간주
- 동기화된 레플리카 내 리더 일렉션 가능
👉 핵심 개념: multi-master, consistent hashing, gossip protocol, eventual consistency, SPOF, reconciliation(Last-Write-Wins, CRDTs 등등), strong consistency, hashed sharing, ranges sharing, primary<->secondary/master<->slave, majority acknowledgement, zoning, leader-election, pub/sub
📌 추가로 공부하면 좋은 개념
개인적으로 분산 시스템을 공부할 때 함께 알아두면 좋은 개념 몇 가지 소개합니다.
- Quorum
- Consensus Algorithm
- Checksum
- Linearizability
- Write/Read Repair
- Split Brain Issue
- Load Balancing
- Hot Spots
- CAP Theorem
🪴 함께 읽으면 좋은 글:
데이터베이스 속을 들여다보자! 관련 자료 구조는?
https://careerly.co.kr/comments/76441
데이터베이스를 고를 때 고려해야 하는 요소
https://careerly.co.kr/comments/84381
꼭 알아야 할 분산 시스템의 개념 영어 단어
https://careerly.co.kr/comments/82560