數倉成本下降近一半,StarRocks 存算分離助力云覽科技業務出海

成都云覽科技有限公司傾力打造了鳳凰瀏覽器,專注于為海外用戶提供服務,公司致力于構建一個全球性的數字內容連接入口,為用戶帶來更為優質、高效、個性化的瀏覽體驗。

作為數據驅動的高科技公司,從數據中挖掘價值一直是公司核心任務,公司以前選用了眾多組件來提升內部大數據分析效率,如 Trino 作為即席查詢的工具、用 ClickHouse 和 StarRocks 來加速報表業務查詢,但經過長期實踐,最終決定將所有內部數據分析平臺統一至 StarRocks。

而且,社區在 3.0.0 版本中發布了存算分離能力,與公司內部大數據平臺部門正在推動的降本增效理念非常契合,部門也在第一時間測試驗證,確定評測各方面滿足業務需求后,已經開始逐步在線上業務中替換現有系統,未來也會作為公司大數據平臺部門統一數據架構的重點發展方向。

平臺現狀

作為公司內部大數據平臺部門,主要負責公司海量數據處理、數據質量保證及指標體系維護的工作,服務公司四大業務場景:用戶畫像、報表、實驗系統以及業務服務。公司大數據平臺經過上云及幾次云平臺遷移,當前結合某云 EMR、對象存儲建設存算分離的架構,主要架構如下圖所示:

alt

如圖所示,原始數據存儲在 Kafka 中,通過 Flink 消費,寫入到 OSS 中,然后通過 Hive 和 Spark 進行數據進一步加工,最后再將數據導入不同的 OLAP 組件中供業務查詢。后期統一了計算引擎,使用 Spark on K8s 的架構,使用 Spark SQL 和自定義了 UDF/UDAF 對數據進行統一處理。

平臺痛點

我們在發展過程中不斷采用新技術來滿足不同業務需求,日積月累,各種數據處理與分析組件越來越多,面臨著巨大的壓力與挑戰,主要表現在以下幾點:

使用組件多,維護成本高

公司的業務近幾年飛速增長,伴隨著業務擴張帶來了數據量指數式增長。我們的分析平臺規模也相應增長,使用的規模變大,平臺維護成本也成倍增長。例如,僅 OLAP 我們就使用了 Trino、ClickHouse、StarRocks。其中,Trino 給業務同學提供即席查詢用途,ClickHouse 負責應用與用戶洞察、實驗系統和報表,StarRocks 對接業務報表。維護成本高體現在:

學習成本高,不同的系統實現不同,語法兼容性不同,對開發人員提出了很高要求。

定位問題復雜,三種組件對應三套監控系統,定位排查問題需要查看不同的監控系統,搜索各自的日志,排查鏈路很長。

鏈路冗長,數據時效性難以保證

數據由客戶端上報,通過統一的轉發服務,進入到不同的 Kafka 實例中,再經由 Flink 消費,sink 到數倉的 ODS 層,最后通過 tez 和 Spark SQL 對數據進行處理,構建數倉分層。而這其中 ODS 層的數據統一處理,整體時間就需要3小時左右,偶爾中間任務數據產出有誤,需重跑整條鏈路,數據延時會被進一步拉長。

服務穩定性不足

當并發量大、大查詢多時,Trino 很容易出現內存溢出,穩定性不足,目前統計線上查詢失敗的情況約有10%左右由內存溢出導致。ClickHouse 則無法處理高并發場景,很容易因 cpu 打滿導致服務重啟。

StarRocks 存算分離調研

StarRocks 社區在 3.0.0 版本推出了存算分離版本,與我們內部追求降本增效的目標不謀而合,我們也第一時間進行了調研測評。

在調研時我們特別關注這幾個方面:

查詢效率,相比存算一體,用戶不能感覺到較為明顯的查詢變慢

顯著的成本降低,這也是我們嘗試存算分離新架構的初衷

能夠無縫替換我們正在使用的各個組件,為未來統一分析打好基礎

運維簡單,減輕開發運維同學的日常工作復雜度

最后是需要社區比較活躍,問題能得到及時的處理

以下是我們針對各個維度的一些調研結果。

性能對比

我們針對單表和多表 Join 兩種真實線上場景進行了具體測試,采用兩個相同規模的集群,對同一數據量的表,進行相同的查詢,多次查詢,取平均值的方式進行對比。ClickHouse 集群規模:單節點 96C * 384G , StarRocks 集群 6 * 16C * 64G。單表查詢的數據量大小為 200G,數據行數為1.3億行,對表進行 count 計數查詢。Join 查詢為表進行自 Join,然后進行 count 計數查詢。

