DataPlatform

OCI PostgreSQL Database System 서비스 살펴보기

OCI에 새롭게 출시된 완전 관리형 Open Source Database 서비스인 PostgreSQL 서비스에 대해서 알아봅니다

서비스 소개

35년이 넘는 역사를 지닌 PostgreSQL은 오픈소스 커뮤니티에서 많은 사용자의 지지를 얻고 있으며, 수많은 애플리케이션에 사용되고 있습니다. OCI의 비즈니스가 성장하면서 다양한 고객들이 유치되고, 많은 고객들의 요청에 의해 OCI Database with PostgreSQL 서비스가 출시되었습니다.

주요 특장점

  1. 최대 3배 더 높은 성능: 데이터베이스 최적화 스토리지 덕분에 SQL 트랜잭션 처리 엔진을 스토리지 계층에서 분리하여 표준 PostgreSQL 구성에 비해 성능이 크게 향상되었습니다.

  2. AWS 비용의 절반 미만: OCI에서 PostgreSQL을 실행하면 컴퓨팅 및 스토리지에 대한 간단한 가격 책정과 저렴한 가격의 혜택을 누릴 수 있습니다. 사용한 리소스에 대해서만 비용을 지불하고 피닉스, 상파울루, 도쿄 등 모든 지역에서 일관된 가격을 지불할 수 있습니다. Amazon Web Services(AWS)의 동급 서비스인 Amazon Aurora PostgreSQL은 OCI보다 2.5배 더 비쌉니다.

  3. 완전 관리형 및 엔터프라이즈 지원: 자동화된 배포부터 보안 업데이트까지 Oracle은 증가하는 워크로드를 수용하거나 스토리지를 자동 확장하는 등 모든 일반적인 유지 관리 작업을 처리합니다.

  4. 신뢰성: 다른 OCI 데이터 저장소 및 서비스와 마찬가지로 PostgreSQL용 OCI 데이터베이스는 데이터 보호를 강화하고 규정 준수를 지원하는 상시 암호화 및 정기 보안 업데이트를 제공합니다. 이 서비스는 Audit, IAM, Cloud Guard 등 다른 OCI 보안 서비스와 완벽하게 통합되어 보안 및 거버넌스 관리를 용이하게 합니다.

  5. 고가용성: 99.99% SLA와 RTO(복구 시간 목표) 및 RPO(복구 지점 목표)를 충족하는 능력을 통해 OCI의 PostgreSQL 사용자에게 최고의 내구성과 고가용성을 제공합니다.

  6. 간단한 사용자 경험: 다른 제품과 마찬가지로 PostgreSQL용 OCI 데이터베이스도 구성하기 쉽습니다. 데이터베이스 생성은 직관적이며, 설정 후에는 실행 중인 데이터베이스 시스템에 대한 전체적인 개요를 얻을 수 있습니다. 자세한 메트릭은 클러스터 상태를 모니터링하는 데 추가로 도움이 됩니다.

고객관리형 PostgreSQL(Vanilla) 사용자들이 겪는 문제점?

  1. 페일오버 중 데이터 손실 - 제로가 아닌 RPO: 위 그림에서 볼 수 있듯이 고객은 일반적으로 가용성 도메인 간에 데이터베이스 인스턴스를 복제합니다. 이 복제는 AD1에 있는 주 데이터베이스에서 AD2의 “복제본”으로 비동기적으로 수행됩니다. 복제 데이터베이스는 주 데이터베이스보다 뒤처질 수 있습니다. 주 데이터베이스가 실패하고 복제본이 새 주 데이터베이스로 승격되면 지연으로 인해 일부 데이터 손실이 발생할 가능성이 있습니다. 승격된 복제본이 이전 주 데이터베이스보다 얼마나 뒤처져 있는지에 따라 데이터 손실량이 결정됩니다. 바닐라 PostgreSQL에서는 성능 오버헤드가 크기 때문에 덜 인기 있는 동기식 복제 기능이 이 문제에 대한 해결책입니다.

  2. 수동 승격 및 관리 복잡성: 고가용성을 달성하기 위해 다른 가용성 도메인에 복제본을 설정할 수 있지만 대기 복제본을 주 데이터베이스로 승격하는 것은 수동적이고 복잡한 과정입니다. 데이터 손실을 최소화하기 위해 신중하게 새 후보를 선택해야 하며, 마찬가지로 이전 주 데이터베이스를 클러스터에 다시 추가하려면 더 많은 수동 단계가 필요합니다. 예를 들어, 이전 주 데이터베이스는 클러스터에 다시 참여하기 전에 pg_rewind와 같은 도구를 사용하여 먼저 로컬에서 커밋된 초과 트랜잭션을 제거해야 할 수 있습니다.

  3. 읽기 복제본 생성 비용이 많이 들고 느림: 바닐라 PostgreSQL에서는 새 복제본을 생성하려면 주 데이터베이스의 데이터를 스냅샷하고 주 데이터베이스를 따라가야 합니다. 테라바이트에 있을 수 있는 대용량 데이터베이스의 경우 이 작업은 비용이 많이 들고 느립니다. 애플리케이션의 읽기 수요 급증에 대처할 수 있도록 고객은 데이터베이스 리소스를 과잉 공급해야 합니다. 각 복제본은 데이터베이스의 전체 복사본을 가져야 하므로 여러 복제본을 실행하는 데 드는 스토리지 비용이 비싸질 수 있습니다.

