Contents

1. 카산드라 개요

2. 카산드라 특징

3. 카산드라 장점

4. 카산드라 단점

5. 카산드라 데이터 구조

 

 

 

 

 

 

 

이번에 신규로 프로젝트를 진행하게 됬는데, 해당 프로젝트에서 카산드라를 사용하고 있다.

프로젝트를 진행할 수 있을 정도로 카산드라가 무엇인지, 간단하게 알아보자. 

 

 

 

 

1. 카산드라 개요

 아파치 카산드라(Apache Cassandra)는 자유 오픈 소스 분산형 노에스큐엘(NoSQL) 데이터베이스 관리 시스템(DBMS)의 하나로, 단일 장애 점 없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위해 설계되었다.

카산드라는 여러 데이터센터에 걸쳐 클러스터를 지원하며 마스터리스(masterless) 비동기 레플리케이션을 통해 모든 클라이언트에 대한 낮은 레이턴시 운영을 허용하며, 성능 면에서 높은 가치를 보인다. 

 

 Amazon의 Dynamo 분산 스토리지 및 복제 기술과 Google의 Bigtable 데이터 및 스토리지 엔진 모델이 결합된 모델로 처음에 단계적 이벤트 기반 아키텍처 (SEDA)를 사용하여 Facebook에서 설계되었다.

 

 

 

2. 카산드라의 특징

 

  • 여러개의 데이터 베이스가 복제된다. (마스터기준)
  • 짧은 지연 시간
  • 프로세스가 추가될 때마다 선형 처리량 증가
  • 온라인 부하분산
  • 분할된 키 지향 쿼리
  • 유연한 스키마

카산드라는 SQL과 비슷한 Cassandra Query Language (CQL)을 이용한다.

  • Keyspace : 데이터세트를 어떻게 구성할 것인지에 대한 정의를 한다. 예를들어 데이터의 사본 수
  • Table: 데이터 스키마를 정의한다.
  • Partition:  모든 행에 있어야 하는 기본 키의 필수 부분을 정의한다. 
  • Row: 파티션 키 및 선택적으로 추가 클러스터링 키로 구성된 고유한 기본 키로 식별되는 열 모음
  • Column: 해당 테이블에서 행에 속하는 열을 말한다.

 

 

 

3. 카산드라 장점

 

분산화와 집중화

카산드라는 분산형이므로 여러 머신에서 동작하지만, 사용자에게는 통합된 하나로 보인다. 카산드라는 단일노드로도 동작하지만, 카산드라 운영의 장점을 깨달으려면 다중머신에서 운영해야 한다. 그래서 물리적으로 떨어져 있는 데이터센터 간에도 단일 카산드라 클러스터를 운영할 수 있다. MySQL, 빅테이블과 같은 데이터 저장소를 확장하려면 일부 노드는 마스터로 설정해서 슬레이브로 설정한 다른 노드를 조직화해야한다. 그러나 카산드라는 "비집중화"이므로 모든 노드가 같다. 그러므로 조직화 연산을 수행하는 마스터가 없다. 대신 카산드라는 피투피(P2P) 프로토콜이며 활성 노드와 비활성 노드의 목록을 동기화하고 유지관리한다.

 

 

탄력적인 확장성

약간의 성능 저하를 동반하지만, 계속해서 더 많은 요청을 처리할 수 있는 시스템의 아키텍처 특징이다. 가장 쉬운 방법은 단순히 기존 머신에 더 많은 메모리와 하드웨어 용량을 추가해서 확장성을 얻는 수직 확장이다. 수평 확장은 데이터 전체나 일부를 갖는 머신을 추가해서 요청처리를 여러 머신이 나눠 갖는 방법이다. 그러나 이렇게 하려면 클러스터에 있는 다른 노드와 데이터를 동기화하고 유지하는 내부 매커니즘이 필요하다. 탄력적인 확장성(elastic scalability)은 수평 확장의 특별한 속성으로, 클러스터의 중단 없이 규모를 확대하거나 축소할 수 있다는 뜻이다. 하나의 카산드라를 추가해보자. 그러면 카산드라가 새로 추가된 머신을 찾아내고 작업을 할당한다. 규모축소(scaling down)는 클러스터에서 처리 용량의 일부를 제거하는 것을 말한다. 애플리케이션의 일부를 다른 플랫폼으로 이전하거나 애플리케이션의 사용자가 없어져 클러스터를 줄여야 한다면 이런 상황이 발생할 수도있다. 규모축소를 하더라도 전체 구성을 건드릴 필요는 없다.

 

 

고가용성과 결함 허용

