분산 설계: Dynamo 스타일
분산 설계: Dynamo 스타일 (Dynamo)
Apache Cassandra는 Amazon의 Dynamo 분산 저장 키-값 시스템에서 여러 기법을 차용하고 있어요. Dynamo 시스템의 각 노드는 세 가지 주요 구성 요소를 가져요.
- 파티셔닝된 데이터셋에 대한 요청 조정(request coordination)
- 링 멤버십과 장애 감지(ring membership and failure detection)
- 로컬 영속화(저장) 엔진
Cassandra는 주로 첫 두 개의 클러스터링 구성 요소를 따르고, 저장 엔진은 LSM(Log Structured Merge Tree) 기반으로 자체 설계해 사용해요.
Dynamo 스타일 기법
Cassandra는 특히 다음의 Dynamo 스타일 기법에 의존해요.
- 일관된 해싱(consistent hashing)을 이용한 데이터셋 파티셔닝
- 버전 관리된 데이터와 조정 가능한 일관성(tunable consistency)을 이용한 멀티마스터 복제
- 가십 프로토콜(gossip protocol)을 통한 분산 클러스터 멤버십과 장애 감지
- 상용 하드웨어(commodity hardware)에서의 증분 스케일아웃
필요한 이유
Cassandra는 대규모(PiB급 이상) 운영상 중요한 저장 요구를 충족하기 위해 이렇게 설계됐어요. 특히 애플리케이션이 완전한 글로벌 규모로 확장되기를 요구하면서, 모든 지역의 모든 노드가 독립적으로 쓰기 요청을 처리할 수 있는 멀티마스터 모델이 필요해졌어요. 단일 마스터나 리더가 있는 구조가 아니라 모든 노드가 같은 권한으로 요청을 처리하는 방식이죠.
일관된 해싱으로 데이터를 고르게 분산하고, 가십 프로토콜로 클러스터 멤버십 변화와 노드 장애를 함께 감지하면서, 값싼 상용 하드웨어를 추가하는 것만으로도 시스템을 점진적으로 확장할 수 있게 돼요.