Database Optimized Storage (DbOS)란?

OCI Database with PostgreSQL 서비스에서는 기존 고객관리형 PostgreSQL(Vanilla)을 사용하는 고객들이 주로 겪는 문제점을 보완하기 위한 향상된 아키텍처로 서비스를 제공합니다.

이제 OCI Database with PostgreSQL의 업그레이드된 아키텍처가 위에서 언급한 이러한 문제를 어떻게 해결하고 OCI에서 PostgreSQL을 실행하고 관리하는 것을 매우 간단하게 만들어 주는지 살펴보겠습니다. PostgreSQL이 있는 OCI 데이터베이스에서는 확장성, 고가용성, 고성능 데이터베이스 서비스를 가능하게 하기 위해 특별히 설계된 새로운 데이터베이스 최적화 스토리지(DbOS) 계층으로 복제 및 내구성 문제를 밀어냅니다. DbOS는 3개의 가용성 도메인 지역의 여러 가용성 도메인에 데이터 블록을 복제하는 고내구성 네트워크 연결 스토리지를 제공합니다. 단일 AD 지역에서는 데이터가 여러 장애 도메인에 복제됩니다. 클러스터의 모든 PostgreSQL 노드는 동일한 네트워크 연결 스토리지에 액세스합니다. 각 대기 복제본은 더 이상 데이터베이스의 자체 복사본을 유지할 필요가 없습니다. 주 인스턴스는 공유 스토리지에 쓰고 대기 복제 인스턴스는 동일한 공유 스토리지에서 읽고 사용자 쿼리를 처리합니다.

OCI Database with PostgreSQL에서 사용되는 새로운 공유 스토리지 아키텍처는 안전성, 유연성, 효율성 및 성능 측면에서 여러 가지 이점을 제공합니다. PostgreSQL이 있는 OCI 데이터베이스는 완전히 다른 스토리지 아키텍처를 기반으로 하지만 여전히 바닐라 PostgreSQL과 완전히 호환됩니다. 따라서 기존 PostgreSQL 워크로드를 PostgreSQL이 있는 OCI 데이터베이스로 손쉽게 이전하거나 다시 쉽게 되돌릴 수 있습니다. DbOS는 내장된 복제와 같은 고성능 OCI 블록 스토리지 기능을 활용하는 공유 파일 시스템입니다.

