Apache Cassandra
는 확장성과 고가용성을 보장하는 오픈소스 NoSQL 분산 데이터베이스
입니다.
분산과 확장은 카산드라의 핵심 기능입니다.
유연하게 분산과 확장이 가능하고, 이를 통해 데이터 성능을 향상 시키고 손실을 방지합니다.
DataCenter
복제 및 워크로드 분리를 위해 클러스터 내에서 함께 구성된 관련 노드 그룹입니다.
Cluster
가십 프로토콜을 사용하여 메시지를 교환하는 둘 이상의 데이터베이스 인스턴스입니다.
Node
데이터가 모여 있는 단일 인스턴스를 노드라고 합니다.
Keyspace
데이터 센터별로 데이터 세트가 복제되는 방식을 정의합니다.
키스페이스는 테이블을 포함합니다.
Table
파티션 모음에 대한 형식화된 스키마를 정의합니다.
테이블은 열과 행이 있는 파티션을 포함합니다.
Parition
모든 행이 저장된 클러스터의 노드를 식별하기 위해 반드시 있어야 하는 기본 키의 필수 부분을 정의합니다.
모든 성능 쿼리는 쿼리에 파티션 키를 제공합니다.
Row
파티션 키로 구성된 고유한 기본 키로 식별되는 열 모음과 선택적으로 추가 클러스터링 키가 포함됩니다.
Column
행에 속하는 유형의 단일 데이터로, Name + Value로 구성됩니다.
CQL
Cassandra Query Language
로 데이터베이스 스키마를 생성하고 데이터에 액세스합니다.
SQL과 유사한 언어로 개발자는 CQL을 통해 노드 클러스터에 데이터를 구성합니다.
다음으로 카산드라의 특징을 알아보겠습니다.
카산드라는 Node
를 통해서 분산과 확장이 이루어 집니다.
서비스 상황에 맞게 다운타임 없이 언제든 노드를 확장하거나 축소할 수 있습니다.
노드는 단일 인스턴스로 P2P 통신 프로세스인 Gossip Protocol
을 통해 다른 노드와 통신합니다.
또한 노드는 선형 확장으로 무한대로 적용이 가능합니다.
그래서 많은 글로벌 IT 서비스 기업들이 카산드라를 선택하고 있습니다.
실제로 애플은 오랜 기간 카산드라를 사용했습니다.
알려진 바로 애플은 10만 개 이상의 노드를 실행 중입니다.
카산드라는 Partition
을 통해 데이터를 분산합니다.
노드는 특정 토큰 범위를 가지는 토큰 세트가 있습니다.
그리고 모든 테이블은 Partition Key
를 지정합니다.
파티션 키는 Hashing Function
을 통해 해쉬 값으로 변환됩니다.
이 해쉬 값이 바로 토큰이 되고, 토큰 범위에 맞는 노드로 데이터가 배포됩니다.
카산드라 데이터베이스는 마스터리스 아키텍처입니다.
그래서 모든 노드는 다른 노드와 똑같은 기능을 제공할 수 있습니다.
그리고 Replication
설정을 통해 데이터를 여러 노드에 복제할 수 있습니다.
Replication Factor(RF)
값으로 복제 개수를 정할 수 있습니다.
데이터 복제는 안정성과 내결함성을 보장합니다.
그래서 일부 노드에 장애가 발생해도 안정적인 서비스 운영이 가능합니다.
만약 세 개의 복제본 중에 하나의 복제본에 장애가 발생했습니다.
그러면 두 개의 복제본을 통해 서비스가 이루어 지고, 장애 복제본이 복구되면 다시 데이터가 연동됩니다.
모든 것은 자동으로 이루어 집니다.
데이터 복제는 성능상의 이점도 있습니다.
하나의 데이터 센터의 데이터는 다른 데이터 센터로 자동 복제됩니다.
멀티 인스턴스를 지원하고, 데이터 로드 밸런싱이 가능하기 때문에 빠른 데이터 액세스가 가능합니다.
CAP
는 일관성(Consistency), 가용성(Availability), 분할 용인(Partition tolerance)이라는 세 가지 조건을 의미합니다.
분산 시스템에서는 세 가지 조건을 모두 만족할 수 없기 때문에, 보통 두 가지를 우선합니다.
카산드라는 AP(Available Parition-tolerant) 분산 시스템
입니다.
그래서 데이터 일관성을 유지하기 위해, 쿼리별로 일관성 수준(CL)을
구성할 수 있습니다.
만약 데이터가 3개의 노드로 복제됐고 CL 값이 QUORUM 이라면, 과반수인 2개(RF/2 + 1)의 노드에서 승인을 받아야 합니다.
카산드라는 온프레미스, 클라우드 등 어느 환경에 배포해도 간편하게 연동이 가능합니다.
그래서 유연하고 유기적인 시스템 구성이 가능합니다.