alt

alt StarRocks VS ClickHouse

測試表明,在 ClickHouse 最拿手的單表查詢場景中, StarRocks 存算分離性能可以保持一致,在多表 Join 場景中,StarRocks 能快3倍左右。

存儲成本

在對比了性能后,我們對比了存算一體和存算分離的成本情況。在存算一體中數據量 1T 的表通過 export 到 OSS,再通過 Broker Load 到存算分離集群中,由標準磁盤存儲轉換為對象存儲,后期還可以在對象存儲內將數據進行冷熱歸檔,進一步節省成本。從云服務文檔中了解到,標準磁盤存儲 1T 存儲一天7 (某云法蘭克福 OSS 計費),存儲費用降為原來的1/15。成本的詳細計算可以看后文。

易用性

我們了解到 StarRocks 也推出了 Operator 支持 K8s 集群部署。利用 K8s 本身的容災恢復機制以及強大的 StarRocks Operator 顯著降低了集群部署運維復雜性。另外,StarRocks 還提供了較為豐富的監控和診斷工具,便于我們在第一時間觀察系統運行情況。

StarRocks 存算分離實踐

查詢優化

物化視圖

在一些實時查詢的場景,我們發現,通過物化視圖進行預聚合的方式,能達到查詢事半功倍的效果。例如我們的實時分析場景,通過 Flink 直接將明細數據寫入到 StarRocks,最初直接對原始明細數據復雜查詢,耗時約30秒左右,后來看社區力推物化視圖,我們也為該表創建異步物化視圖,對明細數據進行預聚合,結果顯示,查詢延遲降低為3秒左右,帶來了10倍性能提升。

物化視圖的場景我們剛剛體驗,就取得了比較驚艷的效果,未來我們將在更多場景中推廣該能力,進一步提升業務同學體驗。

數據分桶

在初見 StarRocks 存算分離時,我們簡單認為數據存儲在對象存儲中,建表時我們沒有關注分桶數設置,分桶數設置過多,結果在使用時發現隨著系統 Tablet 數量越來越多,發現 FE 的內存被打滿。后來在社區同學幫助下定位發現是由于 Tablet 過多導致 FE 節點一直在 GC。最后通過增加 FE 內存,再按數據量合理分配不同表的分桶數便徹底解決了該問題。

根據我們實際使用的經驗來看,一般為每個分桶差不多容納 1 ~ 3G 數據容量比較合理,過多的數據分桶會產生大量的小文件且降低了 I/O 效率,而分桶數不足則可能會影響查詢的并發效果。

聚合查詢模型

最初公司大部分報表都是參照 Kylin 模型,使用 Hive、Spark 將數據預聚合處理,再將處理結果數據導入到 StarRocks 中進行查詢,依靠 StarRocks 強大的查詢能力降低查詢延遲。

這種方式雖然提升了查詢速度,但會導致數倉中結果表的數據量膨脹,且部分報表增加維度后會存在數據兼容性問題。后來我們將部分預聚合查詢轉換為 StarRocks 的聚合模型,通過測試和提前預聚合的查詢效率幾乎相同,同時也解決了數據膨脹和歷史數據兼容問題。

Cache

上面我們提到調研測評時,我們也詳細評估了存算分離與其他系統的性能對比,上面的測試都是在開啟 Local Disk Data Cache 情況下達到,因此,我們對于線上所有的表在創建時都開啟了 Data Cache。

目前,我們線上計算節點規模為6個,每個計算節點配置了 2 塊 200G 容量大小的 SSD(最好不要用 HDD),通過該配置,我們基本上能將業務訪問的熱點數據都緩存在 Local Disk 上。同時,我們觀察到目前線上磁盤使用到達一定量時,存儲空間會自動下降,經過與社區溝通發現這是內部觸發了自動 LRU 緩存淘汰,這一點極大緩解了我們空間焦慮。

降本

使用 StarRocks 存算分離替換現有架構后,能在以下三個方面給成本帶來較大的降低:

