牟宇航:百度OLAP數據庫——Palo

專家視野 | 牟宇航:百度OLAP數據庫——Palo

https://mp.weixin.qq.com/s/q8_kdDPdCPwIjI2BCETPZw

3月28日,在工業和信息化部的指導下,為期兩天的“2017大數據產業峰會”在北京國際會議中心召開。本次會議由中國信息通信研究院和中國通信標準化協會共同主辦,數據中心聯盟大數據發展促進委員會承辦。

百度研發經理牟宇航在29日上午大數據產品和應用創新論壇上發表了題為《百度OLAP數據庫——Palo》的演講。



以下是內容實錄:

大家好,我叫牟宇航,來自百度大數據部?,F在負責百度大數據部在線系統的研發管理,在線系統簡單來說就是大家用的數據庫。今天來這里給大家分享一個在云上售賣了一年,而且準備開源的數據庫。



在講數據庫之前先給大家講一下我們面向的場景,第一個是百度統計,是為其他第三方站長提供流量分析的工具。它的形式是提供一個腳本,其他的站長嵌入到自己的網站代碼里面,最后百度會通過這個腳本獲取第三方網站的用戶行為,然后出第三方網站的分析報表。這個產品量非常大,首先有450W網站站長去使用它,它的查詢頻率非常大,基本上峰值OPS會到2000以上。數據量也非常大,我們初步統計了一下每天結構化的數據會到1-2T。


這種場景是在線報表場景,可以看到左側欄是主題,右側欄包括了指標列和過濾條件,比如說可以根據時間過濾,可以根據其他方式過濾,每個主題是不一樣的。


第二個場景是我們經常在業務上會出現的一個場景,就是數據集市。數據集市一般面向業務為主題,這里舉例是百度糯米的數據集市,它是集運營、業務分析、訂單管理、會員管理、客戶關系、管理等一體的綜合數據平臺。這種數據集市場景多樣化,一方面剛剛提到的在線報表,比如說渠道人員想看一下幾個渠道的運維情況,這有一個報表。再有產品經理想多維分析下產品傳單的情況。比如說新上線一個活動,運維人員想看一下新上線活動的情況,它的查詢非常靈活。

在這種數據集市里面除了場景比較復雜,另外使用它的角色很多,所以這個里面涉及到多租戶的管理。


這里拿了另外一個多維分析系統,初步看它的樣子跟在線報表比較像,如果仔細看會不一樣。它的左側欄是個維度,包括像操作系統、時間瀏覽器維度,這些維度可以下展很多級別。右邊這些欄首先是查詢指標,另外是過濾維度的條件。



這種場景是典型的在線多維分析場景,以上三種場景就是今天要講的數據庫Palo的主要場景,在線報表、多維分析、機器查詢。這個名字很好記,當時想這個名字就是面向多維分析的數據庫,用一句話形容Palo就是A:MPP-based Interactive Data Analysis SQL DB。面向數據量是百TB到PB級別。

講了這么多的OLAP,OLAP概念分為兩個維度,第一個是中間的A,A相當于Transactional Processing。第二個維度是Online相當于Offline,下面列了一張圖但凡所有的大數據應用和面向C端B端的架構都是這樣的架構,首先前端是客戶端,后面是服務端。



App Client加上App Server再加上Transaction,在大數據時代產生了很多數據,我們希望把這些數據提取出來,挖掘其中的價值,這就是AP角色的事情,它可以做很多的事情,可以做轉換,可以做數據挖掘,這都是廣義的概念。在大數據時代,AP變得越來越重要,變得越來越龐大。TP核心價值在于業務邏輯,AP核心邏輯在數據本身,我們要從數據本身挖掘更多的價值。OLAP是面向AP的,這個里面也提了在線概念。拿購物舉例,離線像倉庫的概念,在線像小超市的概念。離線面向數據開發人員和數據建設者,在線面向數據消費者,比如說產品經理、管理者、營銷人員、運維人員,可能他不太懂數據怎么玩,但是用了這個系統就會玩了。我們看到在大數據時代越來越多人使用數據,在線這一部分的重要性變得越來越重要。



這個里面詳細列舉了一下OLAP和OLTP的區別,OLAP的場景比如說分析一個全量的歷史數據,這個歷史數據可能涉及一年可能涉及很多,它的數據量會非常大,數據量大也就導致很多不一樣,比如說導入方式、側重點,我們評估OLAP性能的方式不太一樣。最后是數據組織,一般來講OLTP是完全遵循三范式的,而OLAP就不一樣,它是五范式的。



