본문 바로가기
DBMS

PolarDB for PostgreSQL 오픈 소스 분석 - 아키텍처

by developer's warehouse 2023. 11. 25.

이 글에서는 PolarDB for PostgreSQL 오픈 소스 분석의 아키텍처 설명에 대해서 분석합니다. 

PolarDB for PostgreSQL 오픈 소스 분석 - 아키텍처 썸네일

기존 데이터베이스 시스템의 문제


기존 데이터베이스 시스템을 사용 중이고 워크로드의 복잡성이 계속 증가하는 경우, 비즈니스 데이터의 양이 증가함에 따라 다음과 같은 문제에 직면할 수 있습니다:

 

  • 단일 호스트의 최대 스토리지 용량에 의해 스토리지 용량이 제한됩니다.
  • 읽기 전용 인스턴스를 생성해야만 데이터베이스 시스템의 읽기 기능을 늘릴 수 있습니다. 각 읽기 전용 인스턴스에는 특정 양의 전용 스토리지 공간이 할당되어야 하므로 비용이 증가합니다.
  • 읽기 전용 인스턴스를 생성하는 데 필요한 시간이 데이터의 양이증가함에 따라 점점 늘어납니다. 
  • 기본 인스턴스와 보조 인스턴스 간의 데이터 복제 지연 시간이 길어집니다.

 

PolarDB의 장점


기존 데이터베이스 시스템에서 발생하는 문제를 해결할 수 있도록 Alibaba Cloud는 PolarDB를 제공합니다. PolarDB는 Alibaba Cloud의 독점적인 컴퓨팅-저장소 분리 아키텍처에서 실행됩니다. 이 아키텍처에는 다음과 같은 이점이 있습니다:

alibaba cloud polarDB 아키텍처

 

 

  • 확장성: 컴퓨팅이 스토리지와 분리되어 있습니다. 비즈니스 요구 사항에 따라 컴퓨팅 클러스터 또는 스토리지 클러스터를 유연하게 확장할 수 있습니다.
  • 비용 효율성: 모든 컴퓨팅 노드가 동일한 물리적 스토리지를 공유합니다. 따라서 비용이 크게 절감됩니다. (디스크 공간)
  • 간편한 사용: 각 PolarDB 클러스터는 읽기/쓰기 분할을 지원하는 하나의 기본 노드와 다수의 읽기 전용 노드로 구성됩니다.
  • 신뢰성: 데이터는 3중으로 저장되며 몇 초 안에 백업을 완료할 수 있습니다.

 

문서 내용 소개


PolarDB는 다양한 기술 및 혁신과 통합되어 있습니다. 이 문서에서는 컴퓨팅-저장 분리와 하이브리드 트랜잭션/분석 처리(HTAP)라는 두 가지 측면의 PolarDB 아키텍처를 차례로 설명합니다. 

 

  • 컴퓨팅-스토리지(computing-storage) 분리는 PolarDB 아키텍처의 기본입니다. 기존 데이터베이스 시스템은 각 인스턴스에 독립적인 컴퓨팅 리소스와 스토리지 리소스가 할당되는 Shared-nothing 아키텍처에서 실행됩니다. 기존 데이터베이스 시스템이 컴퓨팅-스토리지 분리로 진화함에 따라 데이터베이스 엔진 개발자는 executor, 트랜잭션, 버퍼를 관리하는 데 어려움을 겪고 있습니다. PolarDB는 이러한 문제를 해결할 수 있도록 설계되었습니다.
  • HTAP는 OLTP 시나리오에서 OLAP 쿼리를 지원하고 여러 읽기 전용 노드의 컴퓨팅 기능을 최대한 활용하도록 설계되었습니다. HTAP는 공유 스토리지 기반의 대규모 병렬 처리(MPP) 아키텍처를 사용하여 구현됩니다. 공유 스토리지 기반 MPP 아키텍처에서는 각 테이블 또는 인덱스 트리가 전체로 저장되며 다른 노드에 저장되는 가상 파티션으로 나뉘지 않습니다. 따라서 OLTP 시나리오에서 사용되는 워크플로우를 유지할 수 있습니다. 또한 애플리케이션 데이터를 수정할 필요 없이 공유 스토리지 기반 MPP 아키텍처를 사용할 수 있습니다.

 

