본문 바로가기
DBMS

alibaba cloud Polar DB - 알리바바 클라우드 폴라 디비 알아보기

by developer's warehouse 2023. 11. 25.

이 글에서는 PolarDB에 대해서 설명합니다. 

alibaba cloud 폴라디비 썸네일

 

PolarDB 소개 및 간략히 알아보기


PolarDB는 알리바바에서 개발한 상용 클라우드 기반 관계형 데이터베이스 제품입니다. 읽기 수요가 많은 고객을 위해 설계되었습니다. 

제품 홈페이지는 아래와 같습니다. 

https://www.alibabacloud.com/ko/product/polardb

PolarDB는 널리 사용되는 두 가지 데이터베이스와 호환됩니다: MySQL, PostgreSQL. 세 개의 레이어로 구성되어 있습니다. 사용자는 컴퓨팅 계층을 통해 데이터베이스와 상호 작용합니다. PolarFS는 분산 파일 시스템이며, PolarStorage는 스토리지 수준입니다. 

PolarDB는 InnoDB를 스토리지 엔진으로 사용합니다.

History

PolarDB는 2017년 9월에 처음 출시되었으며 2018년 4월에 공식적으로 상용화되었습니다. 동시에 알리바바 클라우드는 데이터 엔지니어링 컨퍼런스(ICDE)에서 폴라DB에 대한 강연을 진행했습니다.

Data Model

Relational data model
 

Hardware Acceleration 

PolarDB는 RDMA를 사용하여 스토리지 노드와 컴퓨팅 노드를 연결합니다. 이를 통해 I/O 성능의 병목 현상을 제거합니다.

Indexes 

MySQL과 마찬가지로 B+ 트리는 기본 인덱스 데이터 구조입니다. B+ 트리는 기본 키를 기준으로 정렬됩니다. B+Tree와 관련된 최적화 중 하나는 다음 번에 쉽게 삽입할 수 있도록 마지막 삽입 위치를 기록한다는 것입니다. 폴라DB의 특징인 병렬 쿼리 실행 중에는 B+Tree를 여러 워커로 분할합니다. 각 워커는 자신의 파티션만 볼 수 있습니다. 한 워커가 한 파티션의 작업을 완료하면 자동으로 새 파티션에 연결됩니다.

Isolation Levels

PolarDB는 트랜잭션이 시작될 때 읽기 쓰기 작업의 배열인 읽기 뷰를 유지합니다. 복제 노드는 읽기 전용이므로 읽기 쓰기 작업이 없습니다. 프라이머리 노드는 핸드셰이크의 일부로 초기 읽기 뷰를 레플리카로 전송합니다. Redo 시 업데이트됩니다.
 

Joins 

각 작업자(Worker)는 자신의 파티션을 스캔하고 조인합니다. PolarDB는 각 작업자의 조인 결과를 병합하여 클라이언트에 반환합니다.
 

Query Interface

PolarDB는 MySQL과 마찬가지로 표준 쿼리 인터페이스 SQL을 지원합니다. 병렬 쿼리를 기능으로 추가합니다. 병렬 쿼리를 활성화하는 방법은 아래와 같은 것들이 있습니다.
 
set max_parallel_degree = n

set force_parallel_mode = on

SELECT /*+ PARALLEL() */ * FROM ...

SELECT /*+ PARALLEL(n) */ * FROM ...

Storage Architecture

PolarDB는 MySQL처럼 디스크 디비입니다. 기본 노드와 복제 노드에는 버퍼 풀이 있으며 데이터에 액세스하고 공유 메모리에 로그를 남길 수 있습니다. 

기본 노드는 정상 작동 중에 페이지를 플러시할 수 있는 권한이 있습니다. 

복구 시 Redo 후 복제본은 페이지를 디스크에 플러시합니다. 기본 노드는 새 마스터로부터 읽기 뷰를 받은 후 페이지를 디스크에 쓰기도 합니다. --> 추가 분석 필요함. 