剛才提到AP在大數據時代變得越來越重要,在2000年之后整個業界在AP領域涌現出來了知名的數據廠商和數據產業。


在開源界大概在2010年左右發力,這里介紹了Palo的區別和定位。首先,最顯著的區別是Palo的成本比較低,那些看到的開源產品基本是在百萬美元的量級,一套產品就這么貴。而Palo用的是普通的X86服務器,百度統計的業務也不過用了60臺,大家可以算一下這個成本很大的。



第二個是Palo的高可用和異用性,還有高性能,這是我們和其他競品最核心的區別。







在講Palo之前,我們先看Palo是怎么用的?長什么樣子?首先我們在MySQL 的選擇上語句不同,包括會增加一些在MySQL 比較有用的語句。這些增加的語句怎么用呢?我們通過直接輸入XP就能看到語句包括參數怎么使用。上面是Palo,因為兼容MySQL協議。



言歸正傳,看一下Palo的架構。首先說一下Palo的設計理念,Palo的設計理念強調要優雅、簡潔,這個里面大家看我們的架構很簡單,每個顏色代表一個進程,藍色是客戶端,不是Palo內部的東西。在這里面我們部署時前端和后端是分離的,在部署時一臺機器上只需要部屬一個進程就可以了,部署非常簡單。前端首先負責源數據的管理,前端還可以負責接收產品請求,包括建表、建數據庫,包括數據導入、管理,包括復本管理,數據請求。包括查詢界定都是在前端完成的。比方說,前端是Palo的大腦,后端是Palo的軀干,可以干活。一般來講前端節點稍微少一點,后端節點比較多。

為什么前端節點有3-10個呢?為什么不是10個呢?相當于元數據的架構,這個里面列了元數據的管理架構。



第一個是中心架構,最典型的代表最近開源很火的,它的優點:第一,實現很簡單,這是中心架構。跟它對應的是對稱架構,它的優點是可靠性比較好,缺點是當元數據更新頻率高的話,如果Palo采用這種數據元數據更新比較高時,網絡容易成為瓶頸。



Palo的元數據管理分三類,一個是Leader,一個是Follower,一個是Observer,Leader和Follower會參與主節點的競選。參與選舉,讓大家去選,這會帶來一個問題,在元數據更新時要求大量的元數據同時更新,當你元數據很多時,性能會出現瓶頸,所以我們增加了Observer,它只負責接受元數據更新,這種方式可以最大程度節省元數據更新所帶來的網絡瓶頸。這種結合了高可靠,高QPS和可動態的擴縮容,支持頻繁的元數據屏障。

業界有些數據庫元數據直接存在類似于MySQL系統里面,為了對元數據的查詢和保證。但是對于Palo來講這種方案不太適合,在Palo第一版本時也是這種方案。但是在百度整個的數據量比較大前提下,整個的元數據訪問比較復雜,而且我們對比了一些復雜工具之后,會有變態的情況出現。比如說一個查詢語句、一個點擊查詢,會翻譯成成千上萬的語句。如果一下翻譯出來成千上萬語句時,你把它都執行完,可能訪問性會存在瓶頸。



我們的內存如果BUG掉怎么辦?Checkpoint保證說如果內存掛掉的話,還可以同步進其他的內存,這樣保證了元數據的可靠性。數據可靠性和元數據可靠性大同小異,在這里Palo也支持做副本,也可以自動修復。之前發現了一個用戶在導入數據時只測了一部分,他想導入更快一點,占用存儲機更小一點,等他把數據都導進去時,他擴展成了三個副本,這都是利用Palo修復的功能,把單副本擴展成三個副本。



這個是MPP,它是把查詢計劃與查詢執行物理分離。我要說一下Palo的MPP架構和OLTP MPP是不一樣的,我們為了保證整個的查詢執行不影響查詢計劃,所以把物理分離了。



很多同學會問我Palo底層用什么實現?Palo是一個高度集成系統,是查詢與存儲一體的數據庫系統。在這里里面,它比較易于實現一致性保證。在一致性提到兩個維度,一個是單調一致性,還有Consistent View,它是高性能的,最后是易部署,易調試。像Palo去部署的話一天就部署好了,像一些大的開源系統依賴的環境和條件比較多,一旦花了幾個月做好,容易出問題,出了問題去定位比較復雜。


