클라우드

구글 클라우드 빅테이블 총정리

김구티2 2024. 2. 23. 21:09

1. 구글 클라우드 빅테이블(GCB)의 개념

구글 클라우드 빅테이블에는 테라바이트 또는 심지어 페타바이트의 데이터를 저장할 수 있다. row 키는 모든 행에 나타나는 단독 인덱스 값이며, row 값이라고도 한다. 구글 클라우드 빅테이블은 대량의 단일 키 데이터 + 낮은 대기 시간 저장을 가능하게 한다. 이런 low latency로 뛰어난 읽기 및 쓰기 처리량을 가능하게 하기 때문에 맵리듀스 프로세스를 위한 완벽한 데이터 소스라고 할 수 있다.

응용 프로그램은 Apache HBase 라이브러리로 지원되는 Java 확장을 포함하여 다양한 클라이언트 라이브러리를 통해 Google Cloud BigTable에 액세스할 수 있다. 이 때문에 현재 오픈 소스 빅 데이터 소프트웨어의 Apache 에코시스템과 호환된다.

GCB의 강력한 백엔드 서버는 자체 관리 HBase 설치에 비해 분명 여러 가지 이점을 제공한다.
① 탁월한 확장성: GCB는 클러스터의 시스템 수에 정비례하여 확장한다. 특정 시점 이후에는 자체 관리되는 HBase 시스템에 설계 병목 현상이 발생하여 성능이 제한된다. 하지만 이러한 병목 현상은 GCB에는 발생하지 않으므로 더 많은 읽기 및 쓰기를 지원하도록 클러스터를 확장할 수 있다.
② 간편한 관리: GCB는 업그레이드 및 재시작을 투명하게 처리하며, 자동으로 강력한 데이터 내구성을 유지한다. 데이터 복제를 시작하려면 인스턴스에 두 번째 클러스터를 추가하기만 하면 바로 복제가 시작된다. 테이블 스키마를 정의하기만 하면 나머지는 구글 클라우드 빅테이블이 처리한다. 더욱 간편할 수밖에 없는 것이다.
③ 중단을 최소화하면서 클러스터 확장: 다운타임 없이 몇 시간 동안 용량을 늘린 후 구글 클라우드 빅테이블 클러스터를 축소하여 많은 부하를 처리할 수 있다. 부하가 걸린 상태에서 GCB는 클러스터 크기를 수정한 후 몇 분 안에 클러스터의 모든 노드에서 성능 균형을 유지한다.

2. 빅테이블의 사용 이유

구글 클라우드 빅테이블은 키/밸류 데이터에 대한 높은 처리량과 확장성을 요구하는 애플리케이션(일반적으로 각 값이 10MB 이하)에 사용되어야 한다. 또한 구글 클라우드 빅테이블은 머신 러닝, 스트림 처리 및 배치 맵리듀스 작업을 위한 스토리지 엔진으로서 탁월하다.

 

다양한 서버에 걸친 CPU 및 메모리 사용 패턴과 같은 시계열 정보, 소비자 선호도, 구매 내역 등 마케팅 정보 주가, 환율, 거래 내역 등의 금융 정보, 가전제품의 소비 통계와 에너지 미터와 같은 사물 인터넷 데이터. 사용자 간의 연결에 대한 세부 정보를 포함하는 그래프 데이터까지 이러한 모든 형태의 데이터는 GCB를 사용하여 저장 및 검색할 수 있다. 사실상 대부분의 주요 범주가 해당되는 것이다.

3. 빅테이블 스토리지

구글 클라우드 빅테이블의 각 대규모 확장 가능한 테이블은 데이터를 저장하는 정렬된 키/값 맵이다. 테이블은 각 행의 고유한 값을 포함하는 열과 일반적으로 단일 개체를 설명하는 행으로 구성된다. 각 행을 색인화하기 위해 단일 행 키가 사용되며, 관련 열로 열 패밀리를 구성하는 경우가 많다. 각 열을 식별하기 위해 열 패밀리와 열 패밀리 내의 고유한 이름인 열 한정자를 결합한다.

각 행/열 교차점에 여러 개의 셀이 존재할 수 있다. 각 셀에는 해당 행과 열에 대한 데이터의 타임스탬프된 별개의 복사본이 있다. 많은 셀을 열에 넣으면 해당 행과 열에 대한 기록된 데이터의 이력이 보존된다. 구글 빅테이블 테이블의 클라우드는 희소성이 있어서 주어진 행에 열이 사용되지 않으면 공간을 차지하지 않는다. 여기서 우리는 열 행이 비어 있을 수도 있다는 점을 기억해야 한다.