일반적인 아키텍처 용어로 시스템의 가용성은 요청을 수행하는 능력으로 측정한다. 고가용성 시스템을 구축하려면 일반적으로 다중네트워크로 구성된 컴퓨터, 클러스터에서 운용할 수 있는 소프트웨어, 노드 장애를 인식하고 시스템의 다른 파티션으로 요청을 대체 할 수 있는 기능을 갖춰야 한다. 카산드라는 고가용성을 지원한다. 클러스터에서 시스템을 중단하지 않고 장애가 발생한 노드를 교체 할 수 있고, 다중 데이터 센터에 데이터를 복제해 로컬 성능을 개선할 수 있으며, 한 데이터 센터가 화재나 홍수 같은 치명적인 재앙을 당하더라도 다중 데이터 센터에 데이터를 복제해서 서비스 중단을 예방할 수 있다.

 

 

 

 

 

4. 카산드라 단점

 

높은 진입장벽

칼럼형 데이터베이스로 로우형 데이터베이스인 관계형 데이터베이스와는 다른 생소한 개념이라 진입장벽이 높다.

 

 

복잡한 조건의 검색 불가

많은 사용자를 대상으로 대량 데이터를 다루는 서비스가 아닐 경우 쓸 필요는 없다. 그리고 복잡한 조건의 검색이 불가능하다. 로우 키와 칼럼 두가지에 대한 인덱스만 가능하기 때문에 데이터는 대량이지만 검색 조건은 단순한 서비스에 적합하다. 슈퍼 칼럼 구성(Super Column family)의 하위 칼럼에 대한 인덱싱은 불가능하다. 키 값을 통한 범위 검색은 데이터 분산 방식을 오더프레스파티셔너(OrderPresservingPartitioner)로 설정하여 키 값을 통해 데이터를 서버에 분배했을 경우에만 가능하다.

 

데이터 입력시 자동화 처리가 어려움

데이터를 입력 시에도 자동화한 처리가 어렵다. 데이터에 대한 락을 사용하려면 주키퍼(Zookeeper)와 같은 전체분산 서버를 관리하는 프로그램을 추가해서 별도로 설정해야 한다. 데이터에 대한 동시 갱신 요청이 발생할 가능성이 높거나 자동화한 트랜잭션이 필요한 서비스에서는 다른 데이터베이스를 고려해야 한다. 

 

 

 

5. 카산드라 데이터 구조

카산드라의 데이터 구조

 

카산드라의 데이터 구조는 비교적 간단하다. 최상위에 논리적 데이터(Data) 저장소인 키 스페이스(Key space)가 있고, 키 스페이스 아래에는 테이블(Table)이 존재한다. Table은 다수의 로우들로 구성되어있으며 각 로우는 키 값(Key Value)으로 이루어진 칼럼들로 구성된다. 관계형 데이터베이스 관리 시스템의 데이터베이스 테이블 로우 칼럼(DB-Table-Row-Column)의 형태와 유사한 구조를 하고 있다는 걸 알 수 있다. 

 

 

 

 

 

카산드라는 기본적으로 링(Ring) 구조를 띠고 있다. 그리고 링을 구성하는 각 노드에 데이터(Data)를 분산하여 저장한다. 파티션 키라고 불리는 데이터의 해시(hash)값을 기준으로 데이터를 분산하게 된다. 처음 각 노드가 링에 참여하게 되면, 카산드라의 conf/cassandra.yaml에 정의된 각 설정을 통하여 각 노드마다 고유의 해시 값 범위를 부여받는다. 그런 뒤에, 외부에서 데이터의 요청이 오게 되면 해당 데이터의 파티션 키의 해시 값을 계산하여 해당 데이터가 어느 노드에 저장되어 있는지 알고 접근할 수 있는 것이다. 그리고, 카산드라는 이렇게 계산된 hash의 값을 토큰(token)이라고 부른다.카산드라 쿼리 언어의 사용을 권장하고 있지만 카산드라 쿼리 언어가 처음부터 제공되었던 것은 아니다.

 

 

 

 

 

NoSql 관련 성능 비교

 

www.datastax.com/products/compare/nosql-performance-benchmarks

 

NoSQL Performance Benchmarks | Comparison

DataStax is the company behind the massively scalable, highly available, cloud-native NoSQL data platform built on Apache Cassandra™.

www.datastax.com

'Infra > ETC' 카테고리의 다른 글

Message Queue 란? MQ 종류  (2) 2022.01.15
[Github] 일명.. 잔디심기 그래프 안 채워지는 경우  (1) 2021.07.11
CORS 처리하기 !!  (0) 2021.05.01
[ZooKeeper] 아파치 주키퍼란?  (2) 2021.03.21
[Kafka] 아파치 카프카란?  (0) 2021.03.18

+ Recent posts