什麼是PolarDB PostgreSQL
PolarDB PostgreSQL(下文簡稱為PolarDB)是一款阿里雲自主研發的雲原生資料庫產品,100%相容PostgreSQL,採用基於Shared-Storage的儲存計算分離架構,具有極致彈性、毫秒級延遲、HTAP的能力。
- 極致彈性:儲存與計算能力均可獨立地橫向擴充套件。
- 當計算能力不夠時,可以單獨擴充套件計算叢集,資料無需複製。
- 當儲存容量/IO不夠時,可以單獨擴充套件儲存叢集,而不中斷業務。
- 毫秒級延遲:
- WAL日誌儲存在共享儲存上,RW到所有RO之間僅複製WAL的元資料。
- 獨創的LogIndex技術,實現了Lazy回放和Parallel回放,理論上最大程度地縮小了RW和RO節點間的延遲。
- HTAP能力:基於Shared-Storage的分散式並行執行框架,加速在OLTP場景下的OLAP查詢。一套OLTP型的資料,可支援2套計算引擎:
- 單機執行引擎:處理高併發的TP型負載。
- 分散式執行引擎:處理大查詢的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使用者搭建例項。
- 下載PolarDB原始碼,地址:https://github.com/alibaba/PolarDB-for-PostgreSQL/tree/main。
- 安裝相關依賴:
sudo yum install readline-devel zlib-devel perl-CPAN bison flex
sudo cpan -fi Test::More IPC::Run
- 根據不同的搭建場景,可選擇不同的指令碼執行命令:
- 只編譯資料庫原始碼,不建立本地例項:
./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
- 部署完成後,需要進行例項檢查和測試,確保部署正確。
- 例項檢查:
$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程式碼的軟體許可。相關的許可說明可參見License和NOTICE。
致謝
部分程式碼和設計思路參考了其他開源專案,例如:PG-XC/XL(pgxc_ctl)、TBase(部分基於時間戳的vacuum 和MVCC)、Greenplum以及Citus(pg_cron)。感謝以上開源專案的貢獻。
聯絡我們
- 使用釘釘掃描如下二維碼,加入PolarDB技術推廣組釘釘群。
企業級分散式開源資料庫 PolarDB for PostgreSQL-阿里雲開發者社群