시스템 아키텍처
이 문서에서는 Apache Doris의 두 가지 배포 모드에 사용되는 핵심 구성 요소와 상호 작용 방식을 비롯한 시스템 아키텍처를 설명합니다.
- 스토리지-컴퓨트 통합 아키텍처: 데이터 저장과 연산이 통합된 전통적인 FE + BE 아키텍처입니다.
- 스토리지-컴퓨트 분리 아키텍처: 메타데이터, 컴퓨트, 스토리지를 세 계층으로 분리한 아키텍처입니다.
활용 목적: 아키텍처 선택, 아키텍처 학습, 운영 방식 이해.
스토리지-컴퓨트 통합 아키텍처
스토리지-컴퓨트 통합 아키텍처는 Apache Doris의 전통적인 배포 모드입니다. Frontend (FE)와

핵심 구성 요소
Frontend (FE) 노드
FE는 Apache Doris의 진입점 역할을 하는 노드로, 조정과 제어를 담당합니다.
| 역할 | 설명 |
|---|---|
| 사용자 요청 처리 | MySQL 프로토콜과 호환되며 표준 SQL 지원 |
| 쿼리 파싱 및 계획 수립 | 어휘 분석 -> 의미 분석 -> 논리 계획 생성 -> CBO 최적화 -> 실행 작업 배정 |
| 메타데이터 관리 | 데이터베이스 및 테이블 스키마, 복제본 배치, 사용자 권한, 클러스터 토폴로지, 데이터 적재 상태 관리 |
| 노드 관리 | 하트비트 감지, 부하 분산, 복제본 복구, 스케일아웃 및 스케일인 관리 |
FE는 BDB JE를 메타데이터 스토리지 엔진으로 사용하며 트랜잭션 기능을 지원합니다. ZooKeeper와 같은 외부 구성 요소에 의존하지 않아 배포와 유지 관리가 간편합니다.
Backend (BE) 노드
BE는 연산과 저장을 담당하는 노드입니다.
| 기능 | 설명 |
|---|---|
| 컬럼형 스토리지 | 데이터를 컬럼 단위로 구성하고 인코딩 및 압축을 함께 사용하여 I/O 효율 향상 |
| 데이터 샤딩(Tablet) | 데이터를 수평으로 분할하며, tablet은 복제본 스케줄링의 최소 단위 |
| 다중 복제본 | 각 tablet은 기본적으로 3개의 복제본을 가지며, 서로 다른 BE 노드에 분산 배치 |
| 벡터화 실행 | 컬럼형 메모리 레이아웃과 SIMD 가속을 결합하여 와이드 테이블 집계에서 5~10배의 성능 제공 |
| Pipeline 엔진 | 스레드 수를 제한하는 멀티코어 병렬 처리로 스레드 수의 폭증 방지 |
FE 고가용성
프로덕션 환경에서는 여러 FE 노드를 배포합니다. 역할 유형은 다음과 같습니다.
| 역할 | 담당 업무 | 선출 참여 여부 |
|---|---|---|
| Master | 메타데이터를 읽고 쓰며, Follower 및 Observer에 동기화 | 예 |
| Follower | 메타데이터를 읽고, Master 장애 시 선출에 참여 | 예 |
| Observer | 메타데이터를 읽으며, 쿼리 동시 처리 능력만 확장 | 아니요 |
메타데이터 변경 시 일관성을 보장하려면 과반수 노드의 확인이 필요합니다.
아키텍처 특성
- 단순한 구조와 간편한 유지 관리: FE와 BE라는 두 종류의 프로세스만 사용합니다.
- 높은 성능: 컴퓨트 노드가 로컬 스토리지에 직접 접근하므로 네트워크 오버헤드가 적습니다.
- 고가용성: 다중 복제본과 자동 장애 격리를 결합합니다.
- 수평 확장: FE와 BE 모두 온라인 스케일아웃을 지원합니다.
스토리지-컴퓨트 분리 아키텍처
버전 3.0에서 도입된 이 아키텍처는 컴퓨트 계층과 스토리지 계층을 완전히 분리하여 각 계층의 독립적인 탄력적 확장을 지원합니다.