특정 행과 열에는 개별 타임스탬프(t)가 있는 셀이 포함된다.

 

구글 클라우드 빅테이블 아키텍처를 통해 만들어진 모든 클라이언트 쿼리는 프론트엔드 서버를 통해 보내진 후 구글 클라우드 빅테이블 노드로 전달된다. 노드들은 클러스터의 컨테이너이자 구글 클라우드 빅테이블 인스턴스의 일부인 구글 클라우드 빅테이블 클러스터로 배열된다.

각 노드는 클러스터에 대한 요청 중 일부를 처리한다. 노드를 추가하면 클러스터에서 처리할 수 있는 동시 요청 수를 늘릴 수 있다. 노드를 추가하면 클러스터의 최대 처리량이 증가한다. 클러스터를 추가하고 복제가 활성화되면, 여러 종류의 트래픽을 여러 클러스터로 보낼 수 있게 된다. 그때에 한 클러스터를 사용할 수 없으면 다른 클러스터로 페일오버할 수 있다.

중요한 것은 데이터가 구글 클라우드 빅테이블 노드에 실제로 저장되는 것은 결코 아니며, 각 노드에는 콜로서스에 보관된 태블릿 모음에 대한 포인터가 포함되어 있다는 것이다. 실제 데이터는 복제되지 않기 때문에 한 노드에서 다른 노드로 태블릿 재조정이 빠르게 진행된다. 구글 클라우드 빅테이블 노드에 장애가 발생해도 데이터가 손실되지는 않으며, 메타데이터만 새 노드로 이동해야 하므로 노드 장애에서 복구가 빠른 편이다. 구글 클라우드 빅테이블은 각 노드의 포인터만 변경한다.

4. 로드 밸런싱

기본 프로세스는 각 구글 클라우드 빅테이블 영역을 관리하며 클러스터 내에서 작업량과 데이터 볼륨의 균형을 유지한다. 이 프로세스는 더 큰(혹은 바쁜?) 태블릿을 절반으로 나누고 사용량이 적은 태블릿을 결합하여 필요에 따라 여러 노드에서 태블릿을 이동시킨다. 구글 클라우드 빅테이블은 트래픽이 급증하면 태블릿을 두 개로 나눈 다음 새로운 태블릿 중 하나를 다른 노드로 이동시킨다. 구글 클라우드 빅테이블로 자동으로 분할, 병합 및 재조정을 처리하면 태블릿을 수동으로 관리할 필요가 없게 된다. 계속해서 GCB는 자동적으로 처리할 수 있는 장점을 보여주고 있는 것이다.

구글 클라우드 빅테이블에서 최적의 쓰기 성능을 얻으려면 노드 간에 가능한 한 균등하게 쓰기를 분배하는 것이 중요하다. 이를 위해서는 순서를 예측할 수 없는 행 키를 사용하는 방법이 있다.

또한, 여러 행을 한 번에 여러 개의 행으로 묶어서 읽을 수 있게 해준다. 예를 들어, 여러 종류의 날씨 데이터를 시간에 걸쳐 보관하고 있다면, 데이터가 수집된 장소에 행 키가 있고 타임스탬프가 있을 수 있다. 이런 종류의 행 키를 사용하여 한 위치의 모든 데이터를 결합하면 연속된 범위의 행이 생성된다. 여러 사이트가 동일한 속도로 데이터를 수집하는 경우에도 쓰기는 태블릿 간에 균일하게 분산된다. 만일 다른 장소의 경우, 행은 새로운 식별자로 시작될 것이다.

5. 얻을 수 있는 데이터 유형

대부분의 경우 구글 클라우드 빅테이블은 모든 데이터를 원시 바이트 문자열로 취급한다. 구글 클라우드 빅테이블은 증가 연산 중에만, 목적지가 8바이트 빅-엔디안 값으로 인코딩된 64비트 정수여야 하며, 그 유형을 확인하려고 시도한다. 여기서 빅-엔디안이란, 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식이다. 이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식이라 할 수 있다. 따라서 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다는 장점을 가지고 있다.

6. 비활성 열(Columns)과 활성화 열

구글 클라우드 빅테이블 행에는 사용되지 않는 열을 위한 공간이 없다. 각 행은 기본적으로 키/값 항목의 집합으로 구성되며, 여기서 키는 타임스탬프, 열 패밀리, 열 수식자로 구성된다. 특정 열에 대한 값이 행에 없으면 키/값 항목은 그냥.. 없는 것이다. 열에 사용되는 각 열 수식어는 해당 행에 저장되기 때문에 열 수식어가 행의 공간을 차지한다. 따라서 열 수식어를 데이터로 사용하는 것이 효과적인 경우가 많다.

