EMR StarRocks實戰——猿輔導的OLAP演進之路

目錄

一、數據需求產生

二、OLAP選型

2.1 需求

2.2 調研

?2.3 對比

三、StarRocks的優勢

四、業務場景和技術方案

4.1 整體的數據架構

4.2 BI自助/報表/多維分析

4.3 實時事件分析

4.5 直播教室引擎性能監控

4.4 B端業務后臺—斑馬

4.5 學校端數據產品—飛象星球

4.6 電商訂單分析

五、基礎建設

5.1 運維

5.2 EMR-Serverless- StarRocks

原文大佬寫的這篇EMR StarRocks數倉建設案例有借鑒意義,這里摘抄下來用作學習和知識沉淀。

一、數據需求產生

? ? 猿輔導成立多年,早期是基于關系型的 MySQL 數據庫來做數據的需求。隨著業務的發展,多個服務在一個 DB 去做數據的匯總,以及一些微服務架構的產生,使得數據逐漸走向分裂,很難在 MySQL 里完成統一的數倉。

? 因此在2014年,公司開始了統一數倉的假設,采用的是比較成熟的Hadoop體系。雖然是用hive,mapreduce做離線的批量ETL,但是為了保證用戶交互足夠快,延遲足夠短,還是會把最終的應用層的數據放在Mysql中來處理,包括現在很多離線需求也仍然是這樣的一個鏈路。

? ?隨著公司業務的快速增長,以及一些新的業務形態的出現,以Mysql作為BI存儲底座的瓶頸愈發明顯。2020年,新冠疫情爆發,公司業務出現了爆發式的增長,原本的離線t+1的鏈路已無法滿足業務上的數據需求。但是,我們做了很多實時的需求,有一條離線鏈路,一條實時鏈路,在應用層的存儲上完成實時和離線的統一。為了應對不同的業務業務場景,又引入了很多新的OLAP引擎來做不同的需求。我們希望能夠有一個引擎,可以完成在AP場景下的統一,此時發現了StarRocks。目前,除了自建的一些StarRocks集群,我們也在跟阿里云團隊合作,使用云上EMR的集群,是一個混合云多集群的模式。

二、OLAP選型

2.1 需求

? ?接下來介紹在 OLAP選型時,我們考慮的一些問題點。

? ?猿輔導 OLAP 支撐的場景,包括商業分析,廣告轉化,業務監控,還有一些用戶觸達等。很多BL應用還是在用Mysql來做存儲底座。所以需要去兼容原來的Mysql協議,也需要兼顧到查詢的性能,我們的需求主要有八點:

  • 亞秒級的數據查詢延遲;
  • 支持 大寬表以及多表join;
  • 具備高并發的能力;
  • 支持數據的流式和批式攝入;
  • 支持標準化的sql;
  • 具備高性能的精準去重能力;
  • 低的運維成本;
  • 能夠靈活的橫向擴縮容;
  • 用戶對于業務是無感知的;

2.2 調研

? ?開源OLAP引擎分為MOLAP和ROLAP,前者屬于預計算方式,后者是關系行的模型,ROLAP又分為基于MPP的和DAG的基于Hadoo底座的這部分。

?2.3 對比

? 我們對比了不同引擎的優缺點。可以看到 Spark、 Presto 、Trino 引擎,更適合去做批處理,做一些查詢的加速,但是在并發場景下,支撐的能力是不夠的。Druid、Kylin引擎,因為是構建預計算的物化的能力,數據重放的成本會非常高,同時對數據開發人員的要求也相對較高,而 Doris 和 Clickhouse 的 MPP 架構的引擎,相比較下更能夠滿足當時的BI需求。考慮到運維成本以及多樣化的模型,當時選擇了Doris。隨后又發現 Doris 跟 StarRocks 相比,性能上還是會有一些差別。

? 下圖是我們當時做的一個Benchmark(性能測試),主要是拿猿輔導內部的一些BI場景的SQL來做的一個對比,可以發現可以發現當時 StarRocks 借助于它本身優秀的向量化引擎的能力,能夠在大部分場景下比 Doris有 2 到 3 倍的性能提升(這里的性能主要指查詢的延遲)

三、StarRocks的優勢