將 OLAP 組件換成 StarRocks,首先是通過聚合模型替代在數倉中的結果表預聚合,不必對所有維度進行排列組合,計算各個組合的結果數據。省去這一步驟后,存儲對比之前減少了20%左右。 通過使用 StarRocks 存算分離,數據被存儲在對象存儲,通過將存算一體集群中 5T 左右的數據導入到對象存儲中,一個月能節省 1000$ 左右,未來隨著數據量的不斷增長,成本降低會愈發明顯。 使用 K8s 部署,方便部署的同時也省去了一筆不菲的云平臺服務費。

通過以上幾點綜合測算,相比原來使用 Spark 離線計算出結果,再將結果導入ClickHouse 的方式,使用 StarRocks 存算分離,我們將成本降低了 46%。

運維監控

StarRocks 的監控可以無縫對接 Prometheus 和 Grafana,使用 StarRocks 存算分離版本后,我們根據建議首先配置了較為完善的監控,StarRocks 存算分離在存算一體基礎上增加了不少對于系統 I/O 等指標,通過這些監控我們可以直觀查看當前的各種指標。

alt

FE、BE相關監控

alt

StarRocks I/O 相關監控

另外,我們使用過程中比較關注查詢性能問題,而也出現過由于版本太多導致了查詢時讀取文件數較多的問題,在社區提醒下,可以利用 SQL 監控當前集群 Compaction 情況:

alt

有了這種監控,我們也能看出當前是否出現 Compaction 慢等情況并考慮是否資源不足,需要擴容。

另外,從使用來看,相比于存算一體,存算分離版本有一個極大的簡化就是無需關注多副本數據一致性,存算分離數據位于 OSS 之上,本地緩存單副本,再也無需關注副本的數據均衡遷移、數據修復等問題,這是一個不小的解放。

最后,社區的各種文檔也比較豐富,尤其是存算分離最近給我們提供了最佳實踐、各種運維指導、參數優化等文檔,作為 StarRocks 新用戶,我們也能根據這些文檔快速上手取得最佳效果。當然,隨著使用的深入,我們還希望能更深入地了解 StarRocks 內部實現原理,希望社區能在這方面提供更多指導。

我們使用存算分離集群,上線初期遇到了一些 bug 導致集群運行不穩定,但是在社區幫助下,我們快速定位并修復后,現在集群已經穩定運行了3月有余。

數據遷移

由于目前社區尚未提供一鍵式遷移工具將數據從存算一體集群遷移至存算分離集群,咨詢過社區后,我們決定采用 export 到對象儲存再使用 Broker Load 到新集群的方式進行數據遷移。

另外,在進行 Broker Load 時,導入任務和線上查詢任務會對磁盤的 I/O 資源產生爭用,這可能會導致 K8s 將 BE 節點驅逐,進而導致短時間 StarRocks 查詢變慢,對此我們也建議降低 Broker Load 并發度,同樣通過分批導入的方式來減少 I/O 爭搶。

通過 Export + Broker Load 配合我們提到的優化手段,目前,我們已經將線上 80% 的業務數據遷移到存算分離集群中,并做到用戶在使用上體驗感更佳。后續會繼續將所有業務遷移至集群,最終完成統一大業。

另外,我們也從社區獲知,社區已經在推進一鍵式遷移工具的開發,如果不著急的小伙伴可以等等這個,我們后續也會嘗試使用這種新方式來提升數據遷移效率,另外,我們也很期待社區能推出從更多數據源的遷移方式,便于我們可以更快速地將數據架構統一至 StarRocks。

未來規劃

短期目標|數據湖 + StarRocks 縮短計算鏈路

數據入倉后,ODS 層的統一處理需要2-3個小時,這對數據及時產出有不小的影響,且計算成本較高。通過對數據湖的調研,我們計劃將 ODS 層的處理提前到 Flink 當中,省去這幾個小時的計算時間和計算資源,將 Flink 處理的數據直接落入數據湖中。利用 StarRocks 和數據湖的結合,實現對數據的實時查詢,解決離線數倉中的數據不方便實時查詢的問題。

長期規劃|使用 StarRocks 構建數據湖倉一體新架構

在文章的開頭我們也提過,公司現在使用了三種 OLAP 組件服務不同場景,每種組件都需要將 Spark 加工好的數據導入至對應系統,運維復雜,難以保證數據時效性同時數據的多方存儲也進一步提升了成本。我們也一直在思考,能否做到 Spark 不參與計算加工,只用 StarRocks 搭建數倉呢?經過我們調研推導,發現還是有可能實現這一步的。

