Uber手把手分享平臺效率優化8項心法,從檔案瘦身到聯邦叢集都優化

程式創新是Uber的命脈,他們還用開源工具自行打造大數據平臺,來維持源源不絕的創新。但6年前,Uber業務快速擴增,不僅多了外送服務Uber Eats,還新增卡車貨運服務Uber Freight和單車共享服務Jump Bikes,資料量隨之暴增,大數據平臺更成為Uber最燒錢的工具。

於是,Uber在2020年初制定了大數據平臺省錢策略,射出三支箭,其一瞄準平臺效率,團隊更毫不藏私地把成功經驗分享出來,手把手告訴身處同樣困難的企業,如何在業務擴增的同時,還能降低大數據平臺開銷。

Uber大數據平臺採用一系列開源工具,像是Spark、Hadoop、Presto,團隊也根據這些平臺,嘗試多種效率優化方法,比如優化檔案格式、用HDFS抹除碼降低重複性資料。(圖片來源/Uber)

作法1:大數據檔案格式優化

他們的平臺效率省錢術,一點都不華麗,直接從最基本的檔案格式著手。常見的熱門開源大數據平臺,像是Spark、Hadoop、Kafka等,都是Uber長年使用的工具,而在他們的Hadoop分散式檔案系統(HDFS)中,大多是Hive表格,並以Parquet或ORC格式儲存。

這兩種格式,都是基於區塊的列式儲存格式。也就是說,一個檔案會由好幾個區塊組成,每個區塊則由大量的列組成,比如1萬列,這些資訊,就儲存在不同欄位中。

這些檔案容量很大,Uber仔細研究自家的HDFS檔案,想出幾招檔案瘦身方法,首先是採用壓縮演算法。起初,Uber一直將GZIP 6級預設為Parquet格式檔案的壓縮演算法,後來,臉書發表一項新工具,讓ZSTD壓縮演算法也能用於Parquet檔案。

於是,Uber用ZSTD來測試壓縮自家檔案,發現ZSTD 9級和19級的壓縮率和解壓縮速度比GZIP要好,就決定用ZSTD 9級來重新壓縮存放1個月的檔案,並用19級來壓縮存放3個月的檔案。這些重新壓縮工作都可背景執行,Uber不必花力氣手動調整。

除了壓縮演算法,Uber還嘗試其他檔案瘦身方法,像是重新排序列,他們手動調整內部龐大的Hive表格,將使用者ID和時間戳重新排序,檔案容量就減少了一半。還有一個方法是刪除列,Uber啟用一個功能,來定期刪除從Kafka匯入的Hiva表格欄位。

作法2:用HDFS抹除碼降低重複性資料

再來,Uber提高平臺效率的第2招,是借助HDFS抹除碼來降低HDFS檔案的重複性因子。簡單來說,HDFS抹除碼是一種資料容錯技術,可取代檔案中的重複性資料,大幅釋放容量。Uber指出,由於HDFS的重複性因子預設值為3x,因此透過HDFS抹除碼,HDD的空間需求幾乎可減少一半。

他們也評估了2種常見的抹除碼工具,首先是官方的Hadoop 3.0抹除碼,它的好處是,不論大檔案還是小檔案都能用,缺點則是IO效率並不高。另一個是用戶端抹除碼,這是臉書在HDFS-RAID專案中實作出的工具,IO效率非常高,但不適用於小檔案,不符合Uber需求。

最後,Uber決定採用Hadoop 3.0抹除碼,來降低各種大小檔案的重複性因子。他們深信,這個方法可大幅降低HDFS成本。

作法3:改善YARN排程政策

另一方面,Uber也鎖定專門執行大數據工作負載的開源工具YARN,來改善平臺效率。就像大多數企業一樣,一開始,Uber用YARN內建的容量排程器來分配工作,透過其中的MIN和MAX設定來配置階層式佇列結構。

Uber也用YARN建立2級的階層式佇列結構,第1級以組織為主,使用者可根據需求,進一步發展出第2級佇列。雖然YARN容量排程器給了Uber極好的起頭,但他們很快就遇到YARN叢集容量管理兩難。Uber一方面想盡可能善用叢集資源,一方面又要讓使用者清楚知道,他們能期望使用多少YARN叢集資源。

於是,Uber寫了套Dynamic MAX演算法,來準確告訴使用者可用的YARN資源。這套演算法的原理是,佇列在過去23小時如果都沒使用,接下來可處理的佇列最大值,就會為MIN值的24倍。這個設計,足以處理Uber絕大多數的尖峰工作負載。

如果佇列在過去23小時內,平均用量都在MIN左右,那麼在下一個小時內,佇列也只限於MIN值。這個規則,讓佇列在24小時內都不會超出MIN值,因此避免了資源濫用的情況。

在實際狀況中,Uber把MIN值設定為佇列平均用量的125%,當作是每日用量變量的25%。這也代表,他們的YARN叢集平均使用率在8成左右,是極好又符合成本效益的使用率。

作法4:叢集聯邦

隨著自家YARN和HDFS叢集越來越龐大,Uber開始遇到效能瓶頸,比如,HDFS主要節點NameNode和YARN資源管理器速度越來越慢,不僅影響擴展能力,也大大影響大數據平臺的成本。

