대규모 분산 데이터의 무잠금 세분화 접근 기술
초록
본 논문은 테라바이트 규모의 문자열 데이터를 다수의 클라이언트가 메가바이트 단위로 동시에 읽고 수정할 수 있도록, 잠금 없이(lock‑free) 세분화된 접근을 제공하는 아키텍처와 알고리즘을 제안한다. 데이터는 RAM 기반의 분산 저장소에 보관하고, 메타데이터는 DHT(Distributed Hash Table)를 이용해 병렬적으로 관리한다. 버전 관리와 스냅샷 기법을 통해 읽기와 쓰기의 충돌을 최소화하고, 실험 결과는 클러스터 환경에서 높은 처리량과 낮은 지연 시간을 확인한다.
상세 분석
이 연구는 대용량 문자열을 “데이터 스트링”이라 정의하고, 이를 고정 길이 페이지(예: 64 KB) 단위로 분할한다. 각 페이지는 노드의 RAM에 저장되며, 페이지 식별자는 (스트링ID, 페이지번호) 형태의 키로 매핑된다. 쓰기 연산은 기존 페이지를 복제한 뒤 수정된 버전을 새 페이지로 생성하고, 메타데이터에 새로운 버전 정보를 추가한다. 이때 기존 페이지는 그대로 유지되므로 다른 클라이언트가 동시에 동일 페이지를 읽어도 일관성이 보장된다.
메타데이터는 “버전 트리” 구조로 조직된다. 루트 노드는 전체 스트링의 최신 버전을 가리키며, 내부 노드는 페이지 범위와 해당 범위에 매핑된 페이지 식별자를 저장한다. 메타데이터 노드는 DHT에 해시된 키로 분산 저장되며, 조회 시 여러 DHT 노드에 병렬 요청을 보내어 O(log N) 수준의 지연시간을 달성한다. 또한, 메타데이터 업데이트는 원자적 CAS(Compare‑And‑Swap) 연산을 이용해 충돌을 감지하고, 충돌이 발생하면 재시도 메커니즘을 적용한다.
동시성 제어는 전통적인 락 기반 방식이 아니라 “무잠금” 접근을 채택한다. 읽기 연산은 최신 버전 트리의 루트만 조회하면 되므로, 읽기‑읽기 충돌이 전혀 발생하지 않는다. 쓰기 연산은 새로운 버전을 추가하는 형태이기 때문에, 동일 페이지에 대한 다중 쓰기가 동시에 일어나도 각각 독립적인 새 페이지가 생성된다. 결과적으로 쓰기‑읽기, 쓰기‑쓰기 간의 상호 배제 비용이 거의 없으며, 시스템 전체의 스루풋이 크게 향상된다.
성능 평가에서는 8대의 물리 서버(각 32 GB RAM, 10 GbE)로 구성된 클러스터에 프로토타입을 배포하였다. 1 TB 규모의 스트링을 4 MB 청크 단위로 읽고, 2 MB 청크를 동시에 50개의 클라이언트가 쓰는 워크로드를 실행했을 때, 평균 읽기 지연은 12 ms, 쓰기 지연은 18 ms에 머물렀으며, 전체 처리량은 3.2 GB/s를 초과하였다. 또한, 메타데이터 조회에 DHT를 활용함으로써 메타데이터 서버의 병목 현상을 효과적으로 해소한 것이 확인되었다.
이와 같은 설계는 초대형 천문 데이터(예: 초신성 탐색)와 같이 지속적인 스트리밍과 빠른 분석이 요구되는 분야에 적합하며, 기존 파일 시스템 기반 접근 방식에 비해 확장성, 일관성, 응답성 측면에서 현격한 이점을 제공한다.