整體的架構是這樣的,下面我講一下后端節點存儲結構是什么樣的?



首先是列存,這個概念大家都很熟悉,我不會講太多。只講一點OLTP都是行存的,OLAP可能是對全量數據的某幾列進行分析,所以把它一列存在一起更好一點。列存的優點很方便做壓縮很方便做索引。



這里著重講Palo很特色的地方,它可以支持很多的數據模型。數據模型建表時會考慮很多的列式,比如說多少列。在Palo建表時首先考慮一個問題,我的哪些列是指標列,哪些是維度列。維度列是Time、Id、Country,而指標列是Clids、Cost。我們的數據庫首先存在序列,然后進行排序,Palo會做一個事情保證全局唯一。



首先已經有這樣一份數據存在Palo里面,一共有三行,T是這樣的。又新來一份數據,新來的數據第一行它的T列跟之前T列不一樣,它是20140101,1、US。存到T列之后首先把T列不一樣的單獨存一條,T列相同的把Value列進行合并。



如果T列重復類很大,使用Palo之后其實存的數據量非常小。

查詢時會進行很多的具體操作,這一部分操作在存儲過程中已經做完了,也就是說這個數據模型可以極大提升做指標維度列的表查詢。除了這個具體數據模型之外,我們也當然支持非具體模型。



第二個是物化視圖,它有兩種優化方式和優化思路。第一個是物化視圖把這些表按照某些T進行存儲。一個原始表可以對應很多的物化視圖,查詢過程中具體應用哪個物化視圖,這個是Palo進行選擇的。物化視圖本身概念是時間換空間的技術,然后講一下查詢的優化。



第一個是向量化執行,一個是LLVM。向量執行是行式執行引擎問題。但是LLVM有一個問題,它在編譯時有一個固定的編譯開銷,這個大概在百毫秒左右。



下面講一下存儲的小技巧,所有的分布式系統都會分片存儲,這樣有可能會導致某些分片會很大,無論是用哪個方式進行分片,可能每個分片都很大。另外,做分片分列優化時又會很麻煩,Palo用兩級分片解決的。通常出現用戶第一級分區是用一個月分區,第二級分區是用SATA進行分區。在兩級分區基礎上,我們為了高效利用硬件性能,我們知道SSD數據非常好。



再講一下數據導入,剛才提到的OLTP和OLAP的區別,OLTP有一個很關鍵的指標是每秒數據量。OLAP是講數據吞吐量。鑒于此Palo有兩種導入方式,一個是批量導入,一種是小批量導入。批量導入是利用Hadoop的系統,先把批量梳理好再進行導入。第二種是不批量導入,利用查詢執行框架進行導入,它的好處做的頻率好一點,多導入事務提交。具體的運行方式也和MySQL不一樣,這兩個命令都是異步的命令,因為批量導入不可能馬上完成,異步命令有一個生效問題,因為Palo在業務過程中有很多沒有對一致性要求,我們在一致性上做了很多改進。比如說每一批導入都附上版本號,MySQL是不用的。再比方說我們導入的一個批次數據,怎么往主版本里面去合?



這里面就給出了導入一個批次怎么往主版本合的?這里面列出了0-60,61、62都是導入的版本號。先假設主版本里面存的是0-60數據,如果往主版本合的時候,首先想一下把主版本的數據讀出來,然后再寫進去。通過版本合并可以極大減少數據量,但是版本合并的原則就是不能影響線路查詢。



最后是資源隔離,剛才提到Palo在百度內部也應用了200多個業務,我們不可能建200多個集群。我們的大多數業務都是在一個共享集群里面,資源隔離有兩層概念。第一層是用戶之間建立的資源隔離,不同用戶不能相互影響。第二,同用戶之內設資源優先級隔離,可能我的分析類查詢要優于Udhome查詢。



這是Palo的發布,Palo2013年10月份發布了第一個版本。2014年發布百度云OLAP引擎。2015年進行了拍賣,實際上已經面向上市了。



這是在云上的部署方式,類AWS redshift,

on-demand provisioning。這是在云上的一個界面,瀏覽器去進行集群管理,增添的界面,很簡單,一共沒有幾步。



這里再說一下未來的Palo Road map,我們希望在這基礎上開源,希望有更多對數據庫感興趣的同學能夠跟我們一起開發,一起活躍這個產品。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容