? StarRocks最大的優勢是極致性能。主要得益于列存,高效的IO,高效的編碼的存儲,豐富的索引加速(包括前綴索引、Bitmap倒排索引),物化視圖的加速查詢,全面的向量化,以及它的MPP的架構,通過并行執行中間結果不落盤的方式,能夠讓結果更快的跑出來,并且能夠在集群規模擴大的時候帶來性能的線性提升。

? ?第二個優勢是模型豐富,在猿輔導主要用到的是更新模型,目前在做的是把更多場景逐漸往主鍵模型上過渡,因為我們的很多場景是依賴于實時CDC的數據,它對 CDC 流有著更好的實時更新性能。另外,它原生的分區分桶設計架構,能夠利用到數據的冷熱的存儲,能夠利用分區裁剪的性能去更好的提升查詢性能。

? 另外StarRocks 也在快速迭代,經常能給我們帶來很多新的特性。比如 CBO,對比原本在之前的查詢優化和CPU的優化器,在一些場景下,可以看到3到4倍的性能提升。第二個是Catalog,因為數據底層存在很多不同的數據引擎,所以希望在 Catalog 這一層能夠去融合更多的數據,包括 Hive、MySQL、ES,以及 StarRocks 的其他集群,都可以在 Catalog 這層去做統一。第三是資源管理,可以用到 StarRocks 的資源管理的能力,做不同場景的大小查詢的一個隔離,可以做到查詢的熔斷,可以在CPU,內存包括并發上做一些限制。另外一個是異步多表物化視圖。

四、業務場景和技術方案

? 下面介紹一些在公司內落地的場景。 首先來介紹一下整體的數據架構。

4.1 整體的數據架構

4.2 BI自助/報表/多維分析

? ? 我們比較少用StarRocks來做數據計算,更多的還是將其作為數據應用的存儲底座。現在 StarRocks 最重要的一個場景,就是 BI 報表、多維分析的場景,如下圖:

? 它還是一個Lambda架構,會有一些原始數據,比如業務 DB,有一些業務的日志埋點數據,實時這部分鏈路是kafka到flink,最終到starrocks,是分鐘級的數據;離線部分是 Hive 架構,主要是以天級和小時級的數據放到 StarRocks,上層去對接報表的應用。

? ?上圖是一個多維分析報表,它是基于后臺寫的一個SQL,在前臺的報表進行多維的分析。原本是用Mysql做的BI報表的底座,但是在數據規模超過百萬,遇到一些高技術維度,多維度的數據的時候,查詢性能就會比較慢,所以用StarRocks替代Mysql來做多維分析,帶來的提升非常明顯。

?上圖也是一個BI的場景,是完全基于StarRocks做的一個指標平臺。它是一個 NOSQL 的方案,會由數倉的同學首先預先定義一些維度和指標。用戶在使用的時候,會先定義一個數據源,選擇一些維度,選擇一些指標,基于數據源再去生成一些單圖,再把它做成看板,當用戶自助的去生成一些圖表的時,后臺會轉換成一個SQL來執行。

?

? ?上圖是一個簡單的例子,上圖左上角是定義一些維度表,左下角是指標的定義,包括其查詢條件和計算方式,右邊可以看到在實際執行的SQL。這里的數據還是以離線數倉為主,因為需要對模型有一個明確的定義。

4.3 實時事件分析

? 上圖是一個用戶的行為分析。主要是基于客戶端的用戶行為埋點數據。最早的時候,是通過 Druid 來做的,Druid在時序數據方面的性能還是非常不錯的,但是對于一些復雜的查詢,它本身提供的算子是比較有限的。另外希望能對維度數據做一些組合,Druid也是無法實現。所以我們用StarRocks把用戶行為分析做了重構。利用到StarRocks查詢加速的能力,去給用戶提供實踐的聚合數據,能提供UserTrack 的一個能力。

? 它的鏈路也比較簡單,會把埋點數據往kafka里面放一份,在flink這一層去增加一些維度信息,包括產品線,埋點的元數據。在StarRocks里會先嘗試做一層明細表,按照天做分區,按照用戶id去做分桶,在?UserTrack 場景下,以用戶維度去看這部分數據的時候,主要利用到分區分桶的能力,利用它的前綴索引和Bloomfilter過濾器,去實現快速地點查,以及高并發查詢的需求。在事件分析的場景,主要是用到了小時的物化視圖,去加速查詢,利用bitmap做精準的用戶去重計算,用HLL來做設備維度的模糊去重

