最近在考慮解決打點問題的數(shù)據(jù)庫選型驶鹉。希望阿里云上能提供一些TiDB類似的產(chǎn)品荠商,同時支持OLTP和OLAP的跷乐,因此找到了HybridDB。分享一下下面文章
? ? ? ?在大數(shù)據(jù)火遍 IT 界之前族跛,大家對數(shù)據(jù)信息的挖掘通常聚焦在 BI(Business Intelligence)之上。BI 具有著明確的分析需求锐墙,清晰地知道需要處理哪些信息礁哄,并且如何最終獲得多維度的 SQL 類型數(shù)據(jù),這種多維度的分析對應(yīng)的是 OLAP 處理技術(shù)溪北。在實際商業(yè)分析應(yīng)用中桐绒,公司復(fù)雜信息模型夺脾、多樣化的分析需求會給數(shù)據(jù)庫帶來極大的技術(shù)挑戰(zhàn)。
? ? ? ?對于阿里而言茉继,實現(xiàn) OLAP咧叭、進行在線大規(guī)模并行處理,是一個無法規(guī)避的技術(shù)問題烁竭。為此菲茬,阿里云研發(fā)了 HybridDB 方案,它基于數(shù)據(jù)庫 Greenplum 的開源版本派撕,并且吸收 PostgreSQL 精髓婉弹。那么為什么會有 HybridDB 的誕生?它經(jīng)歷了怎樣的研發(fā)歷程终吼?它的應(yīng)用場景和情況是怎樣的镀赌?帶著這些問題,InfoQ 對阿里云的數(shù)據(jù)庫專家兼 Postgres 中國社區(qū)/中國用戶會主席蕭少聰先生進行了采訪衔峰,以下文字整理自采訪文稿佩脊。
先來講講 OLTP 和 OLAP
數(shù)據(jù)庫領(lǐng)域中大家經(jīng)常會看到兩個詞:OLTP 及 OLAP。
舉例說明垫卤,比如進行一次交易威彰,資金從A帳戶轉(zhuǎn)帳到B帳戶,這整個過程就是一次交易事務(wù)穴肘。如果過程中有任何系統(tǒng)錯誤歇盼,交易會回滾A帳戶中的金額都回恢到操作前的狀態(tài),這就是 On-Line Transaction Processing 聯(lián)機事務(wù)處理過程(OLTP)的操作评抚。在 OLTP 場景中用戶并發(fā)操作量會很大豹缀,要求系統(tǒng)實時進行數(shù)據(jù)操作的響應(yīng),在查詢時往往也是只會檢索一條或幾條明確的目標(biāo)數(shù)據(jù)慨代,以實現(xiàn)用戶的業(yè)務(wù)交互邢笙。
OLAP 意思是 On-Line Analytical Processing 聯(lián)機分析處理,顧名思義就是主要針對于數(shù)據(jù)的分析匯總操作侍匙。如我們的業(yè)務(wù)系統(tǒng)中每天都需要出銷售日報氮惯,這個操作需要對當(dāng)天所有數(shù)據(jù)進行匯總,并需要進行計算想暗,以得到全天收入妇汗、產(chǎn)品銷售排名、分時段的銷售量说莫,甚至與過去 30 天及去年當(dāng)天進行對比杨箭,這樣的操作都屬于 OLAP。
業(yè)界早期使用數(shù)據(jù)時储狭,尤其是 OLTP 場景下互婿,通常選擇非分布式的關(guān)系型數(shù)據(jù)庫捣郊,如 MySQL、SQLServer擒悬、Oracle模她、PostgreSQL 即可滿足大部份的需求。
OLAP 中主流數(shù)據(jù)庫遭遇瓶頸
從技術(shù)角度而言懂牧,OLAP 場景侈净,不僅涉及的數(shù)據(jù)量大而且要求分析的結(jié)果實時返回,對應(yīng)的 SQL 查詢十分復(fù)雜僧凤。如何做到技術(shù)性能和業(yè)務(wù)功能權(quán)衡畜侦,對于數(shù)據(jù)庫而言是一個重大考驗。
已有的兩個主流開源數(shù)據(jù)庫躯保,MySQL 和 PostgreSQL 都是針對 OLTP 環(huán)境的旋膳,在 OLAP 在線分析需求下它們的性能明顯不足。特別是 MySQL 在大規(guī)模分析操作時多表 Join 的性能是當(dāng)前互聯(lián)網(wǎng)用戶的一大痛點途事。
在 OLAP 發(fā)展的早期验懊,其操作并沒有專門的數(shù)據(jù)庫支撐,直接就與 OLTP 業(yè)務(wù)放在同一個數(shù)據(jù)庫中完成尸变。但隨著業(yè)務(wù)量的增加义图,OLAP 每次要分析的數(shù)據(jù)量越來越大,這樣的分析操作執(zhí)行時就會導(dǎo)致數(shù)據(jù)庫的業(yè)務(wù)交易下降召烂。因此業(yè)界開始將 OLTP碱工、OLAP 拆分成兩套不同的數(shù)據(jù)庫進行處理,OLTP 數(shù)據(jù)庫中的數(shù)據(jù)通過 ETL 軟件持續(xù)或定期抽取到 OLAP 數(shù)據(jù)庫奏夫,讓業(yè)務(wù)交易與報表分析進行分離怕篷。
而新的問題很快又到來了,聯(lián)互網(wǎng)爆發(fā)后數(shù)據(jù)量也激增酗昼,OLTP 的業(yè)務(wù)庫可以保存比較少的數(shù)據(jù)量如 3 個月到半年廊谓,但 OLAP 的數(shù)據(jù)量將可能要保存幾年甚至更多。單臺服務(wù)服務(wù)的性能上限已經(jīng)無法滿足 OLAP 分析數(shù)據(jù)持續(xù)增加所帶來的壓力麻削,因此催生出如阿里 HybridDB 這樣的大規(guī)模并行處理(Massive Parallel Processing蹂析,MPP)分布式 OLAP 數(shù)據(jù)庫。
新的分布式 OLAP 數(shù)據(jù)庫
在提供 HybridDB 方案之前碟婆,我們會給用戶提供如分庫分表等處理方案,但這樣的方案對于 SQL 查詢內(nèi)容不確定的 OLAP 業(yè)務(wù)并不友好惕稻。當(dāng)用戶需要進行多個數(shù)據(jù)表的組合操作時竖共,由于數(shù)據(jù)需要跨服務(wù)器進行大規(guī)模的聚合,性能十分低下俺祠。這個問題在 HybridDB 中也同樣會出現(xiàn)公给,所幸的是借帘,Greenplum Database 開源項目中借助平行的數(shù)據(jù)擴展技術(shù)及 interconnect 的專用協(xié)議,通過自定義的網(wǎng)絡(luò)協(xié)議有效地解決了網(wǎng)絡(luò)瓶頸的問題淌铐。這也是我們選擇基于 Greenplum Database 開源項目的原因之一肺然。
簡單來說,MPP 是一種平衡的性能擴張模型腿准。以 HybridDB 的模型為列际起,每個節(jié)點可存放的數(shù)據(jù)量及計算能力為 1Core / 8GB Mem / 80GB SSD(即將開放 500GB HDD 版本),如果用戶 80GB 以內(nèi)的數(shù)據(jù)在這樣的計算單元中吐葱,可以在毫秒內(nèi)查詢出結(jié)果街望,那將數(shù)據(jù)計算能力及容量平衡擴展到上百 TB 甚至 PB 時,用戶查詢“等比”數(shù)據(jù)量時依然可以達到毫秒級別弟跑。
MPP 分布式 OLAP 數(shù)據(jù)庫系統(tǒng)架構(gòu)已經(jīng)發(fā)展了有 10 多年之久灾前,十分成熟,當(dāng)前使用這類系統(tǒng)的企業(yè)都是中大型公司孟辑。OLAP 是一個很大的市場哎甲,有別于如同 EMR (Hadoop)的大數(shù)據(jù)分析市場,它要求海量數(shù)據(jù)的 SQL 查詢在幾分鐘饲嗽、幾秒炭玫,甚至毫秒級返回結(jié)果,因此對于服務(wù)器喝噪、網(wǎng)絡(luò)及數(shù)據(jù)庫軟件本身的架構(gòu)都提出了很高的要求础嫡。
技術(shù)攻堅之路
阿里一直都在使用并研究 OLAP,實際上在 2009 年左右開始使用 Greenplum酝惧,如果沒有記錯榴鼎,那個時候的規(guī)模應(yīng)該是國內(nèi)甚至全亞洲最大的 GPDB 集群。
研發(fā)之路并不是一帆風(fēng)順晚唇,甚至一度突圍失敗巫财。一方面,彼時 Greenplum 還處在萌芽期哩陕,只發(fā)布了 4 年平项。另一方面,Greenplum 沒有開源悍及,既無法掌握更為深入的資料闽瓢,又不得不考慮價格因素。你可以想象阿里所在行業(yè)對于數(shù)據(jù)可靠性的要求以及規(guī)模量心赶,使得對于數(shù)據(jù)庫的選擇會有多個維度的考慮扣讼。
不過早期的經(jīng)歷還是給我們留下了寶貴的經(jīng)驗。當(dāng)年的很多運維經(jīng)驗我們都進行了收集缨叫,并在現(xiàn)有平臺中變成了我們的監(jiān)控項椭符,通過自動化運維的手段進行資源調(diào)配及故障預(yù)警荔燎,這對我們平臺的穩(wěn)定性提供了很重要的經(jīng)驗。同時針對以前遇到的很多讓我們技術(shù)同學(xué)不理解的原理性問題销钝,通過 Greenplum Database 的源代碼我們進行了重點分析有咨,并找到了問題的答案。有很多之前遇到過的問題蒸健,通過源碼可以明確發(fā)現(xiàn)已經(jīng)由廠商進行了修復(fù)座享,而有一些問題可能與我們的業(yè)務(wù)場景有關(guān),結(jié)合源碼我們也進行了內(nèi)核的優(yōu)化纵装。
2015 年 10 月 Greenplum Database 由 Pivotal 開源后征讲,阿里云 PostgreSQL 內(nèi)核團隊便開始進行深度的調(diào)研,于 2016 年開始進行產(chǎn)品的研發(fā)工作橡娄,到今年 7 月份我們對用戶開放了公測邀請并準(zhǔn)備正式商業(yè)化的工作诗箍。
為什么選擇基于 Greenplum?主要有三點考慮:
生態(tài):基于 10 年商業(yè)數(shù)據(jù)庫建立的生態(tài)是寶貴的財富挽唉,讓用戶的使用變得更為便捷滤祖。
成熟:經(jīng)過我們深度的壓力測試(過程還是十分暴力的,在此不表^_^)瓶籽,我們驗證了 Greenplum 本身的穩(wěn)定性匠童,同時 GPDB 提供豐富的 SQL 支持、編程接口易于進行擴展塑顺,這些都體現(xiàn)了她的成熟度汤求。
開源:只有掌握源碼才可以協(xié)助用戶最快地解決問題,同時 Greenplum 基于 PostgreSQL严拒,基于這一點扬绪,用戶可以使用統(tǒng)一的 PostgreSQL 的 JDBC 或 .NET 驅(qū)動開發(fā) OLTP 及 OLAP 的軟件,減少不同數(shù)據(jù)庫協(xié)議之間的學(xué)習(xí)成本及研發(fā)復(fù)雜度裤唠。
揭秘 HybridDB 方案
HybridDB 基于開源 Greenplum Database (內(nèi)核實際上就是 PostgreSQL)項目的 MPP 分布式數(shù)據(jù)倉庫挤牛,與 PostgreSQL 不同,HybridDB 可以實現(xiàn)橫向擴展种蘸,提供用戶需要的百 GB 到百 TB 的高性能分析能力墓赴。
接下來結(jié)合項目說明實際應(yīng)用。
我們有一個廣告行業(yè)的用戶航瞭,他們給用戶提供線上的數(shù)據(jù)分析業(yè)務(wù)诫硕,同時也會將他們的產(chǎn)品進行線下私有環(huán)境的軟件售賣。每天他們都需要進行過億數(shù)據(jù)的匯總分析刊侯,增量數(shù)據(jù)也都在千萬級別痘括,當(dāng)前通過使用 HybridDB 進行他們線上業(yè)務(wù)的支持。一些單表的查詢在毫秒級別就可以輸出結(jié)果,而很多需要多表 Join 的復(fù)雜查詢也在數(shù)秒內(nèi)就會有結(jié)果返回纲菌。同時這個用戶給 HybridDB 提出 HyperLogLog 的功能需求后,我們在 2 周內(nèi)就給予了這個功能的支持疮绷,使得用戶在進行數(shù)據(jù)預(yù)估分析的操作性能提高幾十倍翰舌。與此同時用戶線上使用 HybridDB 開發(fā)的產(chǎn)品,也可以十分便捷地運行在線下的開源或商業(yè)版本的 Greenplum 上冬骚,避免了在不同數(shù)據(jù)庫平臺上需要重新開發(fā)應(yīng)用系統(tǒng)的工作量椅贱。
在阿里云官網(wǎng)上,HybridDB 歸結(jié)在 “數(shù)據(jù)庫” 和 “分析” 兩個類目只冻。阿里內(nèi)部已經(jīng)有業(yè)務(wù)開始使用 HybridDB 庇麦,主要是看重它對 SQL 的豐富支持,同時可以支持 GIS 數(shù)據(jù)類型及基于事務(wù)一致性的存儲過程喜德。
HybridDB 最大的三個特色:
基于成熟的 GPDB 及 PostgreSQL 生態(tài)山橄,軟開發(fā)合作伙伴進行一次軟件開發(fā),即可在云上云下同樣使用舍悯,免去遷移的煩惱航棱,更容易實現(xiàn)混合云中的數(shù)據(jù)分析支持。
支持多種混合數(shù)據(jù)類型(多達 23 種)的 SQL 統(tǒng)一查詢萌衬,包括:
傳統(tǒng)數(shù)據(jù)類型:字符饮醇、數(shù)字、浮點秕豫、日期等朴艰;
非結(jié)構(gòu)化數(shù)據(jù):JSON、XML混移;
特殊功能數(shù)據(jù)類型:GIS 地理信息數(shù)據(jù)祠墅、IPv4/v6 網(wǎng)絡(luò)數(shù)據(jù)、HyperLogLog 預(yù)估分析數(shù)據(jù)沫屡。
支持混合的數(shù)據(jù)存儲饵隙,包括:行存、列存沮脖、SSD/HDD 本地存儲金矛、OSS 云存儲,未來更將支持“存儲計算分離”勺届,用戶可以更為靈活在進行資源的購買及分配驶俊。
那么,HybridDB 在 OLAP 讀取中都做了哪些優(yōu)化免姿?
優(yōu)化方面從引擎底層我們針對阿里云的硬件及網(wǎng)絡(luò)特點饼酿,進行的源碼級別的深度優(yōu)化,特別是在網(wǎng)絡(luò)調(diào)度上進行了針對性的處理,提高跨網(wǎng)絡(luò)數(shù)據(jù)節(jié)點的吞吐能力故俐。同時在用戶業(yè)務(wù)層中對特殊數(shù)據(jù)類型進行擴展想鹰,如果物聯(lián)網(wǎng)中的 JSON 數(shù)據(jù)類型是 Greenplum Database 所不支持的,HybridDB 通過直接支持這一數(shù)據(jù)類型药版,避免用戶自行進行非結(jié)果化的解析辑舷,同時提供基于函數(shù)的 JSON 屬性級索引,提高數(shù)據(jù)庫處理 JSON 的檢索性能槽片。
除此之外何缓,HybridDB 還有哪些新意?
HybridDB 是云上的數(shù)據(jù)倉庫还栓,用戶如果在自己的私有環(huán)境中進行類似架構(gòu)的部署碌廓,將需要富有經(jīng)驗的架構(gòu)師進行完整的規(guī)劃,同時還要聘用高水平的技術(shù)團隊進行持續(xù)管理剩盒。因為如果系統(tǒng)出現(xiàn)故障無法提供服務(wù)谷婆,將很可能影響到企業(yè)的決策分析,對于以數(shù)據(jù)分析的基礎(chǔ)的企業(yè)甚至?xí)?dǎo)致業(yè)務(wù)中斷勃刨,通過使用云數(shù)據(jù)庫 HybridDB 將免除這些煩惱波材。
將 MySQL 和 PostgreSQL 數(shù)據(jù)導(dǎo)入到 HybridDB 的這個流程實際上并沒有很深的數(shù)據(jù)難度,因為 MySQL 和 PostgreSQL 都支持基于的邏輯日志身隐,我們只需要進行解析并入庫就可以了廷区。在數(shù)據(jù)導(dǎo)入方面,我們借助 OSS 分布式數(shù)據(jù)存儲的能力贾铝,實現(xiàn)了多計算節(jié)點的并行導(dǎo)入隙轻,每個計算單元(1Core/8GBMem 為一個計算單元)可以達到接近 20MB/s的數(shù)據(jù)導(dǎo)入,如果用戶構(gòu)建出一個 64 節(jié)點的 HybridDB 集群將可以達到 1GB/s的數(shù)據(jù)導(dǎo)入能力垢揩。在我們的實際用戶使用中玖绿,已經(jīng)有用戶通過這個方法在 4 分鐘內(nèi)導(dǎo)入了 4 億條數(shù)據(jù)。
另一方面 HybridDB 還支持將數(shù)據(jù)存放到 OSS 云存儲叁巨,實現(xiàn)廉價的數(shù)據(jù)存儲方案斑匪,為用戶節(jié)省更多成本。
數(shù)據(jù)存儲
1锋勺、本地存儲
HybridDB 的本地存儲分為行儲存和列存儲兩種方式蚀瘸。行存儲和列存儲各有長處。行存適合于近線數(shù)據(jù)的分析庶橱,特別是要求查詢結(jié)果返回表中某幾跳符合條件記錄的所有字段的情況贮勃。列存適合用于數(shù)據(jù)的統(tǒng)計分析。
那么兩者的適用情況是怎樣的呢苏章?舉例說明:在行存的情況下寂嘉,如果一個用于存放用戶的表中有 20 個字段奏瞬,但我們只要統(tǒng)計用戶年齡的平均值,這時數(shù)據(jù)庫要對用戶表進行全表掃描泉孩,遍歷所有行的所有數(shù)據(jù)硼端;但如果使用列存,數(shù)據(jù)庫只要定位到這一列寓搬,然后只掃描這一列的數(shù)據(jù)就可以得到所有的結(jié)果显蝌,性能上相比列存理論上就會直接快 20 倍,加上 HybridDB 將數(shù)據(jù)分布式存儲到多個計算節(jié)點订咸,性能將再次提高幾倍,達到 100 倍性能提升是十分常見酬诀。
HybridDB 是混合兩者搭配使用的脏嚷。用戶可以配搭進行使用,定義不同的表使用不同的存儲方式瞒御,讓用戶適應(yīng)不同的業(yè)務(wù)場景父叙,并進行數(shù)據(jù)生態(tài)周期的管理。如 6 個月內(nèi)的數(shù)據(jù)可能要經(jīng)常獲取全行數(shù)據(jù)肴裙,因此使用行存儲趾唱,6 個月后的數(shù)據(jù)通過列存儲進行保存提高分析匯總操作的查詢性能。
2蜻懦、外部存儲
高性能的數(shù)據(jù)分析是在本地存儲完成的甜癞。OSS 作為外部存儲,HybridDB 可以將 OSS 中的 CSV 格式化文本作為外部表進行數(shù)據(jù)查詢宛乃,同時還可以對這些外部表進行寫入操作悠咱。寫入到 OSS 的數(shù)據(jù)可以提供給 RDS for PostgreSQL 或 EMR 等云數(shù)據(jù)庫服務(wù)進行讀取及處理,因此也同時實現(xiàn)了數(shù)據(jù)的無縫打通征炼。
同時我們也將支持“存儲計算分析”的模型析既,在這樣模型上我們平時甚至可以只通過 OSS 進行數(shù)據(jù)的存儲,當(dāng)需要進行計算時再開啟足夠的計算節(jié)點進行數(shù)據(jù)分析處理谆奥,計算處理結(jié)束后關(guān)閉計算節(jié)點資源以節(jié)省使用成本眼坏。
HybridDB 的幕后故事
1拨拓、扎根社區(qū)
當(dāng)前我們基于開源版本的 Greenplum Database谋竖,同時我們也會進行一些功能的添加及性能穩(wěn)定性上的優(yōu)化工作,我們也會逐步進行對開源社區(qū)的更多的貢獻驶忌,如當(dāng)前我們就已經(jīng)開源了支持 Greenplum擂仍、PostgreSQL 及 HybridDB 的數(shù)據(jù)同步工具 dbsync (https://github.com/aliyun/rds_dbsync)囤屹,有興趣的讀者可以下載測試及使用。
在 Greenplum Database 的開源社區(qū)我們會有很多的合作逢渔,甚至我們已經(jīng)在向開源社區(qū)提交新功能及 patch肋坚。同時 Greenplum 也是 PostgreSQL 開源數(shù)據(jù)庫生態(tài)重要的力量,我個人同時作為 PostgreSQL 中國社區(qū)及用戶會的主席也當(dāng)然會進行更多線上線下活動的支持。
2智厌、商業(yè)合作
Greenplum 背后的公司是 Pivotal诲泌。所以同時也與 Pivotal 有更多的商業(yè)合作。阿里也會與 Pivotal 方面進行持續(xù)的接觸铣鹏,相信我們會有機會碰出絢麗的火花敷扫。
寫在最后
長期以來國外開源社區(qū)都認為中國用戶僅僅使用開源軟件,但是貢獻甚少诚卸。不過葵第,隨著阿里的發(fā)展,我們已經(jīng)開始反哺開源社區(qū)并共同建立生態(tài)合溺。幾個月前卒密,AliSQL 的開源說明了阿里對開源業(yè)界的支持。HybridDB 同樣如此棠赛,雖然我們的版本才剛剛發(fā)布哮奇,但在版本研發(fā)的過程中已經(jīng)開始向社區(qū)共享代碼。
阿里云當(dāng)前支持云數(shù)據(jù)庫 HybridDB睛约,暫時沒有計劃去支持私有環(huán)境的 Greenplum 數(shù)據(jù)庫鼎俘。不過我們團隊的大神德哥,會繼續(xù)貢獻他在使用 Greenplum 的經(jīng)驗心得辩涝。希望對大家有所幫助贸伐。
用戶在線下可以使用 Greenplum 的開源數(shù)據(jù)庫版本或商業(yè)版本,據(jù)我所了解也已經(jīng)有很多數(shù)據(jù)庫服務(wù)商開始提供 Greenplum 的技術(shù)支持膀值,使用這個數(shù)據(jù)庫的用戶不需要再擔(dān)心未來上云遷移的問題棍丐。同時,我們也會在未來結(jié)合 PostgreSQL 及 HybridDB 提供一系列的使用教學(xué)視頻沧踏,讓用戶更快速地掌握產(chǎn)品的正確使用場景及方法歌逢。