Database Optimized Storage (DbOS)의 특장점

  1. 내구성 (제로 RPO): DbOS는 다중 가용성 도메인 지역의 여러 가용성 도메인에 데이터를 복제하며, 전체 가용성 도메인의 손실을 견딜 수 있습니다. DbOS는 쿼럼 기반 복제를 사용하여 백그라운드에서 데이터 블록을 복제합니다. 주 노드가 실패하면 DB는 복제된 DbOS를 사용하는 다른 DB 노드에 페일오버 할 수 있으며, 새로 승격된 주 PostgreSQL 인스턴스는 데이터 손실 없이 인수 할 수 있습니다. 이전 주에 커밋된 모든 트랜잭션은 새 주에 존재합니다. DbOS 계층에서 복제를 수행하기 때문에 내구성을 위해 여러 복제 인스턴스를 실행할 필요가 없습니다. 예를 들어, 복제본 없이 단일 노드 OCI 데이터베이스의 PostgreSQL 인스턴스를 실행할 수 있지만 내구성을 희생하지는 않습니다. 이 단일 노드 설정에서도 제로 RPO를 보장받을 수 있습니다.

  2. 고가용성 (99.99%): OCI 데이터베이스의 PostgreSQL을 사용하면 몇 분 안에 클러스터의 다른 복제본으로 주를 자동으로 페일오버 할 수 있습니다. 복구 시간 목표가 몇 분 밖에 걸리지 않기 때문에 주 페일오버는 빠르고 애플리케이션에 거의 투명합니다. 페일오버를 투명하게 활성화하기 위해 주 엔드포인트는 새 주에 자동으로 이동되는 플로팅 IP 주소로 설정됩니다. 애플리케이션은 페일오버 후 애플리케이션에 대한 구성 변경 없이 자동으로 새 주에 데이터베이스 연결을 재설정합니다. 바닐라 PostgreSQL과 달리 주 페일오버를 시작하는 동안 복제 지연 및 데이터 손실을 걱정할 필요가 없습니다. 데이터 손실을 최소화하기 위해 특정 복제본을 수동으로 선택할 필요가 없습니다. 클러스터의 모든 인스턴스는 동일한 스토리지를 공유하므로 페일오버 시 새 주는 제로 데이터 손실을 보장합니다.

  3. 탄력성: 데이터베이스 스토리지는 모든 노드에서 공유되기 때문에 사용자 쿼리 워크로드 요구 사항을 충족하기 위해 빠르게 복제본을 생성하거나 삭제할 수 있습니다. 바닐라 PostgreSQL과 달리 주에서 데이터를 스냅샷하고 새 대기 PostgreSQL 인스턴스를 시작하기 위해 복제 노드에 복사할 필요가 없습니다. 따라서 PostgreSQL이 있는 OCI 데이터베이스에서 컴퓨트 인스턴스를 시작하는 것만큼 빠르게 대기 복제본을 만들 수 있습니다.

  4. 읽기 복제본의 수평 확장: OCI 데이터베이스의 PostgreSQL에서는 복제 노드가 데이터베이스 클러스터의 복제본 수에 관계없이 데이터베이스의 한 복사본만 유지하면 됩니다. 그 결과, OCI 데이터베이스의 PostgreSQL은 클라우드에서 바닐라 PostgreSQL을 실행하는 것에 비해 상당한 스토리지 비용 절감 효과를 제공합니다. 또한 OCI의 PostgreSQL 서비스는 비용을 최소화하기 위해 자동 스케일링과 함께 데이터에 대한 사용량 기반 가격 모델을 제공합니다.

  5. 낮은 복제 지연: 바닐라 PostgreSQL 읽기 복제본 설정에서 복제 지연은 주요한 과제입니다. 복제본은 주에서 수행된 모든 변경 사항을 재생하고 영구적으로 저장해야 하므로 특히 네트워크 파티션이 있는 경우 뒤처질 가능성이 높습니다. 공유 스토리지를 사용하면 복제본이 훨씬 적은 작업을 수행합니다. 캐시에 있는 페이지에 대한 변경 사항만 적용하면 되며, 이러한 변경 사항을 영구적으로 저장할 필요는 없습니다. 이 아키텍처를 사용하면 복제 지연은 일반적으로 몇 밀리초이므로 읽기 쿼리가 거의 실시간으로 실행되거나 완료될 수 있습니다.

  6. 효율적인 복제: OCI 데이터베이스의 PostgreSQL은 스토리지 계층에서 복제를 수행합니다. 따라서 주 인스턴스는 모든 복제본에 Write Ahead Log(WAL) 레코드를 물리적으로 전송할 필요가 없습니다. 대신, 새 변경 사항을 복제본에 알리고 각 복제본은 공유 스토리지에서 최신 WAL 레코드를 직접 읽습니다. 이를 통해 주에 걸리는 부하가 최소화

추가 스토리지 최적화