7. 압축

읽기와 쓰기를 더 효과적으로 만들고 제거된 항목을 제거하기 위해 GCB는 주기적으로 테이블을 다시 작성한다. 이 절차를 압축이라고 한다. 데이터는 GCB에 의해 자동으로 압축되고, 튜닝 옵션은 없다.

8. 제거 및 수정

구글 클라우드 빅테이블은 mutations를 순차적으로 저장하고 주기적으로만 압축하기 때문에 행에 대한 업데이트는 더 많은 저장 공간을 필요로 한다. GCB는 더 이상 필요하지 않은 값을 제거하여 테이블을 압축한다. 셀의 값을 변경하면 데이터가 압축될 때까지 원래 값과 업데이트된 값이 모두 디스크에 저장된다.


삭제는 사실 특정한 종류의 mutation이기 때문에 적어도 처음에는 더 많은 저장 공간이 필요하다. 왜냐하면, 삭제는 테이블이 압축될 때까지 공간을 해제하는 것이 아니라 추가 저장 공간을 소비하기 때문이다.

구글 클라우드 빅테이블은 영리한 알고리즘을 사용하여 데이터를 자동으로 압축한다. 테이블에 대한 압축 설정은 구성할 수 없다. 그러나 데이터를 효율적으로 저장하여 압축할 수 있도록 하는 것이 유용하다.

 

패턴화된 데이터는 무작위 데이터보다 더 효과적으로 압축할 수 있다. 압축은 동일한 값이 같은 행에 있을 때 또는 인접한 행에 있을 때 가장 효과적으로 수행된다. 텍스트는 패턴화된 데이터의 한 종류다. 데이터 조각이 비슷한 행이 서로 인접하도록 행 키를 배열하면 데이터를 효율적으로 압축할 수 있을 것이다.


GCB에 값을 저장하기 전에 1 MB보다 큰 값을 압축한다. 이 압축은 네트워크 트래픽, 서버 메모리 및 CPU 사이클을 보존한다. GCB에서 1 MB보다 큰 값은 압축이 자동으로 꺼지게 된다.

9. 데이터 수명

구글 클라우드 빅테이블을 사용할 때, 우리의 정보는 구글의 데이터 센터에 위치한 스토리지 구성 요소를 사용하는 내부의, 미칠듯이 복원력이 뛰어난 파일 시스템인 Colossus에 보관된다. 구글 클라우드 빅테이블을 사용하기 위해 우리는 HDFS 클러스터나 다른 유형의 파일 시스템을 실행할 필요가 없는 것이다.

또한, 구글은 기존의 것 이상으로 맞춤형 스토리지 기술을 사용하여 데이터의 지속성을 보장한다. 거기에 데이터를 복제하여 재해 복구 및 재난 상황에 대한 보호 기능까지 제공하니 수명 면에서도 엄청난 강점을 갖고 있다고 할 수 있다.

10. 모델의 신뢰성

단일 클러스터 강력한 일관성은 GCB 인스턴스를 통해 제공된다. 강력한 보안을 위해 신청할 수 있는 IAM은 특정 사용자가 새 인스턴스를 만들거나 테이블에서 읽거나 테이블에 쓰는 것을 막는다. 어떠한 다른 여타 권한이 있건, IAM 역할이 없는 사용자는 테이블에 액세스할 수 없게 된다.

그리고 프로젝트, 인스턴스 및 테이블 수준에서 보안을 관리할 수 있다. 구글 클라우드 빅테이블에서 지원하는 행 수준, 열 수준 또는 셀 수준의 보안 제약 조건은 사실상 없다.

11. 암호화

자체 암호화된 데이터에 사용하는 것과 동일한 강화된 키 관리 메커니즘은 GCB 테이블의 데이터를 포함하여 구글 클라우드 내에 저장된 모든 데이터에 기본적으로 사용된다. 고객 관리 암호화 키를 사용하면 정지 상태의 GCB Data(CMEK)를 보호하는 데 사용되는 키를 보다 쉽게 제어할 수 있다.

12. 백업

GCB 백업을 사용하면 테이블의 스키마와 데이터를 복사한 후 백업을 사용하여 새 테이블로 복원할 수 있다. 이 백업을 사용하면 테이블을 실수로 삭제하고 애플리케이션 수준의 데이터가 파괴되는 등의 오류도 복구할 수 있기에 업무 상의 이점이 존재한다 할 수 있다.

728x90