具體來說,Flink 消費 Kafka 的數據后,直接入湖(Hudi、Iceberg 等),接下來我們利用 StarRocks 作為計算引擎直接查詢湖上數據,利用強大的湖查詢能力(這塊尚未深入測試,看社區其他用戶有不少 Good Case)可以直接進行查詢,對于某些查詢效率較低的查詢,我們直接為其構建物化視圖。

我們之前的測試表明,利用物化視圖能帶來 10 倍以上的加速效果。構建數倉的過程中,涉及到簡單的 ETL 也能夠通過邏輯視圖結合物化視圖的方式來完成。通過這樣一套 Lakehouse 新架構,我們理想中能夠達到以下幾點目的:

去掉當前多套 OLAP 服務,只保留 StarRocks 作為計算引擎,節約大量計算資源

數據無需多處存儲,降低數據延遲時效性。同時使用存算分離架構,數據單一存儲能節約大量存儲成本(尤其原來存算一體架構下數據依靠云盤多副本存儲,云盤價格過于昂貴) 利用 StarRocks 存算分離帶來的彈性和數據共享能力,我們可以做到

1). 為不同的業務實現資源硬隔離;

2). 業務峰谷期間可以輕松實現快速彈性,業務高峰期快速擴容以應對突發流量,業務低峰期可以快速縮容以削減成本

架構簡化也減輕了運維復雜度,使得我們有更多時間可以考慮提升業務增效,來達到公司降本增效的目的。

而且,通過調研學習,發現眾多業內技術領先企業和我們的想法不謀而合。

本文由 mdnice 多平臺發布

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165162.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Spring進階系列丨第四篇】學習Spring中的Bean管理(基于xml配置)

前言 在之前的學習中我們知道,容器是一個空間的概念,一般理解為可盛放物體的地方。在Spring容器通常理解為BeanFactory或者ApplicationContext。我們知道spring的IOC容器能夠幫我們創建對象,對象交給spring管理之后我們就不用手動去new對象。…

基于單片機的智能藍牙避障循跡小車

智能小車循跡與避障運動控制系統的設計 摘 要:本設計主要由STC89C52單片機來進行控制,通過輸入輸出兩個端口控制驅動模塊來調節電機的工作狀態。本設計預利用機器視覺,通過識別條帶狀路標實現自主導航且利用超聲波模塊實時檢測距離以實現避障功能&…

vue3 webSocket 封裝及使用