? ?上圖展示的是研發的一個監控看板,場景實時采集引擎指標,進行數據分析,也有一些主題化定制的報表。數倉的粒度分的比較粗放,會放一層明細,有一些維度的數據,再做一些聚合。

4.5 直播教室引擎性能監控

? ? 值得一提的是,這套架構相對較復雜,因為有一部分數據是通過湖式的數據來做第一層數據接入,會先往 Iceberge 里存一次,中間通過 Spark 、 Flink 的引擎去計算,再往 StarRocks 里放,并且會在 Hive 和 StarRocks 去做數據的雙寫。

?另外,互聯網教育直播課堂有一個特點是它的波峰波谷特別明顯,因為孩子們大部分是在同一個時間段上課,比如在周五下午上課,在上課的這兩三個小時里面的數據量是非常爆炸的,平時的時候就沒有什么流量。它帶來的一個問題是,StarRocks的表都是按照天,小時去做分區的,波峰時段的單個分區的數據就會非常多,分區里的template會非常大,那么在這個時候做compaction,對集群的性能消耗就會非常嚴重。所以這里做了一個自適應的處理,會去動態調整partition的bucket,保證整個的查詢性能保持在一個比較穩定的水平上。

4.4 B端業務后臺—斑馬

? 上面是一個B端的業務后臺,主要是給老師的一些數據看板,叫斑馬數據看板。它主要是做督學看板、學情溝通,幫助老師去做學生上課情況的一些追蹤,去做一些反饋。

? ?它的特點主要是以小時的數據為主,也會有一些實時的用戶行為的數據。這也是一個比較經典的鏈路,數倉的數據會放到hive里,以小時級放到StarRocks,直接才業務的后臺去查詢。它幾乎涵蓋了目前斑馬所有的業務場景,包括課程的體驗、電商的增長,以及一些輔導的服務等等。

?上面是猿輔導的一個 B 端的場景,是輔導老師工作臺。它的特點是重度依賴于數倉的加工數據大部分的數據源是由數倉同學先加工好的比較標準的數據,并且指標和維度都是預先明確定義

? 上述鏈路中,由一部分用的是離線數倉的數據,也有一部分用的實時數倉的數據。這些數據還是通過天級,小時級,分鐘級的粒度同步到StarRocks里。這里用到了Catalog 做外表,因為對于分區裁剪的性能沒有很高的要求,數據量不大的情況下,通過Catalog 外表能夠更敏捷、更快速地在業務上使用倉庫的數據。

4.5 學校端數據產品—飛象星球

? 飛象星球是公司一個比較新的產品線,它是給學校以及政府教育相關部門提供的教育產品,飛象 BI 產品主要是把抽象化的數據通過可視化的報表提供給客戶,它是完全基于StarRocks的底座來實現的。圖中可以看到,除了一些可視化的能力以外,它還支持用戶按照表和字段去定義后臺的數據源模型通過 NOSQL 的方式,自己去配置數據看板

? 由上圖可知,它的數據鏈路比較簡單,主要是業務DB,先同步到 Hive 里,再同步到 StarRocks ,最近也在推動 CDC 同步的事情,希望未來能夠完全實現從業務 DB 直接到StarRocks 的同步的方式,減少中間的鏈路。

4.6 電商訂單分析

? 最后一個案例是比較新的一個鏈路,它是一個電商場景,做用戶支持成功率的監控,幫助電商的同學去做問題的排查。特點是實時性要求比較高,原本的業務DB的數據量非常大,業務的DB會做一些分庫分表的架構,也有一些多表Join的需求,所以業務的數據是沒有辦法直接來做分析的,所以我們把它通過CDC的方式同步到 StarRocks 里,統一用 StarRocks 去處理。目前來看跑的效果非常好,由業務的研發同學直接來主導,不需要數據開發同學來介入。

五、基礎建設

再簡單介紹一下我們做的基礎建設。

5.1 運維

? ? 我們自研了一些平臺化的工具,例如統一的元數據、權限管理平臺。還有一套adHoc平臺(即席查詢),幫助用戶做數據分析和數據提取。DDL工單系統,主要是幫用戶去做數據的規范和權限的約束。另外,還有基于原生的系統去做監控大盤和告警,基于審計日志去做慢查詢的監控,幫助用戶持續優化查詢性能。