After redo in recovery, replicas will flush pages to disk. Primary node, after receiving the read view from new master, will also write pages to disk.

Storage Organization

각 청크 서버에는WAL(write ahead log)가 있습니다. 청크 서버에 대한 모든 수정 사항은 청크를 업데이트하기 전에 로그에 추가됩니다. 기본 노드(읽기-쓰기)가 일부 페이지를 수정한 후에는 복제본이 액세스할 수 있는 공유 메모리로 로그를 보냅니다. 복제본에는 재실행 중에 버전을 수정하는 로그 적용 스레드가 있습니다.
 

System Architecture

공유 디스크 내에서 PolarDB는 데이터 청크로 구성된 여러 개의 데이터 청크 서버를 보유하고 있습니다. 각 청크 서버에는 자체 독립형 비휘발성 메모리 SSD 디스크가 있습니다. 컴퓨팅 노드(데이터베이스 서버)는 RDMA(원격 직접 메모리 액세스)를 통해 디스크를 읽고 씁니다.

PolarDB 특징


선택 가이드라고 해서 홈페이지에 아래와 같은 표로 정리되어있습니다. 

 

 
Item PolarDB for MySQL PolarDB for PostgreSQL PolarDB for Xscale
Database Ecosystem MySQL PostgreSQL and Oracle MySQL
Architecture A shared-storage architecture in which computing and storage resources are decoupled A shared-storage architecture in which computing and storage resources are decoupled A distributed share-nothing architecture
Scenario Build cloud-native applications based on MySQL Build cloud-native applications based on PostgreSQL or migrate traditional commercial databases to the cloud Build MySQL-based applications that require ultra-high concurrency

Enterprise-class capabilities for various business requirements

MySQL용 PolarDB는 자동 백업, 원클릭 복원, GDN(글로벌 데이터베이스 네트워크), 병렬 쿼리, 빠른 DDL 작업 등 다양한 엔터프라이즈급 기능을 제공합니다. PolarDB for MySQL 클러스터의 읽기 및 쓰기 기능은 몇 분 안에 확장할 수 있습니다.
 

Elastic Scaling

PolarDB for MySQL은 컴퓨팅 용량수직 확장(클러스터 사양의 업그레이드 또는 다운그레이드), 컴퓨팅 용량의 수평 확장(읽기 전용 노드의 추가 또는 제거), 스토리지 용량의 수평 확장 등 세 가지 유형의 확장을 지원합니다.(최대 16개의 컴퓨팅 노드를 추가할 수 있음), 스토리지 용량의 수평적 확장(데이터 볼륨 변경에 따라 스토리지 용량을 자동으로 확장하는 기능). 단일 인스턴스의 최대 스토리지 용량은 100TB입니다.) 클러스터의 사양 변경은 몇 분 이내에 적용됩니다.
 

백업 및 복원

MySQL용 PolarDB는 사용자 정의 백업 정책과 다음 세 가지 백업 유형을 지원합니다: 
  • 레벨 1 백업은 분산 스토리지 클러스터에 저장되며 복원 속도가 빠릅니다. 
  • 레벨 2 백업은 압축되어 온프레미스 스토리지에 저장되는 레벨 1 백업입니다. 레벨 2 백업은 복원하는 데 시간이 더 오래 걸립니다. 
  • 로그 백업은 OSS에 업로드된 로그를 실시간으로 병렬로 다시 실행하는 백업입니다. 1TB의 데이터를 저장하는 MySQL용 PolarDB 데이터베이스를 10초 이내에 백업하고 10분 이내에 데이터 세트를 복원할 수 있습니다.

GDN

