(Cassandra) 카산드라?

1. 분산화와 집중화

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

대다수 분산데이터 솔루션(RDBMS 클러스터 등)에서는 다중머신에 데이터를 복사하는 복제프로세스를 설정해야 한다. 즉, 데이터를 다중 머신에 복사해서 동시에 발생하는 요청을 처리하게 하고 성능을 개선한다. 일반적으로 복제프로세스는 마스터/슬레이브 관계를 통해서 이루어진다. 클러스터에서 한 서버는 마스터, 나머지는 슬레이브가 된다.
마스터는 데이터의 원본 역할을 하고, 슬레이브 노드와는 일방적인관계, 즉 사본을 동기화 하는 형태로만 동작한다. 만일 마스터노드에 장애가 발생하며 전체 데이터베이스가 위험에 처하게 된다. 
그러므로 비집중화된 디자인은 카산드라 고가용성의 핵심이다. 참고로 MongoDB와 같은 NoSQL에도 마스터/슬레이브 구조가 있다.

<비집중화의 두가지 장점>
1. 마스터/슬레이브보다 사용하기 간단하고 서비스 중단을 피하게 해준다.
2. 모든노드가 같으므로 마스터/슬레이브 저장방식보다 분산형 저장이 유지하거나 운영하기가 더쉽다.


2. 탄력적인 확장성

확장성(Scalability)는 약간의 성능저하를 동반하지만, 계속해서 더 많은 요청을 처리할 수 있는 시스템의 아키텍처 특징이다. 가장 쉬운 방법은 단순히 기존 머신에 더 많은 메모리와 하드웨어 용량을 추가해서 확장성을 얻는 수직확장이다.
수평확장은 데이터 전체나 일부를 갖는 머신을 추가해서 요청처리를 여러 머신이 나눠 갖는 방법이다. 그러나 이렇게하려면 클러스터에 있는 다른 노드와 데이터를 동기화하고 유지하는 내부 매커니즘이 필요하다.

탄력적인 확장성(elastic scalability)는 수평확자의 특별한 속성으로, 클러스터의 중단 없이 규모를 확대하거나 축소할 수 있다는 뜻이다. 단지 새로운 머신을 추가해라. 그러면 카산드라가 새로 추가된 머신을 찾아내고 작업을 할당한다.
규모축소(scaling down)는 클러스터에서 처리 용량의 일부를 제거하는 것을 말한다. 애플리케이션의 일부를 다른 플랫폼으로 이전하거나 애플리케이션의 사용자가 떠나고 하드웨어를 매각해야 한다면 이렇게 할 것이다. 규모축소를 하더라도 전체 구성을 건드릴 필요는 없다.

3. 고가용성과 결함 허용

일반적인 아키텍처 용어로 시스템의 가용성은 요청을 수행하는 능력으로 측정한다.
고가용성 시스템을 구축하려면 일반적으로 다중네트워크로 구성된 컴퓨터, 클러스터에서 운용할 수 있는 소프트웨어, 노드 장애를 인식하고 시스템의 다른 부분으로 요청을 대체 할 수 있는 기능을 갖춰야 한다.

카산드라는 고가용성을 지원한다. 클러스터에서 시스템을 중단하지 않고 장애가 발생한 노드를 교체 할 수 있고, 다중 데이터 센터에 데이터를 복제해 로컬 성능을 개선할 수 있으며,한 데이터 센터가 화재나 홍수 같은 치명적인 재앙을 당하더라도 다중 데이터 센터에 데이터를 복제해서 서비스 중단을 예방할 수 있다.

4. 조정가능한 일관성

일반적으로 일관성은 항상 가장 최근에 기록된 값을 읽는다는 뜻이다. 예를들어, 전자상거래 사이트에서 동시에 같은 상품을 장바구니에 추가하려는 두 고객이 있다고 해보자. 다른사람이 장바구니에 상품을 추가한 직후에 마지막 남은 상품을 내 장바구니에 추가한다면 마지막 상품은 다른 사람의 장바구니에 있어야 하며, 나에게는 구매할 수 없는 상품이라고 알려줘야 한다. 일관성은 쓰기의 상태가 데이터를 가진 모든 노드에서 일관될 때 보장된다.

그러나 데이터 저장소를 확장한다는 것은 데이터의 일관성, 노드 가용성, 그리고 파티션 허용사이에 등가교환이 발생한다는 뜻이다.
즉 카산드라는 전체가용성을 달성하기 위해 일관성을 약간 희생한다.


