Bigtable

빅테이블은 구글에서 개발한 분산 데이터 관리 시스템으로, 수백 내지 수천 대의 값싼 하드웨어 장비를 이용해 페타 바이트 이상의 구조화된 데잍터를 저장할 수 있다. 빅케이블은 범용성, 확장성, 고성능, 고가용성의 목표를 가지고 만들어진 시스템이다.

데이터 모델은 분산돼 있는 다차원으로 정렬된 맵이다. 모든 데이터는 row key. column key, timestamp로 정렬돼 있으며, value에는 바이트 배열을 저장할 수 있다. 데이터 모델을 구성하는 주요 엘리먼트는 row, column family, timestamp 등이 있다

하나의 테이블에 저장된 데이터는 row key로 유일하게 식별된다. 읽기/쓰기 연산은 하나의 열 단위로 원자적으로 처리된다. 빅ㅌ이블은 하나의 아주 큰 테이블을 row key의 영역을 이용해 파티셔닝하며, 파티셔닝된 단위를 테블릿tablet이라고 부른다. 하나의 테블릿은 특정 서버에 의해 서비스되며, 하나의 서버는 수 천개의 테블릿을 서비스 한다.

파티셔닝 범위, 서비스 서버 등과 같은 파티셔닝에 대한 정보는 하나의 루트 테블릿과 다수의 메타 테블릿에 저장된다. 루트 테블릿을 서비스하는 서버의 정보는 zookeeper 와 같은 역할을 하는 chuby (distributed lock service)에 저장되며, 루트 테블릿에서 하나의 열에는 하나의 메타 tablet에 대한 정보 (tablet 이름, 최대 row key, 서버 정보)를 저장한다. 메타 테블릿에서 하나의 열에는 사용자 테이블에 있는 하나의 테블릿에 대한 정보를 저장한다. 특정 row key를 서비스하는 사용자 테이블의 테블릿과 테블릿 서버를 찾기 위해 chuby -> 루트 테블릿 – > 메타 테블릿 순으로 찾는다.

bigtable_architecture

하나의 빅테이블 클러스터는 하나의 마스터 서버와 다수의 테블릿 서버로 구성된다. 마스터 서버는 마타 정보 같이 클러스터 관리에 필요한 정보를 갖고 있지 않기 때문에 마스터 장애 시에도 데이터 서비스는 영향을 받지 않는다. 마서터 서버는 테블릿을 할당하거나, 테블릿 서버가 클러스터에 추가/제거되는 것을 감지하고, 테블릿 서버의 부하 분산과 구글 파일 시스템에 저장된 파일에 대한 가비지 컬렉션을 수행한다. 테블릿 서버는 테블릿을 관리하고 클라이언트로부터 데이터 읽기/쓰기 요청을 받아 처리한다. 하나의 테블릿 서버는 수천 개까지 ㅌ에블릿을 서비스하고, 하나 테블릿 크기는 100~200MB이다.

빅테이블은 구글 파일 시스템, 맵리듀스(MapReduce), 처비(chuby) 등과 같은 구글 내부의 여러 분산 플랫폼을 이용한다. 빅테이블은 구글 파일 시스템을 데이터 파일이나 커밋 로그 저장용으로 사용한다. 구글 파일 시스템에서 하나의 파일은 3개의 복제본을 갖고 있기 때문에 추가적인 백업이 필요 없으며, 수천 노드 이상으로 확장할 수 있는 확장성과 복제본 간의 정합성을 제공한다.

구글 파일 시스템은 하둡 파일 시스템의 기본 설계를 제공한 파일 시스템이다. 구글 파일 시스템 역시 파일의 랜덤쓰기 기능을 제공하지 않기 때문에 이미 저장된 파일을 수정하는 것이 불가능하다. 파일 시스템의 이런 제약 때문에 빅테이블은 메모리 기반In-Memonry, 디스크기반On-Disk 데이터 관리 시스템의 속성을 모두 갖고 있다. 빅테이블의 쓰기 연산은 데이터 파일을 직접 수정하지 않고 메모리에만 쓰기 연산의 내용을 기록한다. 메모리가 일정 크기에 도달하면 메모리의 내용을 파일 시스템으로 저장한다. 쓰기 연산을 메모리에만 저장하기 때문에 테블릿 서버에 장애가 발생한 경우 데이터 복구를 위해 모든 쓰기 연산 처리시 구글 파일 시스템에 커밋 로그를 저장한 후 메모리에 저장한다.

빅테이블에 저장된 데이터에 대해 대규모의 분석 작업이 필요한 경우 맵리듀스 플랫폼을 이용하며, 분산 처리되는 단위는 하나의 테블릿이다. 처비는 분산 락 서비스를 제공하는 시스템으로, 빅테이블에서는 루트 메타 정보를 서비스하는 테블릿 서버의 위치 정보, 테이블의 스키마 정보 등을 저장하거나 여러 마스터 서버가 동시에 실행 중일 때 유요한 마스터 서버를 선출하거나, 테블릿 서버의 장애 상황을 발생을 감지하는 등에 사용한다. 하나의 처비 셀은 5개의 노드로 구성되며, 노드 간의 모든 정보는 동기화돼 마스터 정보에 대한 SPOF(Single Point Of Failure) 지점을 없애는 역할을 수행한다. 빅테이블은 구글 파일 시스템을 이용함으로써 데이터의 정합성은 보장하지만 네트워크 단절 상황에서 가용성을 지원하지 않는다.

빅테이블은 웹 페이지 인덱싱, Google Earth, Google Finance, Google Analytics, personalized Search 등 이미 구글의 많은 서비스에 적용 중이다.

아파치 같은 오픈소스 진영이나 인터넷 서비스 업체들이 빅테이블의 개념을 도입한 시스템을 발표하고 있으며, 이들 대부분은 공개 소프트웨어다.

Source

Related Links