글로벌 데이터베이스 네트워크(GDN)는 전 세계 여러 지역에 분산된 여러 개의 PolarDB 클러스터로 구성됩니다. GDN 내 클러스터의 데이터는 비동기 복제, 물리적 로그, 병렬 처리와 같은 기술을 사용하여 동기화됩니다. 서로 다른 지역에 있는 동일한 사양의 두 PolarDB 클러스터 간에 데이터를 복제하는 데 2초도 채 걸리지 않습니다. GDN의 PolarDB 클러스터는 지역 간 읽기/쓰기 분할, 인근 클러스터에서 데이터 읽기, 유연한 구성을 지원합니다.

병렬 쿼리

PolarDB for MySQL 8.0은 스토리지 계층의 여러 스레드에 데이터를 분산하여 병렬 쿼리를 지원합니다. 여러 스레드가 병렬 컴퓨팅을 수행하여 결과를 리더 스레드로 반환합니다. 이렇게 하면 복잡한 SQL 쿼리 및 보고서 쿼리에 응답하는 데 필요한 시간을 크게 줄일 수 있습니다. 예를 들어, 100GB의 데이터가 88개의 CPU 코어와 710GB의 메모리를 갖춘 PolarDB for MySQL 8.0 클러스터에 저장되어 있는 경우, 기본 노드에 병렬 쿼리를 활성화하면 쿼리에 대한 클러스터의 응답 속도를 최대 30배까지 높일 수 있습니다.

 

Fast DDL Operations

MySQL용 PolarDB는 DDL 물리적 복제 최적화( DDL physical replication optimization)를 지원합니다. 

이 기능은 기본(Primary) 노드에서 Redo로그를 Write하고 읽기 전용 로그에서 Redo 로그를 사용하도록 하여 Key Path를 최적화합니다. 

This feature optimizes the key paths of writing redo logs on the primary node and using redo logs on read-only logs. 

이렇게 하면 테이블에 열을 즉시 추가하거나 인덱스를 병렬로 추가할 수 있습니다. 예를 들어, 1TB의 데이터가 16개의 CPU 코어와 128GB의 메모리를 갖춘 PolarDB for MySQL 8.0 클러스터에 저장되어 있는 경우, 클러스터의 테이블에 열을 추가하는 데 1초밖에 걸리지 않으며, 이는 오픈 소스 MySQL 데이터베이스보다 10배나 빠른 속도입니다.

 

Extensive O&M features to significantly reduce O&M costs

PolarDB for MySQL은 머신 러닝과 세분화된 데이터 모니터링을 기반으로 24시간 연중무휴 이상 징후 탐지를 구현하는 O&M(Operation'과 'Maintenance) 기능을 제공합니다. 이를 통해 데이터베이스의 안정성, 보안, 효율성을 보장할 수 있습니다.

Diagnostics(진단)

PolarDB for MySQL은 데이터베이스의 진단 및 최적화 결과를 확인할 수 있는 다양한 진단 기능을 제공합니다. 이러한 기능에는 자율성 센터, 세션 관리, 실시간 모니터링, 스토리지 분석, 교착 상태 분석, 진단 보고서, 성능 인사이트 등이 포함됩니다.

Slow SQL Queries

MySQL용 PolarDB는 느린 SQL 쿼리 분석 기능을 제공합니다. 이 기능을 사용하면 느린 로그 추세와 통계를 볼 수 있습니다. 또한 느린 SQL 쿼리를 수정하는 방법에 대한 진단 결과와 제안을 얻을 수도 있습니다.

Auto Scaling

자동 확장을 위한 임계값, 노드 사양, 읽기 전용 노드 수를 구성할 수 있습니다. 평균 CPU 사용률이 지정된 임계값보다 크거나 같으면 자동 스케일업이 트리거됩니다.

Monitoring and Alerting

SQL Explorer

 

PolarDB 소스


PolarDB for PostgreSQL은 오픈소스로 github에 코드가 올라가 있다. 

심지어 apache-2.0 라이선스이다. 

https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

PolarDB 소스 분석을 해봐야겠다. 

facebook twitter kakaoTalk kakaostory naver band shareLink