導語
2021年12月2日,雲產品釋出會「數智引擎」分論壇上,火山引擎資料平臺產品解決方案架構師海書山發表了演講——《雲原生極速OLAP引擎:ByteHouse賦能下一代技術架構》。
以下為演講正文:
大家好,我是火山引擎資料產品解決方案的海書山。在正式講今天的題目前,首先想請大家和我一起了解下:是什麼樣的組織形態可以孵化出ByteHouse這樣的產品?
中臺化是位元組跳動技術底座的理念。它的好處在於,可以呼叫技術複用到APP中去。比如頭條、抖音、西瓜等APP,它們的開發技術都是複用同一套技術底座。中臺化一方面帶來了更深的技術沉澱,這也是火山引擎的基礎,另一方面讓我們在技術棧的選型時保持更加審慎的態度,因為它可能會被複用到十幾個、幾十個APP中去。
那麼在中臺化技術底座的理念下,我們選擇OLAP引擎時,會考量哪些因素?
- 好用
這是我們對OLAP引擎樸素又簡單的要求。因為我們最終想要實現的是儲存足夠多的資料,同時還能快速地查詢到資料。所以第一個要求是高可用和強效能。在海量資料下能夠達到秒級響應,並支援99.95%的SLA。
- 複用
在好用的基礎上,我們希望儘量用一套技術棧解決所有問題或大部分問題,這本質上是基礎設施的複用,也可以說是中臺化理念的延伸。在一套技術棧上搭建各種面向場景化的應用,比如CDP、使用者行為分析、A/B測試等。
- 易用
中臺化的隱含問題是每個業務部門,對於我們來說都是使用者或客戶。讓使用者能自助地把產品使用起來非常重要。我們希望儘可能降低使用者的學習和使用門檻,提高產品易用性,這同樣也可以降低中臺的管理與運維成本。
所以,好用、複用、易用是對OLAP的基本考量。解決了這些因素後,位元組內部在超大規模資料分析服務領域,發展出了什麼樣的規模和體量呢?
下面這張圖列舉了一些資料,可以看到:
在位元組內部,資料分析服務使用了超過了15000個節點,單叢集最大規模可以達到2400個節點左右,這些機器管理了600PB的資料量,每天有數萬名位元組跳動同學會在這些機器上進行查詢,日均查詢量約7500萬次。
在大規模的資料服務上,我們解決了非常多的技術挑戰,從而使得它能夠很好地支撐公司的應用場景。但技術的發展是無止境的,需要不斷地滿足業務的新訴求。所以在這一代技術架構中,我們仍然發現了一些問題:
- 傳統數倉和OLAP架構,解決的更多是離線分析場景的需求,也就是常說的“T+1”,即今天看到昨天的資料。隨著業務發展越來越快,像在抖音紅包、直播電商等活動中,業務對於資料分析的時效性有了更高要求。它的比例可能不大,但要求會非常極致。
- 當前架構中儲存和計算資源是耦合在一起的,但不同業務、時間段和使用者對二者的要求往往是不一樣的,這一方面可能導致叢集響應不夠及時,但更多情況是按照某個峰值要求來規劃叢集,導致資源利用率偏低。所以我們給自己提出的下一個要求是:在業務依舊高速增長的情況下,叢集規模不再隨之線性增長。
- 基於內部的大量應用,我們解決了複雜的技術難題和挑戰。但更多外部使用者需要的是啟動門檻更低的架構——低成本、低門檻地把這套技術棧跑起來。
針對上述要求,火山引擎帶來了解決方案——ByteHouse:雲原生極速OLAP引擎。
ByteHouse:雲原生極速OLAP引擎
首先,ByteHouse的定位仍然是在資料來源和資料分析應用之間搭建一個橋樑。不管前面的資料來源是關係型資料庫、實時資料流、檔案或者日誌,後面的資料分析應用是BI分析報表,還是機器學習演算法等等,ByteHouse都能做好資料加速這件事,也就是極速OLAP引擎。
那麼,雲原生體現在哪裡?在這次釋出的ByteHouse裡,我們對架構做了一些升級,分為了:服務層、計算層和儲存層。
- 服務層,相當於ByteHouse的大腦,可以做配置、使用者、安全、元資料等方面的服務管理;
- 計算層,相當於我們的算力模組,可以隨時在計算組層面進行橫向和動態的資源伸縮,實現算力擴充套件;
- 儲存層,利用列式儲存資料,基於HDFS或物件儲存帶來近乎無限的資料擴充套件。
最後,整套架構可以用容器化方式部署在本地和雲端,這就是我們全新帶來的下一代OLAP引擎。
ByteHouse的核心優勢
- 真實時分析
結合內部大量業務實踐,ByteHouse在單叢集層面可以做到百萬甚至千萬級別的資料吞吐量,並且能實現極低的資料時延,達到極致的time-to-insight體驗。
- 儲存和計算分離
架構層面實現了儲存與計算分離,計算層可以彈性伸縮,並且實現分散式儲存。這樣在做叢集規劃時可以將儲存層和計算層解耦,實現分別無縫擴充套件儲存資源和計算資源。
- 多級資源隔離
提供多級資源隔離,可以讓不同業務部門、不同業務使用者針對性地申請資源,提升資源利用率。
- 實現OLAPaaS
藉助雲上全託管服務,ByteHouse支援服務隨時啟停,而且即付即用,Pay as you go。
這些技術升級,就是本次釋出的ByteHouse的核心優勢,同時也完美解決了下一代技術架構裡的問題。
ByteHouse基於雲原生的特性
接下來,再深入介紹一下ByteHouse的雲原生特性。
- 存算分離
在新一代ByteHouse裡,我們針對架構層面做了升級,現在它可以支援Shared-Everything儲存以及Shared-Nothing計算層,一定程度上避免了傳統 MPP 架構中資料擴容時重新分配的問題。
現在,我們做計算和儲存伸縮非常便捷。比如在擴張計算資源時,可以隨時新申請計算組資源,且可以申請不同規格的計算組;再比如在儲存資源上,可以提升儲存容量,實現靈活、效能和穩定三個層面的平衡。另外,這套架構給管理員帶來了很大的便捷,他們不用再去關心資料副本、資料一致性甚至資料收費的問題,因為這些問題可以交給資料儲存層來解決。
這就是存算隔離所帶來的優勢。
- 資源隔離
多租戶是大型銀行、集團型公司提及率很高的需求。現在ByteHouse支援了申請資源時,可以針對不同的租戶、不同的資料分配不同的計算資源。一方面保證了資料查詢的效能,另一方面可以讓管理員更精細化地管控資源,從而知道每個部門使用了多少資料和計算資源。
同時ByteHouse天然可以做到讀寫分離,也就是資料在寫入的時候不去影響查詢的效能。過去可能要透過讀寫叢集的方式實現,但在雲原生架構下,可以輕易地做到讀寫資源隔離。
最後是我們經常會碰到使用者提出來的需求,比如慢查詢或大查詢吃掉了大量的計算資源,或者有一些查詢一定不能被其他查詢影響。ByteHouse可以精細化地針對每一條查詢申請資源隔離,保證不同的查詢可以跑在一個足夠小,或者足夠大的資源上面。
以上幾點,是透過多級資源隔離的方式,確保每一條查詢都可以被精準地執行、申請到合適的資源,並被精準地管控到。在降本增效的趨勢下,ByteHouse能幫助企業有效提升資源利用率。
- 部署
ByteHouse支援兩種部署方式:雲端部署和私有化部署。
在雲端部署模式下,ByteHouse支援“雲中立”的形態,也就是說除了火山引擎資源之外,還可以支援AWS,未來包括阿里雲等雲廠商資源。藉助雲上彈性伸縮能力,也可以支援隨用隨付的方式,同時還可以更好地與其他雲端服務整合。
私有化部署是許多傳統行業的部署方式。企業可以把產品部署在自己機房裡,如果使用者有自己的專有云也可以複用虛機、K8s、儲存等資源,保證更強的安全性。
ByteHouse典型使用場景
ByteHouse在位元組跳動內部支撐了超過80%的分析應用,包括廣告、演算法、模型、A/B測試場景等,其實都是由ByteHouse提供服務。
隨著A/B測試的實驗和使用者量越來越多,對資料分析也提出了更高要求。比如統計連續多天資料或者多級聚合計算等,一個能快速響應業務,支援實時多維度靈活分析需求的查詢引擎也成為剛需,所以每一個A/B測試內部,其實都內建了一個ByteHouse。
除了A/B測試,演算法模型推薦也是內部應用的典型場景。演算法工程師利用大量樣本資料,不斷訓練模型,調試出一個最優版本。在這一過程中,需要更加直觀驗證模型的效果比對。基於ByteHouse,演算法工程師可以靈活地根據特定篩選條件、針對已經訓練完成的資料進行樣本圈定比對,不用擔心歷史訓練資料缺少特定邏輯。
除了內部應用場景外,ByteHuose在外部客戶實踐中也積累了不少典型場景。
- 精準營銷
對廣告主和分析師來說,能快速評估廣告價值,篩選風險使用者,是ByteHouse帶給精準營銷的價值。
精準營銷場景裡,企業希望市場資訊精準觸達使用者。一方面可以做到精細化管理,另一方面可以降低廣告費用。一般先根據標籤圈選出人群包,接下來對這個人群包進行進一步的分析和探查。所以它們的技術難點是什麼?
首先在多標籤和高基維的交叉場景下,計算邏輯很複雜,在人群再圈選和放大的過程中,涉及到大量交併補的分析操作。
我們的解決方案是透過 CDP 等一些應用建立標籤,把人相關的資料存到Hive裡,這時會有兩種分析方式,如果是對於單一使用者畫像的分析,可以直接存在高可用引擎裡,做一個基礎的寬表資料分析;還有一種可能性是需要對人群包做圈選,然後做進一步的群體分析。這個時候我們將資料存在點陣圖引擎裡,透過 bitmap 的方式,做進一步的複雜計算。
經過實踐,最大可以達到10億級別的流量推送,2億級別的使用者包規模。這種量級下,ByteHuose可以實現95%的查詢在0.5秒內響應,並支援超過200QPS併發量。
ByteHouse 的優勢是在大規模資料量和複雜分析下,達到了其他技術棧難以支援的程度。
- IoT分析
解決IoT裝置實時入庫瓶頸和時延問題,從而實現萬億級別資料的IoT分析,是ByteHouse在IoT分析場景中的價值。
今年我們與外部一個大型製造行業客戶做了IoT分析場景的方案。這個客戶有很多IoT裝置,需要做的是大量物聯網資料的實時上傳和分析,在低時延下實現高資料吞吐量。除此之外,還要保證資料實時寫入過程中的穩定性,及一些基礎的資料清洗操作。
我們的方案是自研實時引擎,可以保證資料實現極高的寫入效能,同時寫入時不重不漏,還能做到實時的資料去重。最終實現把不同的物聯網資料彙集起來,經過空間座標分析,生成地圖看板,按區域看到資料分佈。
這一客戶有40萬臺物聯網裝置,日增量資料達到 5 億條。經過最佳化,單機寫入效能達到10萬筆每秒。在預測報警場景下,客戶的資料可以在 5 秒內推送,保證工程師第一時間看到並採取行動。
攜內部最佳實踐提供企業級支援
除了前面講的技術和場景,要想ByteHouse真正用起來,還需要提供各種各樣的企業級的支援。
在位元組內部,ByteHouse積攢了大量的最佳實踐:能實現三個9一個5的SLA ;透過ByteHouse的架構升級,將部分叢集資源利用率從23%提到47%;經過內部的支援最佳化,問題響應週期從一天提升到 10分鐘級別。
這些數字保障了我們可以將內部最佳實踐對外賦能,在穩定性、效能、服務層面給客戶完美支援。包括運維規範、技術巡檢、平臺體驗最佳化等,保證ByteHouse在客戶環境裡完美落地。
最後,分享一下ByteHouse正在努力的方向:
- SQL相容性建設——可以跑通100%的TPC-DS,相容更多應用和BI工具,降低使用者遷移成本;
- 自研最佳化器升級——儘管ByteHouse在明細和實時場景下的效能表現良好,但我們仍在努力向一個通用引擎邁進,在複雜查詢場景上持續升級;
- 智慧物化檢視——進一步擴充套件到預計算場景,進一步提升OLAP分析的邊界,乃至提升併發能力的上限;
- 儲存服務化——比如使用ByteHouse直接訪問存在HDFS或資料湖裡的資料。
這些對我們提出了更高的挑戰和要求,但都已經在我們的roadmap上了,請大家期待我們的下一次升級。
點選「ByteDance Cloud | ByteHouse」,瞭解更多產品資訊。