핵심 구성 요소
스토리지-컴퓨트 분리 아키텍처에서도 FE 노드는 유지되며, 사용자 요청 접수와 쿼리 파싱을 계속 담당합니다. 데이터 계층의 메타데이터를 관리하기 위해 Meta Service가 새로 추가됩니다.
FE Frontend 노드
스토리지-컴퓨트 분리 아키텍처에서도 FE의 역할은 동일합니다.
| 역할 | 설명 |
|---|---|
| 사용자 요청 처리 | MySQL 프로토콜과 호환되고 표준 SQL을 지원하며, 인증 및 권한 검증 처리 |
| 쿼리 파싱 및 계획 수립 | 어휘 분석 -> 의미 분석 -> 논리 계획 -> CBO 최적화 -> 실행 작업 배정 |
| SQL 계층 메타데이터 | 데이터베이스 및 테이블 스키마, 사용자 권한, 클러스터 토폴로지 관리 |
메타데이터 계층(Meta Service)
수평 확장이 가능한 무상태 서비스입니다.
| 역할 | 설명 |
|---|---|
| 데이터 수집 트랜잭션 | 버전 관리 및 충돌 감지 |
| Tablet 메타데이터 | 데이터 버전 및 파일 목록 관리 |
| Rowset 메타데이터 | 복구 및 가비지 컬렉션에 사용되는 증분 데이터 정보 관리 |
| 클러스터 리소스 | 컴퓨트 그룹의 리소스 할당 및 스케줄링 |
컴퓨트 계층
컴퓨트 계층은 여러 컴퓨트 클러스터로 구성되며, 각 클러스터에는 여러 무상태 BE 노드가 포함됩니다. 컴퓨트 클러스터는 동일한 데이터를 공유하지만 컴퓨트 리소스는 독립적으로 사용합니다.
| 기능 | 설명 |
|---|---|
| 독립적인 리소스 | 각 컴퓨트 클러스터가 서로 다른 비즈니스 워크로드를 독립적으로 처리 |
| 무상태 BE | 데이터를 영구 저장하지 않고 자주 사용하는 데이터만 캐싱 |
| 탄력적 확장 | 노드를 추가하거나 제거해도 다른 컴퓨트 클러스터에 영향을 주지 않음 |
| 로컬 캐시 | LRU 정책으로 자주 사용하는 데이터를 캐싱하여 접근 지연 시간 단축 |
공유 스토리지 계층
스토리지 계층은 세그먼트 파일과 역색인 파일을 포함한 모든 데이터 파일을 영구 저장합니다.
| 지원 유형 | 예시 |
|---|---|
| 객체 스토리지 | S3, OSS, COS, OBS, MinIO |
| 분산 파일 시스템 | HDFS |
| Ceph | RGW, CephFS |
아키텍처 특성
- 탄력적인 컴퓨트: 수요에 따라 리소스를 확장하거나 축소할 수 있어 부하 변동이 큰 워크로드에 적합합니다.
- 워크로드 격리: 여러 비즈니스 팀이 데이터를 공유하면서도 컴퓨트 리소스는 독립적으로 사용합니다.
- 낮은 스토리지 비용: 객체 스토리지와 같은 저비용 옵션을 사용할 수 있습니다.
- 분 단위 확장 및 축소: 컴퓨트 리소스를 신속하게 조정할 수 있습니다.
비교 및 선택
구성 요소별 기능 비교
두 아키텍처의 구성 요소별 역할 차이는 다음과 같습니다.
| 비교 항목 | 스토리지-컴퓨트 통합 | 스토리지-컴퓨트 분리 |
|---|---|---|
| FE 노드 | 유지되며, 모든 메타데이터 저장 | 유지되며, SQL 계층 메타데이터만 저장 |
| BE 노드 | 상태 유지(데이터 저장) | 무상태(자주 사용하는 데이터만 캐싱) |
| 데이터 저장 위치 | BE 로컬 디스크 | 공유 스토리지 계층에 저장하며, BE 로컬 디스크는 캐시로 사용 |
| 확장 방식 | 스토리지와 컴퓨트를 함께 확장 | 컴퓨트와 스토리지를 독립적으로 확장 가능 |
| 스토리지 비용 | 높음(SSD) | 낮음(객체 스토리지) |
| 운영 복잡도 | 낮음 | 높음(외부 스토리지에 의존) |
| 쿼리 지연 시간 | 낮음(로컬 I/O) | 캐시 미스 시 약간 높음. 캐시 적중 시 지연 시간은 스토리지-컴퓨트 통합 아키텍처와 동일. |
선택 기준
사용 환경에 맞는 아키텍처를 선택하세요.
| 사용 환경 | 스토리지-컴퓨트 통합 | 스토리지-컴퓨트 분리 |
|---|---|---|
| 개발 및 테스트 환경, 빠른 실험 | ✓ | |
| 공유 스토리지(HDFS / Ceph / 객체 스토리지)를 사용할 수 없음 | ✓ | |
| 전담 DBA 없이 여러 팀이 개별적으로 유지 관리 | ✓ | |
| 탄력적 확장이나 Kubernetes 컨테이너화가 필요하지 않음 | ✓ | |
| 이미 퍼블릭 클라우드에 배포됨 | ✓ | |
| 안정적인 공유 스토리지 시스템 사용 가능 | ✓ | |
| Kubernetes 컨테이너화 또는 프라이빗 클라우드의 탄력적 확장이 필요함 | ✓ | |
| 여러 컴퓨트 클러스터가 데이터를 공유하는 환경 | ✓ | |
| 유지 관리를 담당하는 전담 플랫폼 팀이 있음 | ✓ |
핵심 기술 모듈
스토리지 엔진
컬럼형 스토리지 및 압축
데이터를 컬럼 단위로 구성하므로 쿼리에 필요한 컬럼만 읽어 I/O를 줄입니다. 여기에 사전 인코딩, 비트맵 압축, RLE 등의 알고리즘을 결합하여 높은 압축률을 달성합니다.
인덱스 구조
| 인덱스 유형 | 사용 사례 |
|---|---|
| 정렬된 복합 키(최대 3개 컬럼) | 동시성이 높은 보고서 처리에서 프루닝 |
| Min/Max | 숫자형 데이터의 동등 조건 및 범위 필터링 |
| BloomFilter | 카디널리티가 높은 컬럼의 동등 조건 필터링 |
| 역색인 | 임의 필드의 빠른 검색 및 전문 검색 |
데이터 모델
| 모델 | 특성 | 사용 사례 |
|---|---|---|
| Duplicate 모델 | 상세 데이터 유지 | 팩트 테이블의 상세 데이터 저장 |
| Primary Key 모델 | 기본 키가 고유하며, 기본 키가 같은 행은 덮어씀 | 행 단위 업데이트 |
| Aggregate 모델 | 기본 키가 같은 행을 자동으로 집계 | 사전 집계 가속 |
쿼리 엔진
MPP 분산 쿼리
복잡한 쿼리를 여러 단계로 분해하여 여러 BE 노드에서 병렬로 처리합니다. 분산 셔플 조인을 지원하여 대용량 테이블의 조인을 효율적으로 처리합니다.
벡터화 실행
컬럼형 메모리 레이아웃과 SIMD 명령어를 결합하여 와이드 테이블 집계에서 5~10배의 성능을 제공합니다.
Pipeline 실행 엔진
스레드 수를 제한하는 멀티코어 병렬 처리로 스레드 수의 폭증을 방지합니다. 연산자 간 데이터 복사와 메모리 할당 오버헤드를 줄입니다.
쿼리 옵티마이저
| 옵티마이저 | 전략 |
|---|---|
| RBO | 상수 폴딩, 서브쿼리 재작성, 조건절 푸시다운 |
| CBO | 비용 추정 및 조인 순서 재정렬 |
| HBO | 과거 쿼리를 활용하여 반복 쿼리 가속 |
Runtime Filter
런타임에 필터를 동적으로 생성하고 스캔 노드로 푸시다운하여 처리할 데이터의 양을 줄입니다. 지원되는 유형에는 In, Min/Max, BloomFilter가 있습니다.
고가용성 메커니즘
다중 복제본과 쿼럼 프로토콜
- 기본적으로 3개의 복제본을 저장합니다.
- 쓰기가 성공하려면 과반수(예: 2개의 복제본)의 확인을 받아야 합니다.
- 일부 노드에 장애가 발생해도 데이터가 손실되지 않으며 클러스터는 가용 상태를 유지합니다.
자동 장애 격리
- 노드 하트비트 시간 초과 또는 복제본 손상을 감지합니다.
- 해당 노드를 사용 불가 상태로 표시하고 작업 배정을 중단합니다.
- 정상 복제본을 바탕으로 누락된 복제본을 자동으로 재구축합니다.
- 복구 후 증분 데이터를 자동으로 동기화합니다.
FE 고가용성
Paxos와 유사한 합의 프로토콜로 메타데이터 일관성을 보장합니다. Master에 장애가 발생하면 Follower가 자동으로 새 Master를 선출하며, 이 과정은 사용자에게 투명하게 처리됩니다.
자주 묻는 질문
질문: 스토리지-컴퓨트 통합 아키텍처와 분리 아키텍처의 핵심 차이는 무엇인가요?
스토리지-컴퓨트 통합 아키텍처에서는 BE 노드가 데이터 저장과 연산을 모두 담당하며, 데이터는 로컬 디스크에 저장됩니다. 스토리지-컴퓨트 분리 아키텍처에서는 데이터가 공유 스토리지 계층(S3, HDFS 등)에 저장되고, BE 노드는 로컬 캐시를 통해 쿼리를 가속하는 무상태 컴퓨트 노드로 동작합니다. 분리 아키텍처는 컴퓨트 리소스와 스토리지 리소스의 독립적인 탄력적 확장을 지원합니다.
질문: 스토리지-컴퓨트 분리 아키텍처는 언제 선택해야 하나요?
스토리지-컴퓨트 분리 아키텍처는 이미 퍼블릭 클라우드에 배포되어 있거나, Kubernetes 컨테이너화가 필요하거나, 안정적인 공유 스토리지 시스템(HDFS, Ceph, 객체 스토리지)을 사용할 수 있거나, 여러 컴퓨트 클러스터가 데이터를 공유해야 하거나, 유지 관리를 담당하는 전담 플랫폼 팀이 있는 환경에 적합합니다. 단순한 사용 사례나 개발 및 테스트 환경에는 스토리지-컴퓨트 통합 아키텍처가 더 적합합니다.
질문: 스토리지-컴퓨트 분리 아키텍처에서 BE 노드는 데이터를 저장하나요?
스토리지-컴퓨트 분리 아키텍처에서 BE 노드는 무상태이며 데이터를 자체적으로 영구 저장하지 않습니다. 다만 객체 스토리지의 상대적으로 낮은 랜덤 읽기 성능과 네트워크 전송 오버헤드로 인한 지연을 줄이기 위해, BE 노드는 로컬 SSD에 자주 사용하는 데이터를 캐싱하고 LRU 제거 정책을 적용합니다.
질문: 스토리지-컴퓨트 분리 아키텍처에서 FE의 역할은 무엇인가요?
스토리지-컴퓨트 분리 아키텍처에서도 FE는 유지되며, 주로 사용자 요청 접수, SQL 파싱 및 계획 수립, SQL 계층 메타데이터 관리(데이터베이스 및 테이블 스키마, 사용자 권한, 클러스터 토폴로지)를 담당합니다. 데이터 계층의 메타데이터 관리(tablet 메타데이터 및 rowset 메타데이터 등)는 새로 추가된 Meta Service가 담당합니다.
질문: Doris는 고가용성을 어떻게 구현하나요?
Doris는 다중 복제본과 쿼럼 프로토콜을 통해 고가용성을 구현합니다. 각 tablet은 기본적으로 3개의 복제본을 가지며, 쓰기는 과반수의 확인을 받아야 합니다. 일부 노드에 장애가 발생하면 해당 노드를 자동으로 격리하고 정상 복제본을 바탕으로 복제본을 재구축합니다. FE는 Paxos와 유사한 합의 프로토콜을 사용하여 메타데이터 일관성을 보장하며, 현재 Master에 장애가 발생하면 새 Master가 자동으로 선출됩니다.
질문: 스토리지-컴퓨트 분리 아키텍처에서 Meta Service의 역할은 무엇인가요?
Meta Service는 스토리지-컴퓨트 분리 아키텍처에서 데이터 계층의 메타데이터 관리를 전담하는 무상태 서비스입니다. 데이터 수집 트랜잭션 처리(버전 관리 및 충돌 감지), tablet 및 rowset 메타데이터 관리, 컴퓨트 클러스터의 리소스 할당 및 스케줄링을 담당합니다. 무상태 서비스이므로 수평 확장을 통해 메타데이터 처리 용량을 늘릴 수 있습니다.
요약
Apache Doris는 다양한 요구 사항에 맞춰 두 가지 아키텍처를 제공합니다.
| 아키텍처 | 사용 사례 |
|---|---|
| 스토리지-컴퓨트 통합 | 성능 우선, 제한된 운영 리소스, 관리 가능한 규모 |
| 스토리지-컴퓨트 분리 | 클라우드 네이티브, 탄력적 확장, 여러 팀 간 데이터 공유 |
두 아키텍처 모두 완전한 고가용성 메커니즘을 제공하여 데이터 신뢰성과 서비스 안정성을 보장합니다.