<일관성의 종류>
1.


<브루어의 CAP정리>

CAP정리에 따르면 대규모 분산 데이터 시스템에는 슬라이딩 의존성과 관계를 맺는 세 가지 요건, 일관성, 가용성, 파티션 허용이있다.

1. 일관성(C)
모든 데이터베이스 클라이언트는 같은 쿼리에 대해 같은 값을 읽어야 한다. 이는 업데이트가 동시에 진행되는 상황에서도 만족해야 한다.

2. 가용성(A)
모든 데이터베이스 클라이언트는 항상 데이터 읽기와 쓰기가 가능해야 한다.

3. 파티션허용(P)
데이터베이스는 다중머신으로 분리되어도 동작해야 한다. 즉 네트워크 일부가 장애상황이어도 기능을 계속 수행 할 수 있어야 한다.

브루어의 정리에 따르면 분산 시스템은 셋 중에 두 가지만 강력하게 지원할 수 있다.

그러면 CAP의 세 면에서 오직 두 개만 지원하는 용어의 실제 의미는 무엇일까?

CA: 일관성(C)과 가용성(A)을 우선적으로 지원하는 것으로 분산 트랜잭션에는 2단계 커밋을 사용할 가능성이 크다. 네트워크 파티션이 발생하면 시스템이 블록되므로 블록을 최소화하려는 시도로 여러분의 시스템은 단일 데이터 센터 클러스터로 제한될 것이다. 애플리케이션이 오직 이정도 레벨의 확장만 필요하다면 CA는 관리하기 쉬우면, 익숙하고 간단한 구조만으로 충분하다.예)관계형 데이터베이스

CP: 일관성과 파티션허용(P)을 우선적으로 지원하는 것으로 확장하려면 데이터 샤드를 설정해 아키텍처를 발전시킬 수 있다. 데이터는 일관성을 갖지만, 노드에 장애가 발생하면 일부 데이터를 사용할 수 없는 위험이있다.예)MongoDB, HBase, Hypertable, Redis등

AP:가용성과 파티션 허용을 우선적으로 지원하는 것으로 시스템이 정확하지 않은 데이터를 반환할 수 도 있지만, 네트워크 파티셔닝이 발생하는 상황에도 시스템은 항상 가용할 수 있다. 아마 DNS가 대규모 확장성, 고가용성, 파티션허용을 하는 시스템의 가장 유명한 예일 것이다.


<로우지향>
카산드라는 "칼럼지향" 데이터베이슬 언급되며, 관계형 구조가 아니며 희소 다차원 해시테이블로 구조를 표현한다. 희소(Sparse)는 로우가 하나 이상인 컬럼을 가질 수 있지만, 각 로우가 다른 로우와 똑같은 칼럼을 모두 가질 필요는 없다는 뜻이다.(모든 로우가 똑같은 칼럼을 가지는 구조는 관계형 모델이다)
각 로우에는 고유킥 있으며,고유키로 데이터에 접근 한다.

카산드라는 다차원 해시테이블에 데이터를 저장한다고 간주 할수 있다. 이는 데이터구조가 어떄야 하는지,레코드에 무슨 필드가 필요한지 등을 미리 결정할 필요가 없다는 뜻이다.
이와 같은 특성은 프로젝트 시작 단계 또는 기능의 추가/변경이 많은 경우에 매우 유용하다. 또한 애자일 개발방법론이나 선행분석을 위한 시간이 제한적인 경우에도 매력적이다.

<스키마 프리>

카산드라는 컬럼 패밀리를 담는 외곽 컨테이너, 즉 키스페이스를 정의해야 한다. 키스페이스는 컬럼 패밀리와 특정 환경 구성 속성을 담고 있는 논리적 네임스페이스 일 뿐이다.
컬럼 패밀리는 연관 데이터와 정렬 순서에 대한 이름이다. 그 밖에도 데이터 테이블도 희소, 즉 흩어져 있는 구조이므로 원하는 컬럼에 데이터를 추가하기만 하면 된다.
컬럼을 미리 정의할 필요가 없다.

<고성능>
카산드라는 처음부터 멀티프로세서/멀티코어 머신을 최대한 활용하고 다중 데이터 센터에 설치된 수백 대의 머신 사이에서 실행되도록 설계되었다. 카산드라는 수백 테라바이트까지도 긴미라게 확장되며, 엄청난 부하 상황에서도 뛰어난 상황을 보여줬다.

댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기