? ?目前正在推進的工作包括,首先從UNIQ 模型去往 PRI 模型演進;第二是希望把Mysql到StarRocks同步的鏈路做的更輕,更快,通過一個平臺化的工具把這條鏈路打通,能夠實現離線的快照,也能實現實時的同步;另外,因為整個StarRocks的集群非常多,大概有七八個集群,新的業務將會開更多的集群,所以需要有一些跨集群的數據同步的能力。

? ?再來討論一下自建和上云。如果僅從機器層面來考慮,那么自建集群的成本是更低的。但如果結合人力和機器成本來看的話,阿里云EMR則有一些優勢。公司本身在大數據上的團隊規模不是很大,大家要維護的組件和服務非常多,EMR能夠提供一個比較好的協助和補充。首先是彈性的能力,當一些業務需要快速地去開一個集群,需要快速地去擴縮容的時候,可以利用到彈性的能力去實現,并且可以隨時地去釋放;另外,StarRocks 社區迭代非常快,我們在快速跟進和學習的過程中,難免會遇到一些問題,可能沒有辦法很快地得到社區的反饋,這時與阿里云的團隊合作,就能夠得到一個比較好的專家支持服務。

? 我們現在是以自建和EMR集群混合云的模式,去支撐業務需求。對于一些業務上跑得比較快,尤其是一些 B 端的,隔離性要求非常高的場景,更傾向于在阿里云上直接開 EMR 的集群。

5.2 EMR-Serverless- StarRocks

? ?最近也在跟阿里云EMR合作去測試Serverless- StarRocks的產品。在新的產品形態下面能夠提供給用戶的,首先是診斷分析的能力,能夠幫助用戶可視化的去檢索到慢SQL,從而可以對SQL進行針對性優化。第二是它能夠提供一個比較好的用戶管理和權限管理的能力,提升運維同學的工作效率。另外,也希望借助未來 StarRocks 3.0 以上存儲分離的架構,節省更多的成本。

參考文章:

猿輔導基于 EMR StarRocks 的 OLAP 演進之路-阿里云開發者社區

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

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

相關文章

Ajax(黑馬學習筆記)

Ajax介紹 Ajax概述 我們前端頁面中的數據,如下圖所示的表格中的學生信息,應該來自于后臺,那么我們的后臺和前端是互不影響的2個程序,那么我們前端應該如何從后臺獲取數據呢?因為是2個程序,所以必須涉及到…

【ACM】—藍橋杯大一暑期集訓Day3

🚀歡迎來到本文🚀 🍉個人簡介:陳童學哦,目前學習C/C、算法、Python、Java等方向,一個正在慢慢前行的普通人。 🏀系列專欄:陳童學的日記 💡其他專欄:CSTL&…

langchain學習筆記(九)

RunnableBranch: Dynamically route logic based on input | 🦜?🔗 Langchain 基于輸入的動態路由邏輯,通過上一步的輸出選擇下一步操作,允許創建非確定性鏈。路由保證路由間的結構和連貫。 有以下兩種方法執行路由 1、通過Ru…

Unity引擎中光源都有哪幾種,都有什么作用

本文由 簡悅 SimpRead 轉碼, 原文地址 mp.weixin.qq.com Unity 引擎為了實現游戲場景的明暗和光影效果,提供了四種類型的光源,分別是方向光(Directional Lights)、點光源(Point Lights)、聚光燈…

Vue開發實例(一)Vue環境搭建第一個項目

Vue環境搭建&第一個項目 一、環境搭建二、安裝Vue腳手架三、創建Vue項目 一、環境搭建 下載方式從官網下載:http://nodejs.cn/download/ 建議下載v12.16.0版本以上的,因為版本低無法創建Vue的腳手架 檢驗是否安裝成功 配置環境變量 新增NODE_HOME&…

win11系統中nginx簡單的代理配置