為解決問題,他們研究了兩種方法,首先是繼續改善單節點效能,像是用更多CPU vCore和記憶體來強化工作表現,另一種則是聯邦叢集方法,也就是「叢集的叢集」(Cluster of clusters)方法,透過建立一個虛擬叢集,負責所有的工作負載路徑分配邏輯,再以這個叢集來優化其他YARN和HDFS叢集效能。

後來,Uber選用聯邦叢集方法來解決問題。因為,對他們來說,目前市面上的HDFS和YARN叢集都比他們所需的還要小,如果他們靠改善單節點效能,叢集會越來越龐大,很有可能會出現小叢集沒見過的程式錯誤。再來,要HDFS和YARN擴展到Uber期望的叢集大小,Uber就得更改原始碼,來在效能和精細的功能間取得平衡。

於是,為了在不開分支(Forking)的情況下善用Hadoop開源生態資源,Uber決定自己設置聯邦叢集。他們採用Hadoop的YARN Federation和HDFS Federation,目前也已建立了數十個HDFS叢集和一些YARN叢集,Uber主任工程師Zheng Shao甚至表示,這種基於路由的HDFS Federation,已經成為Uber大數據擴展工作的關鍵,更改善大數據平臺成本效益。

想知道最厲害的網頁設計公司嚨底家!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

作法5:通用的負載平衡

接下來,Uber還想出一招,利用通用負載平衡概念,來提高HDFS和YARN表現。對HDFS來說,這可改善次節點DataNode的磁碟空間使用率,因為,每個DataNode會有不同的磁碟空間使用率,而每個DataNode中,HDD也會有不同的磁碟空間使用率,這些都得經過平衡調整,才能達到整體的高使用率。

對YARN來說,每臺機器的CPU和記憶體的使用率與資源分配,也都得經過平衡調整,才能提高整體使用率。Uber就從這些需求中,設計出通用負載平衡方法來解決問題,特別的是,這種方法不只限於大數據的HDFS和YARN,更能用於自家微服務負載平衡、主要儲存負載平衡等領域。

更細緻的作法:改善查詢引擎、Hudi專案

此外,Uber還有其他2種細緻的作法,來改善大數據平臺效率和成本效益。

首先是改善查詢引擎,Uber進行大數據分析時,採用多種查詢引擎,像是Hive-on-Spark、Spark、Presto等,這些引擎加上不同的儲存格式如Parquet、ORC,造成了複雜的運算,也增加平臺成本。

於是,Uber想出幾種方法來優化查詢引擎,包括盡量使用Parquet檔案格式、修剪巢狀列、優化常見的查詢模式。以使用Parquet格式來說,它雖然與ORC有相同的設計原則,但經過長時間觀察,Uber發現大數據平臺Spark對Parquet的支援更好,Presto則對ORC的支援較好。於是,大量使用Spark的Uber,決定將主力集中在Parquet上,如此一來,就能集中精力維護單一程式碼庫,也容易培養人才知識。

另一個改善大數據平臺效率的方法,則是Uber在2016年發起的Hudi專案。對Uber來說,他們常面臨資料增量處理問題,比如,使用者直到要再次叫車時,才會對上一次乘車的司機評價,又或是,某次乘車的信用卡退費,可能要一個月才能處理完。這就造成Uber大數據平臺使用者,得每天檢查好幾天前的舊資料,來更新手邊的查詢資訊,確保查詢結果是最新的。

而更有效率的處理方法是,每天更新這些增量資料的變化即可,這就是Hudi專案能做到的事。Uber坦言,至今,Hudi專案仍大幅降低運算量需求。

運算資源就像電力,靠後臺分擔前臺工作來節流

Uber的大數據平臺效率省錢術還沒結束。接下來,他們瞄準叢集運算資源,發起一項HydroElectricity專案,要利用例行性的後臺維運工作,來「擠出」額外運算資源。

因為,在Uber眼中,叢集運算資源就像電力,供應量是固定的,但往往難以應付突發的爆量。在能源領域,就有種蓄水發電方法,能將離峰時的多餘電能,以水的位能儲存,當用電尖峰來臨時,再用來發電。

Uber引用這個概念,讓優先性不高、可在背景執行的例行後臺工作,像是檔案壓縮、截圖維護、LSM壓縮等,也執行一些前臺工作,來降低CPU耗能。比如,原本大數據收穫系統需寫入ZSTD壓縮的Parquet格式檔案,完全由前臺執行就非常耗CPU資源,因此Uber計畫改為,讓收穫系統也寫入稍微壓縮的Parquet檔案,再由後臺維運工作,重新壓縮這些檔案。這麼做,就能大大降低前臺的CPU耗能。

不只要用後臺工作來節流,Uber接下來還要建立一個統一、通用的儲存系統,來處理線上系統和分析系統的查詢。他們也要制定計價機制,來將資源分配給真正需要的使用者,提高大數據平臺運用效率。

 Uber大數據平臺效益優化術 

1. 大數據檔案瘦身

2. HDFS抹除碼降低重複性資料

3. 改善YARN排程,提高叢集使用率

4. 用叢集聯邦提高擴充效能

5. 通用負載平衡,強化整體使用率

6. 查詢引擎優化,提高查詢效能

7. 每日更新增量變化,降低運算量需求

8. 靠後臺分擔前臺工作,減少前臺CPU需求

https://www.ithome.com.tw/news/149352

最熱情、專業有口碑的網頁設計公司讓您的網站改頭換面。

推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

想知道最厲害的網頁設計公司嚨底家!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