"아파치 카산드라(Apache Cassandra)" 개념/장점/단점

2022. 3. 21. 17:25기술/카산드라

728x90

 

 

 

아파치 카산드라
(Apache Cassandra)



 

아파치 카산드라 개념
 

카산드라(Cassandra)는 대용량 데이터 처리가 가능한 비관계형 분산 데이터베이스 관리 시스템(DBMS)이다. 
빅데이터 처리를 위한 노에스큐엘(NoSQL)의 일종이다. 
페이스북(Facebook)이 개발했고 오픈소스로 공개했다. 
정식 명칭은 아파치 카산드라(Apache Cassandra)이고, 아파치재단에서 관리하고 있다.

 

 

 

카산드라 DB 장점

 

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

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

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

  • 조정가능한 일관성
    일반적으로 일관성은 항상 가장 최근에 기록된 값을 읽는다는 뜻이다. 
    예를 들어, 전자상거래 사이트에서 동시에 같은 상품을 장바구니에 추가하려는 두 고객이 있다고 해보자. 
    다른 사람이 장바구니에 상품을 추가한 직후에 마지막 남은 상품을 내 장바구니에 추가한다면 마지막 상품은 다른 사람의 장바구니에 있어야 하며, 나에게는 구매할 수 없는 상품이라고 알려줘야 한다. 
    일관성은 쓰기의 상태가 데이터를 가진 모든 노드에서 일관될 때 보장된다. 그러나 데이터 저장소를 확장한다는 것은 데이터의 일관성, 노드 가용성, 그리고 파티션 허용 사이에 등가교환이 발생한다는 뜻이다. 
    즉 카산드라는 전체가용성을 달성하기 위해 일관성을 약간 희생한다.

 

 

카산드라 DB 단점

 

  •  연결(Join)이나 거래(Transaction)를 지원하지 않는다. 
  •  인덱스(Index) 등의 검색을 위한 기능이 매우 단출하다. 
  •  카산드라의 구조상 관계형 데이터베이스 관리 시스템(RDBMS)와 같은 Paging을 구현하는 것이 힘들고,
     키 스페이스(Key space)나 테이블(Table) 등을 과도하게 생성할 경우                                                             메모리 오버플로어(Memory Overflow)가 발생할 수 있음을 고려해야 한다. 

 

 

 

 

 

 

카산드라 데이터 구조

 

최상위에 논리적데이터 저장소인 키 스페이스(key space)가 있고, 키 스페이스 아래에는 테이블(Table)이 존재한다.
Table은 다수의 로우들로 구성되어있으며 각 로우는 키 값(Key Value)으로 이루어진 칼럼들로 구성된다. 
카산드라는 카산드라 쿼리 언어(CQL)를 지원하고 있다.

 

카산드라 데이터 구조

 

 

 

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

 

카산드라 링(Ring)

 

 

728x90