一.背景 為了公司安排的師帶徒任務。 操作系統版本:win11家庭版 nginx版本:1.24.0 二.配置代理 之前文章已經說明了nginx簡單的安裝,要看閱讀這個文章哈。web服務器nginx下載及在win11的安裝-CSDN博客 1.配置需求識別 前端服務nginx(80…

【探索AI】十七 深度學習之第3周:卷積神經網絡(CNN)(一)-CNN的基本原理與結構

第3周:卷積神經網絡(CNN) CNN的基本原理與結構 常見的卷積層、池化層與全連接層 LeNet、AlexNet等經典CNN模型 實踐:使用CNN進行圖像分類任務 CNN的基本原理與結構 引言與背景介紹 卷積神經網絡(CNN)是…

雙周回顧#007 - 前端與后端

前端的問題不是難,而是它面對最終用戶。只要用戶的喜好和口味發生變化,前端就必須跟上。 這導致前端不得不快速變化,因為用戶的口味正在越來越快地改變。 后端不需要面對最終用戶,需要解決的都是一些經典的計算機科學問題&#…

什么是Vue指令?請列舉一些常見的Vue指令以及它們的用法

Vue.js 是一款流行的前端框架,它的指令(Directives)是 Vue.js 提供的一種特殊屬性,用于在模板中對 DOM 元素進行直接操作。指令通常是以 v- 開頭的特殊屬性,用于響應式地將數據綁定到 DOM 元素上。 在 Vue 中&#xf…

C語言初階—函數(函數的聲明和定義,函數遞歸)

函數聲明: 1.告訴編譯器有一個函數叫什么,參數是什么,返回類型是什么,但是具體是不是存在,函數聲明決定不了。 2.函數的聲明一般出現在函數使用之前,要滿足先聲明后使用。 3.函數的聲明一般要放在頭文件中。…

Launch學習

參考博客: (1) 史上最全的launch的解析來啦,木有之一歐 1 ROS工作空間簡介 2 元功能包 src目錄下可以包含多個功能包,假設需要使用機器人導航模塊,但是這個模塊中包含著地圖、定位、路徑規劃等不同的功能包,它們的邏…

agent內存馬

搭建一個簡單的Servlet項目 ServletDemo package com.naihe;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;…

【探索AI】十一 深度學習之機器學習基礎

鑒于之前文章中提到的深度學習計劃,后續的文章會根據之前的接著繼續學習,python基礎略過,想學的同學請自學: python入門 python進階 機器學習基礎 機器學習是人工智能領域的一個子集,它專注于從數據中自動學習并提升…

vue2+若依框架plus交互 路由介紹

本周及寒假 參加了校企合作的工程過程管理,和學長學姐一起寫項目,之前學了vue也沒有應用,然后對框架很多組件的用法不太了解,前期耽誤了一些時間。 框架模塊 首先是框架模塊的介紹 api存了一些系統管理及發送請求的方法 例如p…

【python】`assert`斷言語句

assert是一個斷言語句,用于在代碼中檢查某個條件是否為真。 如果條件為假,將觸發AssertionError 異常,從而指示存在錯誤。

Linux獲取進程(系統啟動時間和運行時間)運行時間

Linux獲取進程運行時間 思路:使用 ps - o命令 ps -p 986 -o etime可以獲取進程986的執行時間,不論系統時間有沒有發生改變,它都可以返回正確的結果: 總結:etime 是真正的程序運行時間,而不是系統運行時間與進程啟動…

在您的下一個項目中選擇 Golang 和 Node.js 之間的抉擇

作為一名軟件開發者,我總是在尋找構建應用程序的最快、最高效的工具。在速度和處理復雜任務方面,我認為 Golang 和 Node.js 是頂尖技術。兩者在性能方面都享有極高的聲譽。但哪一個更快——Golang 還是 Node?我決定深入一些硬核基準測試&…

java-ssm-jsp-寵物護理預定系統

java-ssm-jsp-寵物護理預定系統 獲取源碼——》公主號:計算機專業畢設大全

ASPICE實操中的那點事兒-底層軟件的單元測試該如何做

先來說下ASPICE項目實操中遇到的問題: 底層軟件在做單元測試時,從ASPICE角度看,該如何做?要不要在目標控制器或開發板中去測?尤其是復雜驅動,如果不在將程序下載到硬件中,該如何測試&#xff1…

物聯網與智慧城市:融合創新,塑造未來城市生活新圖景

一、引言 在科技飛速發展的今天,物聯網與智慧城市的融合創新已成為推動城市發展的重要力量。物聯網技術通過連接萬物,實現信息的智能感知、傳輸和處理,為智慧城市的構建提供了無限可能。智慧城市則運用物聯網等先進技術,實現城市…