什麼是PolarDB PostgreSQL

PolarDB PostgreSQL(下文簡稱為PolarDB)是一款阿里雲自主研發的雲原生資料庫產品,100%相容PostgreSQL,採用基於Shared-Storage的儲存計算分離架構,具有極致彈性、毫秒級延遲、HTAP的能力。

  1. 極致彈性:儲存與計算能力均可獨立地橫向擴充套件。
    1. 當計算能力不夠時,可以單獨擴充套件計算叢集,資料無需複製。
    2. 當儲存容量/IO不夠時,可以單獨擴充套件儲存叢集,而不中斷業務。
  1. 毫秒級延遲:
    1. WAL日誌儲存在共享儲存上,RW到所有RO之間僅複製WAL的元資料。
    2. 獨創的LogIndex技術,實現了Lazy回放和Parallel回放,理論上最大程度地縮小了RW和RO節點間的延遲。
  1. HTAP能力:基於Shared-Storage的分散式並行執行框架,加速在OLTP場景下的OLAP查詢。一套OLTP型的資料,可支援2套計算引擎:
    1. 單機執行引擎:處理高併發的TP型負載。
    2. 分散式執行引擎:處理大查詢的AP型負載。

PolarDB還支援時空、GIS、影象、向量、搜尋、圖譜等多模創新特性,應對企業對資料處理日新月異的需求。
另外,除了上述Shared-Storage雲原生的模式,PolarDB還支援以Shared-Nothing模式部署,詳見distribute分支的Readme

分支說明

PolarDB後續預設分支為main分支,支援儲存計算分離的形態。distribute分支是分散式形態(對應之前的master分支)。

產品架構和版本規劃

PolarDB採用了基於Shared-Storage的儲存計算分離架構。資料庫由傳統的Share-Nothing,轉變成了Shared-Storage架構。由原來的N份計算+N份儲存,轉變成了N份計算+1份儲存。雖然共享儲存上資料是一份,但是資料在記憶體中的狀態是不同的,需要通過記憶體狀態的同步來維護資料的一致性;同時主節點在刷髒時也需要做協調,避免只讀節點讀取到超前的“未來頁面”,也要避免只讀節點讀取到過時的沒有在記憶體中被正確回放的“過去頁面”。為了解決該問題,PolarDB創造性地設計了LogIndex資料結構來維護頁面的回放歷史,該結構能夠在主節點到只讀節點進行同步。
在儲存計算分離後,IO單路延遲變大的同時,IO的吞吐也變大了。在處理分析型查詢時,僅使用單個只讀節點無法發揮出儲存側的大IO頻寬優勢,也無法發揮其他只讀節點的CPU/Mem/IO。為了解決該問題,PolarDB研發了基於Shared-Storage的並行執行引擎,能夠在SQL級別上彈性利用任意數目的CPU來加速分析查詢,支援HTAP的混合負載場景。
詳情請查閱產品架構版本規劃

文件

快速入門

我們提供了三種途徑來使用PolarDB資料庫:阿里巴巴雲服務、搭建本地儲存的例項、搭建基於PFS共享儲存的例項(即將上線)。

阿里巴巴雲服務

阿里云云原生關係型資料庫PolarDB PostgreSQL引擎:官網地址

搭建本地儲存的例項

我們提供了一鍵部署指令碼,助您快速編譯PolarDB核心並搭建本地例項。本節介紹瞭如何通過提供的一鍵部署指令碼,快速搭建儲存為本地磁碟的PolarDB例項。
**作業系統要求:**CentOS 7.5及以上。以下步驟在CentOS 7.5上通過測試。
**說明:**請使用同一個使用者進行以下步驟。請勿使用root使用者搭建例項。

  1. 下載PolarDB原始碼,地址:https://github.com/alibaba/PolarDB-for-PostgreSQL/tree/main
  2. 安裝相關依賴:
sudo yum install readline-devel zlib-devel perl-CPAN bison flex
sudo cpan -fi Test::More IPC::Run
  1. 根據不同的搭建場景,可選擇不同的指令碼執行命令:
  • 只編譯資料庫原始碼,不建立本地例項:
./polardb_build.sh --noinit
  • 編譯並建立本地單節點例項,節點為主節點(埠為5432):
./polardb_build.sh
  • 編譯並建立本地多節點例項,節點包括:
    • 主節點1個(埠為5432)。
    • 只讀節點1個(埠為5433)。
./polardb_build.sh --withrep --repnum=1
  • 編譯並建立本地多節點例項,節點包括:
    • 主節點1個(埠為5432)。
    • 只讀節點1個(埠為5433)。
    • 備庫節點1個(埠為5434)。
./polardb_build.sh --withrep --repnum=1 --withstandby
  • 編譯並建立本地多節點例項,節點包括:
    • 主節點1個(埠為5432)
    • 只讀節點2個(埠分別為5433與5434)
    • 備庫節點1個(埠為5435)。
./polardb_build.sh --withrep --repnum=2 --withstandby
  1. 部署完成後,需要進行例項檢查和測試,確保部署正確。
  • 例項檢查:
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -p 5432 -c 'select version();'
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -p 5432 -c 'select * from pg_replication_slots;'
  • 一鍵執行全量回歸測試:
./polardb_build.sh --withrep --repnum=1 --withstandby -r-check-all -e -r-contrib -r-pl -r-external -r-installcheck-all

軟體許可說明

PolarDB的程式碼的釋出基於Apache 2.0版本和PostgreSQL程式碼的軟體許可。相關的許可說明可參見LicenseNOTICE

致謝

部分程式碼和設計思路參考了其他開源專案,例如:PG-XC/XL(pgxc_ctl)、TBase(部分基於時間戳的vacuum 和MVCC)、Greenplum以及Citus(pg_cron)。感謝以上開源專案的貢獻。

聯絡我們

  • 使用釘釘掃描如下二維碼,加入PolarDB技術推廣組釘釘群。

企業級分散式開源資料庫 PolarDB for PostgreSQL-阿里雲開發者社群