공유 스토리지 최적화 외에도 PostgreSQL이 있는 OCI 데이터베이스는 성능을 더욱 향상시키기 위해 다음과 같은 최적화를 구현했습니다.

  • 원자적 쓰기(Atomic writes): DbOS는 “잘린 쓰기(torn writes)” 제거와 같은 알려진 데이터베이스 성능 위험에 대한 최적화를 구현합니다. 일반적으로 대부분의 데이터베이스는 데이터베이스가 사용하는 페이지 크기(PostgreSQL은 8KB 사용)가 기반 스토리지의 “원자적 쓰기 단위(atomic write unit)” 크기(일반적으로 512B 또는 4KB)와 일치하지 않을 때 발생하는 “잘린 쓰기(torn writes)”에 대한 일종의 보호가 필요합니다. 예를 들어, PostgreSQL은 마지막 체크포인트 이후 해당 페이지에 대한 첫 번째 수정인 경우 전체 8KB 페이지를 WAL에 먼저 쓴 다음 페이지를 디스크에 플러시합니다. 페이지 쓰기가 잘리면 PostgreSQL은 이전에 WAL에 쓴 전체 페이지를 사용하는 것으로 돌아가고 아무런 해가 없습니다. 그러나 이러한 보호 기능에는 대가가 따릅니다. WAL의 풍선 효과를 유발하며, 계획되지 않은 페일오버 시 복구 시간을 최소화하기 위해 필요한 빈번한 체크포인트로 인해 문제가 더욱 악화됩니다. DbOS에서 PostgreSQL 페이지에 대한 원자적 쓰기를 지원합니다. 스토리지 계층은 기존 페이지를 절대 덮어쓰지 않습니다. 대신, 항상 디스크의 새 위치에 페이지를 쓰고 논리적 파일 오프셋에서 디스크 위치로의 매핑 레이어를 유지하는 로그 구조 기법을 사용합니다. 오래된 페이지 버전은 주기적으로 가비지 컬렉션됩니다. 이로 인해 이중 쓰기가 방지됩니다.

  • 최적화된 페이지 캐시: PostgreSQL은 일반적인 Linux 커널 페이지 캐시에 의존하는 고객관리형 PostgreSQL(Vanilla)과 달리 전용 캐시 계층을 사용합니다. OCI의 페이지 캐시 구현에는 다음과 같은 최적화가 포함되어 있습니다:

    1. PostgreSQL 워크로드에 맞게 맞춤 제작된 사용자 정의 프리페칭 로직.
    2. PostgreSQL 공유 버퍼와 페이지 캐시에서 페이지를 이중으로 캐싱하지 않습니다.
    3. 데이터 페이지를 미리 가져와 PostgreSQL 복구 속도를 높입니다.
  • 스토리지 수준 백업: 고객관리형 PostgreSQL(Vanilla)에서는 데이터베이스 백업을 유지하기 위해 WAL을 객체 스토리지에 복사하고 파일 시스템의 주기적인 스냅샷을 찍습니다. 이 과정은 주 노드의 네트워크와 CPU를 모두 사용합니다. PostgreSQL이 있는 OCI 데이터베이스는 백업을 스토리지 계층에 위임하여 백업에 대한 네트워크 및 CPU 오버헤드를 제거합니다.

서비스 가격

가격 정책은 PostgreSQL 서비스 비용으로 시간당 CPU 사용량, 월별 Storage 사용량으로 책정되며, 추가로 생성되는 Compute의 CPU, Memory, Storage 성능옵션 사용량으로 책정됩니다.

  • PostgreSQL 서비스 비용 (OCPU / 시간당)
  • PostgreSQL 스토리지 비용 (GB / 월별)
  • Compute IaaS 비용 (OCPU, Memory / 시간당)
  • 스토리지 성능옵션 비용 (GB / 월별)

예시. OCI PostgreSQL 서비스 1달 사용 예시 (2 OCPU, 32 GB 구성, 스토리지 100GB)

  • Database with PostgreSQL -> 2 OCPU * $0.098 * 744 Hours = $145.82
  • Database Optimized Storage -> 100 GB * $0.072 = $7.20
  • Storage_Block Volume_Performance Units -> 12000 * $0.0017 = $20.40
  • Compute OCPU -> 2 OCPU * $0.025 * 744 Hours = $37.20
  • Compute Memory -> 32 GB * $0.0015 * 744 Hours = $35.71

마무리

앞서 자세히 논의한 바와 같이 PostgreSQL이 있는 OCI 데이터베이스 서비스는 비용, 성능, 확장성, 가용성, 내구성 측면에서 상당한 이점을 제공합니다. 이러한 이점의 대부분을 달성하는 핵심은 PostgreSQL이 클라우드 규모에서 보다 효과적으로 작동하도록 최적화하기 위해 특별히 설계된 DbOS와 DbFS에 기반합니다.

주요 요점

  • PostgreSQL이 있는 OCI 데이터베이스는 모든 데이터베이스 노드가 동일한 기본 DbOS를 공유하는 전용 스토리지 아키텍처를 사용합니다.
  • DbOS는 주 페일오버 중 데이터 손실 없이(제로 RPO 페일오버) 자동으로 지역 전체에 데이터를 복제합니다.
  • PostgreSQL이 있는 OCI 데이터베이스는 읽기 작업을 수평으로 확장하고 클러스터의 모든 복제본에서 고성능 일관된 읽기를 가능하게 합니다.
  • 공유 스토리지는 고객이 여러 개의 데이터 복사본을 저장할 필요가 없고 데이터 크기가 감소하면 스토리지가 자동으로 축소되기 때문에 고객에게 상당한 비용 절감을 제공합니다.

참고자료




이 글은 개인적으로 얻은 지식과 경험을 작성한 글로 내용에 오류가 있을 수 있습니다. 또한 글 속의 의견은 개인적인 의견으로 특정 회사를 대변하지 않습니다.

Dialogue & Discussion