在MySQL和PostgreSQL之外,為何阿里要研發HybridDB數據庫?
在大數據火遍 IT 界之前,大家對數據信息的挖掘通常聚焦在 BI(Business Intelligence)之上。BI 具有著明確的分析需求,清晰地知道需要處理哪些信息,并且如何最終獲得多維度的 SQL 類型數據,這種多維度的分析對應的是 OLAP 處理技術。在實際商業分析應用中,公司復雜信息模型、多樣化的分析需求會給數據庫帶來極大的技術挑戰。
對于阿里而言,實現 OLAP、進行在線大規模并行處理,是一個無法規避的技術問題。為此,阿里云研發了 HybridDB 方案,它基于數據庫 Greenplum 的開源版本,并且吸收 PostgreSQL 精髓。那么為什么會有 HybridDB 的誕生?它經歷了怎樣的研發歷程?它的應用場景和情況是怎樣的?帶著這些問題,InfoQ 對阿里云的數據庫專家兼 Postgres 中國社區/中國用戶會主席蕭少聰先生進行了采訪,以下文字整理自采訪文稿。
先來講講 OLTP 和 OLAP
數據庫領域中大家經常會看到兩個詞:OLTP 及 OLAP。
舉例說明,比如進行一次交易,資金從A帳戶轉帳到B帳戶,這整個過程就是一次交易事務。如果過程中有任何系統錯誤,交易會回滾A帳戶中的金額都回恢到操作前的狀態,這就是 On-Line Transaction Processing 聯機事務處理過程(OLTP)的操作。在 OLTP 場景中用戶并發操作量會很大,要求系統實時進行數據操作的響應,在查詢時往往也是只會檢索一條或幾條明確的目標數據,以實現用戶的業務交互。
OLAP 意思是 On-Line Analytical Processing 聯機分析處理,顧名思義就是主要針對于數據的分析匯總操作。如我們的業務系統中每天都需要出銷售日報,這個操作需要對當天所有數據進行匯總,并需要進行計算,以得到全天收入、產品銷售排名、分時段的銷售量,甚至與過去 30 天及去年當天進行對比,這樣的操作都屬于 OLAP。
業界早期使用數據時,尤其是 OLTP 場景下,通常選擇非分布式的關系型數據庫,如 MySQL、SQLServer、Oracle、PostgreSQL 即可滿足大部份的需求。
OLAP 中主流數據庫遭遇瓶頸
從技術角度而言,OLAP 場景,不僅涉及的數據量大而且要求分析的結果實時返回,對應的 SQL 查詢十分復雜。如何做到技術性能和業務功能權衡,對于數據庫而言是一個重大考驗。
已有的兩個主流開源數據庫,MySQL 和 PostgreSQL 都是針對 OLTP 環境的,在 OLAP 在線分析需求下它們的性能明顯不足。特別是 MySQL 在大規模分析操作時多表 Join 的性能是當前互聯網用戶的一大痛點。
在 OLAP 發展的早期,其操作并沒有專門的數據庫支撐,直接就與 OLTP 業務放在同一個數據庫中完成。但隨著業務量的增加,OLAP 每次要分析的數據量越來越大,這樣的分析操作執行時就會導致數據庫的業務交易下降。因此業界開始將 OLTP、OLAP 拆分成兩套不同的數據庫進行處理,OLTP 數據庫中的數據通過 ETL 軟件持續或定期抽取到 OLAP 數據庫,讓業務交易與報表分析進行分離。
而新的問題很快又到來了,聯互網爆發后數據量也激增,OLTP 的業務庫可以保存比較少的數據量如 3 個月到半年,但 OLAP 的數據量將可能要保存幾年甚至更多。單臺服務服務的性能上限已經無法滿足 OLAP 分析數據持續增加所帶來的壓力,因此催生出如阿里 HybridDB 這樣的大規模并行處理(Massive Parallel Processing,MPP)分布式 OLAP 數據庫。
新的分布式 OLAP 數據庫
在提供 HybridDB 方案之前,我們會給用戶提供如分庫分表等處理方案,但這樣的方案對于 SQL 查詢內容不確定的 OLAP 業務并不友好。當用戶需要進行多個數據表的組合操作時,由于數據需要跨服務器進行大規模的聚合,性能十分低下。這個問題在 HybridDB 中也同樣會出現,所幸的是,Greenplum Database 開源項目中借助平行的數據擴展技術及 interconnect 的專用協議,通過自定義的網絡協議有效地解決了網絡瓶頸的問題。這也是我們選擇基于 Greenplum Database 開源項目的原因之一。
簡單來說,MPP 是一種平衡的性能擴張模型。以 HybridDB 的模型為列,每個節點可存放的數據量及計算能力為 1Core / 8GB Mem / 80GB SSD(即將開放 500GB HDD 版本),如果用戶 80GB 以內的數據在這樣的計算單元中,可以在毫秒內查詢出結果,那將數據計算能力及容量平衡擴展到上百 TB 甚至 PB 時,用戶查詢“等比”數據量時依然可以達到毫秒級別。
MPP 分布式 OLAP 數據庫系統架構已經發展了有 10 多年之久,十分成熟,當前使用這類系統的企業都是中大型公司。OLAP 是一個很大的市場,有別于如同 EMR (Hadoop)的大數據分析市場,它要求海量數據的 SQL 查詢在幾分鐘、幾秒,甚至毫秒級返回結果,因此對于服務器、網絡及數據庫軟件本身的架構都提出了很高的要求。
技術攻堅之路
阿里一直都在使用并研究 OLAP,實際上在 2009 年左右開始使用 Greenplum,如果沒有記錯,那個時候的規模應該是國內甚至全亞洲最大的 GPDB 集群。
研發之路并不是一帆風順,甚至一度突圍失敗。一方面,彼時 Greenplum 還處在萌芽期,只發布了 4 年。另一方面,Greenplum 沒有開源,既無法掌握更為深入的資料,又不得不考慮價格因素。你可以想象阿里所在行業對于數據可靠性的要求以及規模量,使得對于數據庫的選擇會有多個維度的考慮。
不過早期的經歷還是給我們留下了寶貴的經驗。當年的很多運維經驗我們都進行了收集,并在現有平臺中變成了我們的監控項,通過自動化運維的手段進行資源調配及故障預警,這對我們平臺的穩定性提供了很重要的經驗。同時針對以前遇到的很多讓我們技術同學不理解的原理性問題,通過 Greenplum Database 的源代碼我們進行了重點分析,并找到了問題的答案。有很多之前遇到過的問題,通過源碼可以明確發現已經由廠商進行了修復,而有一些問題可能與我們的業務場景有關,結合源碼我們也進行了內核的優化。
2015 年 10 月 Greenplum Database 由 Pivotal 開源后,阿里云 PostgreSQL 內核團隊便開始進行深度的調研,于 2016 年開始進行產品的研發工作,到今年 7 月份我們對用戶開放了公測邀請并準備正式商業化的工作。
為什么選擇基于 Greenplum?主要有三點考慮:
- 生態:基于 10 年商業數據庫建立的生態是寶貴的財富,讓用戶的使用變得更為便捷。
- 成熟:經過我們深度的壓力測試(過程還是十分暴力的,在此不表^_^),我們驗證了 Greenplum 本身的穩定性,同時 GPDB 提供豐富的 SQL 支持、編程接口易于進行擴展,這些都體現了她的成熟度。
- 開源:只有掌握源碼才可以協助用戶最快地解決問題,同時 Greenplum 基于 PostgreSQL,基于這一點,用戶可以使用統一的 PostgreSQL 的 JDBC 或 .NET 驅動開發 OLTP 及 OLAP 的軟件,減少不同數據庫協議之間的學習成本及研發復雜度。
揭秘 HybridDB 方案
HybridDB 基于開源 Greenplum Database (內核實際上就是 PostgreSQL)項目的 MPP 分布式數據倉庫,與 PostgreSQL 不同,HybridDB 可以實現橫向擴展,提供用戶需要的百 GB 到百 TB 的高性能分析能力。
接下來結合項目說明實際應用。
我們有一個廣告行業的用戶,他們給用戶提供線上的數據分析業務,同時也會將他們的產品進行線下私有環境的軟件售賣。每天他們都需要進行過億數據的匯總分析,增量數據也都在千萬級別,當前通過使用 HybridDB 進行他們線上業務的支持。一些單表的查詢在毫秒級別就可以輸出結果,而很多需要多表 Join 的復雜查詢也在數秒內就會有結果返回。同時這個用戶給 HybridDB 提出 HyperLogLog 的功能需求后,我們在 2 周內就給予了這個功能的支持,使得用戶在進行數據預估分析的操作性能提高幾十倍。與此同時用戶線上使用 HybridDB 開發的產品,也可以十分便捷地運行在線下的開源或商業版本的 Greenplum 上,避免了在不同數據庫平臺上需要重新開發應用系統的工作量。
在阿里云官網上,HybridDB 歸結在 “數據庫” 和 “分析” 兩個類目。阿里內部已經有業務開始使用 HybridDB ,主要是看重它對 SQL 的豐富支持,同時可以支持 GIS 數據類型及基于事務一致性的存儲過程。
HybridDB 最大的三個特色:
- 基于成熟的 GPDB 及 PostgreSQL 生態,軟開發合作伙伴進行一次軟件開發,即可在云上云下同樣使用,免去遷移的煩惱,更容易實現混合云中的數據分析支持。
-
支持多種混合數據類型(多達 23 種)的 SQL 統一查詢,包括:
傳統數據類型:字符、數字、浮點、日期等;
非結構化數據:JSON、XML;
特殊功能數據類型:GIS 地理信息數據、IPv4/v6 網絡數據、HyperLogLog 預估分析數據。
- 支持混合的數據存儲,包括:行存、列存、SSD/HDD 本地存儲、OSS 云存儲,未來更將支持“存儲計算分離”,用戶可以更為靈活在進行資源的購買及分配。
那么,HybridDB 在 OLAP 讀取中都做了哪些優化?
優化方面從引擎底層我們針對阿里云的硬件及網絡特點,進行的源碼級別的深度優化,特別是在網絡調度上進行了針對性的處理,提高跨網絡數據節點的吞吐能力。同時在用戶業務層中對特殊數據類型進行擴展,如果物聯網中的 JSON 數據類型是 Greenplum Database 所不支持的,HybridDB 通過直接支持這一數據類型,避免用戶自行進行非結果化的解析,同時提供基于函數的 JSON 屬性級索引,提高數據庫處理 JSON 的檢索性能。
除此之外,HybridDB 還有哪些新意?
HybridDB 是云上的數據倉庫,用戶如果在自己的私有環境中進行類似架構的部署,將需要富有經驗的架構師進行完整的規劃,同時還要聘用高水平的技術團隊進行持續管理。因為如果系統出現故障無法提供服務,將很可能影響到企業的決策分析,對于以數據分析的基礎的企業甚至會導致業務中斷,通過使用云數據庫 HybridDB 將免除這些煩惱。
將 MySQL 和 PostgreSQL 數據導入到 HybridDB 的這個流程實際上并沒有很深的數據難度,因為 MySQL 和 PostgreSQL 都支持基于的邏輯日志,我們只需要進行解析并入庫就可以了。在數據導入方面,我們借助 OSS 分布式數據存儲的能力,實現了多計算節點的并行導入,每個計算單元(1Core/8GBMem 為一個計算單元)可以達到接近 20MB/s的數據導入,如果用戶構建出一個 64 節點的 HybridDB 集群將可以達到 1GB/s的數據導入能力。在我們的實際用戶使用中,已經有用戶通過這個方法在 4 分鐘內導入了 4 億條數據。
另一方面 HybridDB 還支持將數據存放到 OSS 云存儲,實現廉價的數據存儲方案,為用戶節省更多成本。
數據存儲
1、本地存儲
HybridDB 的本地存儲分為行儲存和列存儲兩種方式。行存儲和列存儲各有長處。行存適合于近線數據的分析,特別是要求查詢結果返回表中某幾跳符合條件記錄的所有字段的情況。列存適合用于數據的統計分析。
那么兩者的適用情況是怎樣的呢?舉例說明:在行存的情況下,如果一個用于存放用戶的表中有 20 個字段,但我們只要統計用戶年齡的平均值,這時數據庫要對用戶表進行全表掃描,遍歷所有行的所有數據;但如果使用列存,數據庫只要定位到這一列,然后只掃描這一列的數據就可以得到所有的結果,性能上相比列存理論上就會直接快 20 倍,加上 HybridDB 將數據分布式存儲到多個計算節點,性能將再次提高幾倍,達到 100 倍性能提升是十分常見。
HybridDB 是混合兩者搭配使用的。用戶可以配搭進行使用,定義不同的表使用不同的存儲方式,讓用戶適應不同的業務場景,并進行數據生態周期的管理。如 6 個月內的數據可能要經常獲取全行數據,因此使用行存儲,6 個月后的數據通過列存儲進行保存提高分析匯總操作的查詢性能。
2、外部存儲
高性能的數據分析是在本地存儲完成的。OSS 作為外部存儲,HybridDB 可以將 OSS 中的 CSV 格式化文本作為外部表進行數據查詢,同時還可以對這些外部表進行寫入操作。寫入到 OSS 的數據可以提供給 RDS for PostgreSQL 或 EMR 等云數據庫服務進行讀取及處理,因此也同時實現了數據的無縫打通。
同時我們也將支持“存儲計算分析”的模型,在這樣模型上我們平時甚至可以只通過 OSS 進行數據的存儲,當需要進行計算時再開啟足夠的計算節點進行數據分析處理,計算處理結束后關閉計算節點資源以節省使用成本。
HybridDB 的幕后故事
1、扎根社區
當前我們基于開源版本的 Greenplum Database,同時我們也會進行一些功能的添加及性能穩定性上的優化工作,我們也會逐步進行對開源社區的更多的貢獻,如當前我們就已經開源了支持 Greenplum、PostgreSQL 及 HybridDB 的數據同步工具 dbsync (https://github.com/aliyun/rds_dbsync),有興趣的讀者可以下載測試及使用。
在 Greenplum Database 的開源社區我們會有很多的合作,甚至我們已經在向開源社區提交新功能及 patch。同時 Greenplum 也是 PostgreSQL 開源數據庫生態重要的力量,我個人同時作為 PostgreSQL 中國社區及用戶會的主席也當然會進行更多線上線下活動的支持。
2、商業合作
Greenplum 背后的公司是 Pivotal。所以同時也與 Pivotal 有更多的商業合作。阿里也會與 Pivotal 方面進行持續的接觸,相信我們會有機會碰出絢麗的火花。
寫在最后
長期以來國外開源社區都認為中國用戶僅僅使用開源軟件,但是貢獻甚少。不過,隨著阿里的發展,我們已經開始反哺開源社區并共同建立生態。幾個月前,AliSQL 的開源說明了阿里對開源業界的支持。HybridDB 同樣如此,雖然我們的版本才剛剛發布,但在版本研發的過程中已經開始向社區共享代碼。
阿里云當前支持云數據庫 HybridDB,暫時沒有計劃去支持私有環境的 Greenplum 數據庫。不過我們團隊的大神德哥,會繼續貢獻他在使用 Greenplum 的經驗心得。希望對大家有所幫助。
用戶在線下可以使用 Greenplum 的開源數據庫版本或商業版本,據我所了解也已經有很多數據庫服務商開始提供 Greenplum 的技術支持,使用這個數據庫的用戶不需要再擔心未來上云遷移的問題。同時,我們也會在未來結合 PostgreSQL 及 HybridDB 提供一系列的使用教學視頻,讓用戶更快速地掌握產品的正確使用場景及方法。
作者簡介
蕭少聰,Postgres 中國社區/中國用戶會主席,阿里云計算有限公司 ApsaraDB 云數據庫產品專家。紅帽認證 RHCA 架構師/EDB 認證 PostgreSQL 數據庫專家,參與的著作有《Linux 系統案例精解》、《深入理解大數據》。在阿里主要負責 PostgreSQL 數據庫產品線。擁有多年開發、架構設計及項目管理經驗,專注于開源 Linux 系統管理及 Postgres 數據庫、優化、集群系統、云架構設計。
來自: InfoQ