이 글에서는 PolarDB for PostgreSQL 오픈 소스 분석의 아키텍처 설명에 대해서 분석합니다.
기존 데이터베이스 시스템의 문제
기존 데이터베이스 시스템을 사용 중이고 워크로드의 복잡성이 계속 증가하는 경우, 비즈니스 데이터의 양이 증가함에 따라 다음과 같은 문제에 직면할 수 있습니다:
- 단일 호스트의 최대 스토리지 용량에 의해 스토리지 용량이 제한됩니다.
- 읽기 전용 인스턴스를 생성해야만 데이터베이스 시스템의 읽기 기능을 늘릴 수 있습니다. 각 읽기 전용 인스턴스에는 특정 양의 전용 스토리지 공간이 할당되어야 하므로 비용이 증가합니다.
- 읽기 전용 인스턴스를 생성하는 데 필요한 시간이 데이터의 양이증가함에 따라 점점 늘어납니다.
- 기본 인스턴스와 보조 인스턴스 간의 데이터 복제 지연 시간이 길어집니다.
PolarDB의 장점
기존 데이터베이스 시스템에서 발생하는 문제를 해결할 수 있도록 Alibaba Cloud는 PolarDB를 제공합니다. PolarDB는 Alibaba Cloud의 독점적인 컴퓨팅-저장소 분리 아키텍처에서 실행됩니다. 이 아키텍처에는 다음과 같은 이점이 있습니다:
- 확장성: 컴퓨팅이 스토리지와 분리되어 있습니다. 비즈니스 요구 사항에 따라 컴퓨팅 클러스터 또는 스토리지 클러스터를 유연하게 확장할 수 있습니다.
- 비용 효율성: 모든 컴퓨팅 노드가 동일한 물리적 스토리지를 공유합니다. 따라서 비용이 크게 절감됩니다. (디스크 공간)
- 간편한 사용: 각 PolarDB 클러스터는 읽기/쓰기 분할을 지원하는 하나의 기본 노드와 다수의 읽기 전용 노드로 구성됩니다.
- 신뢰성: 데이터는 3중으로 저장되며 몇 초 안에 백업을 완료할 수 있습니다.
문서 내용 소개
PolarDB는 다양한 기술 및 혁신과 통합되어 있습니다. 이 문서에서는 컴퓨팅-저장 분리와 하이브리드 트랜잭션/분석 처리(HTAP)라는 두 가지 측면의 PolarDB 아키텍처를 차례로 설명합니다.
- 컴퓨팅-스토리지(computing-storage) 분리는 PolarDB 아키텍처의 기본입니다. 기존 데이터베이스 시스템은 각 인스턴스에 독립적인 컴퓨팅 리소스와 스토리지 리소스가 할당되는 Shared-nothing 아키텍처에서 실행됩니다. 기존 데이터베이스 시스템이 컴퓨팅-스토리지 분리로 진화함에 따라 데이터베이스 엔진 개발자는 executor, 트랜잭션, 버퍼를 관리하는 데 어려움을 겪고 있습니다. PolarDB는 이러한 문제를 해결할 수 있도록 설계되었습니다.
- HTAP는 OLTP 시나리오에서 OLAP 쿼리를 지원하고 여러 읽기 전용 노드의 컴퓨팅 기능을 최대한 활용하도록 설계되었습니다. HTAP는 공유 스토리지 기반의 대규모 병렬 처리(MPP) 아키텍처를 사용하여 구현됩니다. 공유 스토리지 기반 MPP 아키텍처에서는 각 테이블 또는 인덱스 트리가 전체로 저장되며 다른 노드에 저장되는 가상 파티션으로 나뉘지 않습니다. 따라서 OLTP 시나리오에서 사용되는 워크플로우를 유지할 수 있습니다. 또한 애플리케이션 데이터를 수정할 필요 없이 공유 스토리지 기반 MPP 아키텍처를 사용할 수 있습니다.
Compute-Storage 분리
PolarDB는 컴퓨팅-스토리지 분리를 지원합니다. 각 PolarDB 클러스터는 컴퓨팅 클러스터와 스토리지 클러스터로 구성됩니다. 비즈니스 요구사항에 따라 컴퓨팅 클러스터 또는 스토리지 클러스터를 유연하게 확장할 수 있습니다.
- 컴퓨팅 성능이 부족한 경우 컴퓨팅 클러스터만 스케일아웃할 수 있습니다.
- 스토리지 용량이 부족한 경우 스토리지 클러스터만 스케일아웃할 수 있습니다.
PolarDB에서 공유 스토리지 아키텍처를 사용한 후에는 기본 노드와 읽기 전용 노드가 동일한 물리적 스토리지를 공유합니다. 기본 노드가 여전히 기존 데이터베이스 시스템에서 사용되는 방법을 사용하여 write-ahead logging(WAL) 레코드를 플러시하는 경우 다음과 같은 문제가 발생할 수 있습니다.
- 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 오래된 페이지입니다. 오래된 페이지는 읽기 전용 노드에 기록된 버전보다 이전 버전인 페이지입니다.
- 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 아직 반영되지 않은 트랜잭션의 페이지입니다. 아직 반영되지 않은 트랜잭션의 페이지는 읽기 전용 노드에 기록된 버전보다 최신 버전인 페이지입니다.
- 워크로드가 기본 노드에서 읽기 전용 노드로 전환되면 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 오래된 페이지입니다. 이 경우 읽기 전용 노드는 더티 페이지를 복원하기 위해 WAL 레코드를 읽고 적용해야 합니다.
첫 번째 문제를 해결하려면 PolarDB가 각 페이지에 대해 여러 버전을 지원해야 합니다. 두 번째 문제를 해결하려면 PolarDB가 기본 노드가 WAL 레코드를 플러시하는 속도를 제어해야 합니다.
HTAP
- 독립 실행형 실행 엔진: 동시 처리량이 많은 OLTP 쿼리를 처리합니다.
- 분산 실행 엔진: 대규모 OLAP 쿼리를 처리합니다.
참고: https://apsaradb.github.io/PolarDB-for-PostgreSQL/theory/arch-overview.html
'DBMS' 카테고리의 다른 글
PolarDB 아키텍처 세부: Low-latency Replication (0) | 2023.11.25 |
---|---|
PolarDB 아키텍처 세부: 컴퓨팅-스토리지 분리 (Compute-Storage Separation Challenges of Shared Storage) (0) | 2023.11.25 |
Alibaba PolarDB 오픈소스 파해치기 - github 분석 1 (0) | 2023.11.25 |
alibaba cloud Polar DB - 알리바바 클라우드 폴라 디비 알아보기 (0) | 2023.11.25 |
Amazone Aurora 알아보기 - internal architecture (0) | 2023.11.25 |