Compute-Storage 분리

Compute-Storage 분리 아키텍처

 

PolarDB는 컴퓨팅-스토리지 분리를 지원합니다. 각 PolarDB 클러스터는 컴퓨팅 클러스터와 스토리지 클러스터로 구성됩니다. 비즈니스 요구사항에 따라 컴퓨팅 클러스터 또는 스토리지 클러스터를 유연하게 확장할 수 있습니다.

 

  • 컴퓨팅 성능이 부족한 경우 컴퓨팅 클러스터만 스케일아웃할 수 있습니다.
  • 스토리지 용량이 부족한 경우 스토리지 클러스터만 스케일아웃할 수 있습니다.

 

PolarDB에서 공유 스토리지 아키텍처를 사용한 후에는 기본 노드와 읽기 전용 노드가 동일한 물리적 스토리지를 공유합니다. 기본 노드가 여전히 기존 데이터베이스 시스템에서 사용되는 방법을 사용하여 write-ahead logging(WAL) 레코드를 플러시하는 경우 다음과 같은 문제가 발생할 수 있습니다.

 

  • 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 오래된 페이지입니다. 오래된 페이지는 읽기 전용 노드에 기록된 버전보다 이전 버전인 페이지입니다.
  • 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 아직 반영되지 않은 트랜잭션의 페이지입니다. 아직 반영되지 않은 트랜잭션의 페이지는 읽기 전용 노드에 기록된 버전보다 최신 버전인 페이지입니다.
  • 워크로드가 기본 노드에서 읽기 전용 노드로 전환되면 읽기 전용 노드가 공유 스토리지에서 읽는 페이지는 오래된 페이지입니다. 이 경우 읽기 전용 노드는 더티 페이지를 복원하기 위해 WAL 레코드를 읽고 적용해야 합니다.

 

첫 번째 문제를 해결하려면 PolarDB가 각 페이지에 대해 여러 버전을 지원해야 합니다. 두 번째 문제를 해결하려면 PolarDB가 기본 노드가 WAL 레코드를 플러시하는 속도를 제어해야 합니다.

HTAP

읽기/쓰기 분할이 활성화되면 각 개별 컴퓨팅 노드는 공유 스토리지에서 제공하는 높은 I/O 처리량을 충분히 활용할 수 없습니다. 또한 컴퓨팅 리소스를 추가하여 대규모 쿼리를 가속화할 수 없습니다. 이러한 문제를 해결하기 위해 PolarDB는 공유 스토리지 기반 MPP 아키텍처를 사용하여 OLTP 시나리오에서 OLAP 쿼리를 가속화합니다.
 
PolarDB는 OLTP 시나리오에서 사용되는 모든 데이터 유형을 지원합니다. 또한 PolarDB는 이러한 유형의 데이터를 처리할 수 있는 두 개의 컴퓨팅 엔진을 지원합니다:
  • 독립 실행형 실행 엔진: 동시 처리량이 많은 OLTP 쿼리를 처리합니다.
  • 분산 실행 엔진: 대규모 OLAP 쿼리를 처리합니다.
oltp olap 분리 구조 htap

 

동일한 하드웨어 리소스를 사용하는 경우, PolarDB는 기존 MPP 데이터베이스가 제공하는 성능의 90%에 해당하는 성능을 제공합니다. 또한 PolarDB는 SQL 문 수준의 확장성을 제공합니다. PolarDB 클러스터의 컴퓨팅 성능이 충분하지 않은 경우, 데이터를 재배치할 필요 없이 OLAP 쿼리에 더 많은 CPU 리소스를 할당할 수 있습니다.
 
다음에는 컴퓨팅-저장소 분리 및 HTAP에 대한 자세한 내용을 제공합니다.

참고: https://apsaradb.github.io/PolarDB-for-PostgreSQL/theory/arch-overview.html

facebook twitter kakaoTalk kakaostory naver band shareLink