yoongrammer

CockroachDB 란 본문

Infra/CockroachDB

CockroachDB 란

yoongrammer 2020. 10. 25. 23:52
728x90

목차

    CockroachDB 란?


    CockroachDB는 최신 클라우드 애플리케이션을 위해 설계된 분산 데이터베이스입니다.

     

    Cockroach는 바퀴벌레라는 뜻이다. 왜 이런 이름으로 지었을까?
    바퀴벌레처럼 강한 생존력을 가졌다는 것을 어필하기 위해서입니다.
    CockroachDB의 기본 설계 목표는 바퀴벌레처럼 강한 생존력과 일관성입니다.

    특징


    CockroachDB의 특징은 아래와 같습니다.

    1. NewSQL(NoSQL+RDB) 사용
      • KV(keys-value) store (NoSQL)
      • PostgreSQL 문법과 호환됨 (RDB)
      • ACID transaction 지원 (RDB)
    2. horizontal scalability
      • KV store를 사용하고 있기 때문에 수평 확장이 용이합니다.
    3. strong consistency
      • ACID transaction 지원으로 강한 일관성을 보장합니다.
    4. survivability
      • Range 단위 이중화로 장애에도 살아남을 수 있습니다.
    5. latency & Geo-partitioning
      • 데이터를 지역별로 분할하여 가지고 있을 수 있기 때문에 사용자가 어디에 있든 짧은 지연시간을 보장합니다.

    Architecture


    CockroachDB는 계층화된 아키텍처로 구현되었으며 총 5개의 계층으로 이루어져 있습니다.

    1. SQL Layer
      • 클라이언트의 SQL 쿼리를 KV 작업으로 변환합니다.
    2. Transaction Layer
      • KV 에 대한 ACID를 보장합니다.
    3. Distribution Layer
      • 원하는 KV 데이터가 있는 Range를 찾아 분산처리를 수행합니다.
    4. Replication Layer
      • 고 가용성을 위해 Raft 분산 합의 알고리즘을 사용하여 노드 간에 데이터를 복제합니다.
    5. Storage Layer
      • 물리적인 디스크(RockDB)에 KV 데이터를 읽고 쓰는 작업을 합니다.

    아래 그림을 보면 최상위 수준에서 클라이언트의 SQL문을 KV 데이터로 변환합니다. 이 데이터는 노드 간에 분산되어 디스크에 기록됩니다.

    CockroachDB Architecture

    개념


    CockroachDB에 개념 몇 가지를 살펴보도록 하겠습니다.

     

    CockroachDB

    Cluster

    Cluster란 노드에 집합입니다.

    Node

    노드란 Range에 집합입니다.

    Range

    Range란 CockroachDB가 내부적으로 Key-Value 데이터를 저장하는 묶음 단위입니다.

    CockroachDB Range

    Key 값으로 정렬된 하나의 통으로 된 Key 공간이 있다고 가정합니다. (Monolithic key Space)

    이 Key 공간을 64MB 범위로 나눈 것이 Range 입니다.

    Range는 고정된 공간을 차지하지 않고 사용한 만큼만 할당됩니다. (삭제될 때는 줄어듬, Max 64MB)

    원하는 Key 값이 들어있는 Rnage를 찾기 위해 index structure를 사용하고 이 구조는 별도 영역에 관리됩니다.

    아래 그림을 보면 알 수 있겠지만, 이미 정렬된 상태로 key를 저장하고 있기 때문에 효율적인 범위 스캔이 가능합니다.

    Replicas

    CockroachDB는 가용성을 위해 Replica라는 복제본을 여러 노드에 복사하여 가지고 있습니다.

    CockroachDB Replica

    CockroachDB는 이중화를 위해 Raft 분산 합의 알고리즘을 사용합니다.

    각 Range들은 replica 단위이고 Default로 3개의 replica를 구성합니다. (환경설정으로 변경 가능)

    node 추가 삭제 시  자동으로 replica를 rebalancing 하게 됩니다.

     

    Leaseholder

    replica 중 하나가 leaseholder를 보유합니다.

    이 leaseholder라는 replica는 range에 대한 모든 읽기 및 쓰기 요청을 수신하게 됩니다.

     

     

    이번 글은 이것으로 마무리하고 다음 글에서 설치 및 수행방법을 다루도록 하겠습니다.

    728x90

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

    CockroachDB 사용방법  (0) 2020.11.02
    CockroachDB 설치  (0) 2020.11.01
    Comments