계층적 아키텍처 설계
CockroachDB는 SQL 계층, 트랜잭션 계층, 분산 계층, 복제 계층, 저장소 계층으로 구성된 5개 계층 구조를 사용한다. 클라이언트 SQL 요청은 각 노드의 SQL 게이트웨이에서 키-값(KV) 연산으로 변환되며, 이는 클러스터 전체에 분산된다. 이러한 계층적 설계는 각 계층이 상위·하위 계층을 "블랙박스 API"로 취급하도록 함으로써 독립적 진화와 유지보수를 용이하게 한다.
레인지 기반 데이터 분산
데이터는 기본 64 MiB 크기의 레인지로 분할되어 클러스터 노드에 분산되며, 기본적으로 3개 레플리카로 복제된다. 각 레인지는 정렬된 키-값 쌍의 모놀리식 맵을 형성하고, 레인지가 크기 임계값에 도달하면 자동으로 분할된다. 이러한 작은 레인지 크기는 노드 장애 시 빠른 복구와 재균형을 가능하게 한다.
Raft 합의 기반 복제
CockroachDB는 각 레인지에 대해 Raft 합의 알고리즘을 적용하여 레플리카 간 일관성을 보장한다. Raft 리더는 모든 쓰기 작업을 조정하고 쓰기가 커밋되려면 레플리카 과반수의 동의가 필요하다. 레인지 리스 개념을 통해 특정 레플리카는 읽기를 로컬에서 처리하여 Raft 오버헤드를 줄인다.
저장소 엔진: Pebble
CockroachDB는 Go로 구현된 임베디드 저장소 엔진인 Pebble을 사용한다. Pebble은 로그-구조화 병합 트리(LSM) 기반으로 동작하며, 메모리 테이블에서 정렬된 문자열 테이블(SST) 파일로 데이터를 점진적으로 컴팩션한다. 이 설계는 순차 디스크 I/O를 최적화하여 높은 쓰기 처리량을 제공한다.