📌 비공유 아키텍처(Shared-Nothing Architecture)의 스레드 수준 확장 개념
1. 정의
**비공유 아키텍처(Shared-Nothing Architecture)**란, 시스템을 구성하는 각 노드가 CPU, 메모리, 디스크 등의 자원을 다른 노드와 물리적으로 공유하지 않고, 독립적으로 운영되는 분산 시스템 아키텍처를 의미한다.
이러한 개념은 최근 고성능 분산 데이터베이스 및 클라우드 네이티브 시스템에서 더 나아가, 노드 내부의 프로세스, 스레드 수준까지 적용되어 성능 최적화 및 병목 제거를 실현하고 있다.
2. 스레드 관점에서의 비공유 아키텍처 확장
최근 등장한 고성능 NoSQL DBMS(예: ScyllaDB)는 비공유 아키텍처 개념을 CPU 코어 및 스레드 레벨까지 확장 적용한다. 주요 설계 개념은 다음과 같다:
(1) Per-Core Sharding
- 시스템 전체를 CPU 코어 단위로 샤딩하고, 각 샤드(Shard)는 단 하나의 사용자 스레드(Thread)에 매핑된다.
- 즉, 1개 스레드 ↔ 1개 코어 ↔ 해당 코어 전용 메모리, I/O 큐의 독점적 사용이 보장된다.
(2) 자원 독점 처리 모델 (Thread-per-Core Model)
- 각 스레드는 OS 스케줄러의 간섭 없이 **고정된 코어(core pinning)**에서 동작하며, 다른 스레드와 락(lock), 세마포어(semaphore) 등을 통해 자원을 경쟁하지 않는다.
- 이로 인해 락 경합(lock contention), 캐시 미스(cache invalidation), NUMA 레이턴시 등을 구조적으로 제거할 수 있다.
(3) 비동기 메시지 기반 통신
- 스레드 간 데이터 공유는 직접적인 메모리 공유가 아닌, 비동기 메시지 패싱(async message passing) 방식을 사용.
- 대표적으로 ScyllaDB는 Seastar 프레임워크를 기반으로 Future-Promise 방식의 비동기 병렬 처리를 구현한다.
3. 기존 멀티스레드 아키텍처와의 비교
항목 | 전통적 멀티스레드 아키텍처 | 스레드 수준 비공유 아키텍처 |
---|
자원 사용 | 메모리, 큐, I/O 공유 | 각 스레드가 자원 독점 |
동기화 방식 | 락, 뮤텍스 등 필요 | 불필요 (경합 없음) |
성능 병목 | 락 경합, 캐시 코히어런시 문제 | 구조적 제거 |
스케줄링 | OS 스케줄러에 의존 | 사용자 스레드 직접 관리 |
예시 | Apache Cassandra, Redis | ScyllaDB, Aeron, DPDK |
4. 실전 사례: ScyllaDB
- ScyllaDB는 Apache Cassandra 호환의 NoSQL DBMS로, 비공유 아키텍처 기반 구조에 스레드 수준 자원 독점 모델을 적용하여 Cassandra 대비 2~10배의 성능 향상을 실현.
- 각 스레드는 독립된 요청 큐, 디스크 I/O, 네트워크 큐를 가지며, 스레드 간 통신은 메시지 패싱으로 처리된다.
- 이를 통해 병렬 처리 효율을 극대화하고, 고성능 OLTP 시스템에서 성능과 예측 가능성을 동시에 확보한다.
5. 정리
스레드 수준에서의 비공유 아키텍처는 전통적인 분산 시스템 설계를 한 단계 진화시킨 형태로, 자원 경합의 원천적 제거, 고성능 실시간 처리, 하드웨어 자원의 최대 활용을 가능하게 한다.
이는 현대 데이터베이스, 네트워크, 고성능 컴퓨팅 시스템 등에서 성능 최적화의 핵심 패러다임으로 자리 잡고 있으며, 비공유 아키텍처의 미래 지향적 진화 형태라 할 수 있다.