vue3 webSocket 封裝及使用 封裝 import { ref, onUnmounted } from vue; interface SocketOptions {heartbeatInterval?: number;reconnectInterval?: number;maxReconnectAttempts?: number; }class Socket {url: string;ws: WebSocket | null null;opts: SocketOption…

【Docker】從零開始:9.Docker命令:Push推送倉庫(Docker Hub,阿里云)

【Docker】從零開始:9.Docker命令:Push推送倉庫 知識點1.Docker Push有什么作用?2.Docker倉庫有哪幾種2.1 公有倉庫2.2 第三方倉庫2.3 私有倉庫2.4 搭建私有倉庫的方法有哪幾種 3.Docker公有倉庫與私有倉庫的優缺點對比 Docker Push 命令標準語法操作參數…

openEuler 22.03 LTS x86_64 cephadm 部署ceph18.2.0 未完成 筆記

環境 準備三臺虛擬機 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下載cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

酷開系統 | 酷開科技聚焦價值人群 助力營銷增長

2023年,是消費復蘇回暖的一年,市場中充溢著大量品牌重啟增長的機遇與實例。品牌商期望能夠把握住市場趨勢,通過營銷獲得確定性的業績提升,并在未來收獲長期穩定的增長。作為數字媒介的代表之一,OTT大屏營銷的屬性和價值…

Vue學習之路------指令

Vue指令 vue會根據不同的指令&#xff0c;針對標簽實現不同的功能 指令:帶有v-前綴的特殊標簽屬性 1&#xff1a;v-html&#xff1a;指令 <div v-html"msg"></div> 2&#xff1a;v-show 作用&#xff1a;控制元素顯示隱藏 語法&#xff1a;v-show&quo…

【SpringMVC】 對請求的不同響應

前言 本文學習如何運用不同的注解來返回不同的響應. 1.返回靜態頁面Controller 返回index.html頁面 Controller 和 RestController的區別 controller 只有加上這個注解,Spring才會幫我們管理這個代碼.后續我們訪問時才能訪問到. RestController 等同于 Controller ResponseBo…

UML建模圖文詳解教程01——Enterprise Architect的安裝與使用

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方網站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;圖示如下&#xff1a; Enterprise Architect是一個全功能的、基于…

B033-Servlet交互 JSP

目錄 ServletServlet的三大職責跳轉&#xff1a;請求轉發和重定向請求轉發重定向匯總請求轉發與重定向的區別用請求轉發和重定向完善登錄 JSP第一個JSP概述注釋設置創建JSP文件默認字符編碼集 JSP的java代碼書寫JSP的原理三大指令九大內置對象改造動態web工程進行示例內置對象名…

2.HTML入門

目錄 一.HTML介紹 二.HTML常用標簽 2.1 標題標簽 2.2 段落標簽 2.3 超鏈接標簽 2.4 圖片標簽 2.5 換行與空格 2.6 布局標簽 2.7 列表標簽 2.8 表單標簽 一.HTML介紹 定義&#xff1a;將內容顯示在網頁&#xff0c;用來描述網頁的一種語言&#xff0c;負責網頁的架構…

Adiponectin 脂聯素 ; T-cadherin +exosome

T-cadherin Adiponectin exosome T-cadherin Adiponectin exosome 代謝綜合征中 外泌體、脂肪組織 和 脂聯素 的器官間通訊-2019.pdf

【華為OD】C卷真題 100%通過:數組去重和排序 C/C++實現

華為OD 數組去重和排序 C源碼實現&#xff0c;100%通過 目錄 題目描述&#xff1a; 示例1 代碼實現&#xff1a; 題目描述&#xff1a; 給定一個亂序的數組&#xff0c;刪除所有的重復元素&#xff0c;使得每個元素只出現一次&#xff0c;并且按照出現的次數從高到低進行排…

C語言之字符串函數

C語言之字符串函數 文章目錄 C語言之字符串函數1. strlen的使用和模擬實現1.1 strlen的使用1.2 strlen的模擬實現 2. strcpy的使用和模擬實現2.1 strcpy的使用2.2 strncpy的使用2.3 strcpy的模擬實現 3. strcat的使用和模擬實現3.1 strcat的使用3.2 strncat3.3 strcat的模擬實現…

C語言--每日五道選擇題--Day23

第一題 1. 已知int i1, j2;&#xff0c;則表達式ij的值為&#xff08; &#xff09; A&#xff1a;1 B&#xff1a;2 C&#xff1a;3 D&#xff1a;4 答案及解析 C 本題考查的是前置和后置的優先級&#xff0c;后置的優先級是高于前置的&#xff0c;所以這個表達式就可以轉變為…

【Spark源碼分析】事件總線機制分析

Spark事件總線機制 采用Spark2.11源碼&#xff0c;以下類或方法被DeveloperApi注解額部分&#xff0c;可能出現不同版本不同實現的情況。 Spark中的事件總線用于接受事件并提交到對應的監聽器中。事件總線在Spark應用啟動時&#xff0c;會在SparkContext中激活spark運行的事件總…

什么是持續集成的自動化測試?

持續集成的自動化測試 如今互聯網軟件的開發、測試和發布&#xff0c;已經形成了一套非常標準的流程&#xff0c;最重要的組成部分就是持續集成&#xff08;Continuous integration&#xff0c;簡稱CI&#xff0c;目前主要的持續集成系統是Jenkins&#xff09;。 那么什么是持…

docker 安裝常用環境

一、 安裝linux&#xff08;完整&#xff09; 目前為止docker hub 還是被封著&#xff0c;用阿里云、騰訊云鏡像找一找版本直接查就行 默認使用latest最新版 #:latest 可以不寫 docker pull centos:latest # 拉取后查看 images docker images #給鏡像設置標簽 # docker tag […

FIB表與快速轉發表工作原理

在一張路由表中&#xff0c;當存在多個路由項可同時匹配目的IP地址時&#xff0c;路由查找進程會選擇掩碼最長的路由項用于轉發&#xff0c;即最長匹配原則。因為掩碼越長&#xff0c;所處的網段范圍就越小&#xff0c;網段的范圍越小&#xff0c;就越能快速的定位到PC機的具體…

【分布式】小白看Ring算法 - 03

相關系列 【分布式】NCCL部署與測試 - 01 【分布式】入門級NCCL多機并行實踐 - 02 【分布式】小白看Ring算法 - 03 【分布式】大模型分布式訓練入門與實踐 - 04 概述 NCCL&#xff08;NVIDIA Collective Communications Library&#xff09;是由NVIDIA開發的一種用于多GPU間…