58同城敏捷BI系統的設計與實踐

張哥說技術發表於2023-01-31

導讀:本次分享題目為 58 敏捷 BI 系統的設計與實踐,由來自 58 同城負責星火視覺化分析產品自研團隊的張自博老師帶來經驗分享,主要圍繞四個方面展開介紹:

  • 背景介紹:敏捷 BI 平臺介紹

  • 架構設計:敏捷 BI 技術架構介紹

  • 難點攻關:核心功能技術探究

  • 未來展望:敏捷BI平臺迭代方向

分享嘉賓|張自博 58同城 資深研發工程師

編輯整理|李挺 上海琢學

出品社群|DataFun


01
背景介紹
星火是 58 同城自研的新一代具備 SaaS 能力的資料分析視覺化產品,提供敏捷BI、視覺化報告、Dashboard 服務、資料大屏等能力,以資料洞察為導向,從資料接入到終端展現,提供資料生態全鏈路解決方案。

58同城敏捷BI系統的設計與實踐

1. 星火功能介紹

結合產品功能具體認識一下:星火主要包括分析工作臺、運營工作臺、開放服務、駕駛艙、星圖等五大功能模組。使用者在星火的核心工作區集中在分析工作臺,提供接入資料來源、新建資料集、開展資料處理、儀表板製作——如下圖右所展示的為“超市銷售資料包表”示例場景儀表板,其中包括時間過濾器、城市篩選過濾器、相關指標卡、暢銷商品詞雲圖、每日銷量和淨利潤趨勢圖、銷售額對比排行榜、商品銷量與銷售額的雷達圖等展示元件效果,以及儀表板操作(編輯、預覽、匯出、釋出)。

58同城敏捷BI系統的設計與實踐

下面,我們詳細講一下看板製作頁面,主要分為資料集展示區(待分析欄位)、工作臺(拖拽設計)、設定區(元件屬性配置)等三部分。

58同城敏捷BI系統的設計與實踐

2. 敏捷 BI 行業背景

對敏捷 BI 的行業現狀,成熟的 BI 產品包括國外的 Tableau、網易的有數 BI、位元組的 DataWind、阿里的 QuickBI、BDP、FineBI 等,星火在設計研發過程中,充分借鑑了主流產品的特點,包括資料安全、資料處理、視覺化等。

58同城敏捷BI系統的設計與實踐

3. 星火功能架構

下面主要介紹一下星火的架構設計特點。
針對功能架構:
(1)在資料接入層,支援非常豐富的資料來源接入,包括本地資料來源 CSV、Excel;關係資料來源 MySQL;MPP 資料來源 Kylin、ClickHouse、StarRocks 等;大資料資料來源 Tidb、Hive、58Hive 等。
(2)在資料處理層,提供資料集管理、欄位管理、資料集抽取等核心功能。
(3)在視覺化分析層,主要支撐使用者開展儀表板製作,包括圖表製作、過濾器設定、聯動跳轉、下鑽分析、自定義圖示等,還支援圖示預覽與匯出功能。
(4)在資料展示層,將製作好的儀表板釋出到駕駛艙,支援使用者訪問檢視;還同時支援資料大屏、定時郵件服務、以及開發者服務(OpenAPI、外嵌報表)等功能。

58同城敏捷BI系統的設計與實踐

星火同時也支援 SAAS 服務。SAAS 服務支援基於 RBAC 的細化到行列的許可權控制,支援豐富的資料來源接入以及基於 ClikcHouse 的極速快取查詢能力,提供基於域名的資源隔離以及物理級別的服務隔離,同時在 SAAS 版和內部版星火保持同步迭代,外部使用者也可以第一時間體驗全新功能。

58同城敏捷BI系統的設計與實踐

4. 星火推廣效果

覆蓋集團內部、外部使用者,星火目前的內部服務支撐 17 個 BG,合計 365 個專案,線上儀表板 8600+ 個,使用者規模超過 2500 人。

58同城敏捷BI系統的設計與實踐

02

架構設計

從訪問層入手,在流量產生後,靜態資源會透過 CDN,其他流量會透過代理層到閘道器層,星火的閘道器基於 Springcloud gateway 實現,會同星火後端雲服務,都以微服務的方式註冊到 Nacos 中,閘道器提供了服務路由、灰度上線、以及鏈路日誌等功能;訪問請求經過閘道器層進行負載均衡,同星火後端雲叢集進行互動,雲叢集主要由 BI 服務、星火生態兩部分服務節點組成,BI 服務包括工作臺和駕駛艙;星火生態服務包括開放服務、NPS 服務、星圖、星火活動等;藉助星河的大資料任務排程能力,實現郵件訂閱服務、定時抽取等,也支援使用者直接在星河進行 ETL 開發工作。
同時星火也將星火公共服務,抽象成 SCF 微服務,如截圖服務、資料查詢服務等,支援其他業務線使用。
在資料層,選取 MySQL 作為系統庫,Ridis 作為快取,ClickHouse 作為 MPP 加速層。 

58同城敏捷BI系統的設計與實踐

透過這套架構,實現了灰度釋出、鏈路日誌、異構查詢、MPP 加速、資料 ETL 及域流量隔離等功能。
03

難點攻關

星火平臺的核心功能技術探究——下面圍繞許可權體系、查詢效能、快取加速、視覺化資源庫、開發者服務等方面展開介紹。

58同城敏捷BI系統的設計與實踐

1. 完備的許可權體系
作為 BI 平臺的基礎功能,一套完善的許可權體系,是保障資料安全、使用者千人千面許可權控制的基礎。星火基於主流的 RBAC 模型思想,實現了一套覆蓋系統功能許可權和資料許可權的嚴密高效的許可權體系。

58同城敏捷BI系統的設計與實踐

RBAC 模型思想的核心在抽象出許可權擁有者、許可權資源、資源操作等三個主要因素。鑑權過程就是對“Who”是否對“What”進行“How”操作的邏輯判斷。
星火許可權分為功能許可權和資料許可權。使用者許可權由使用者本身的許可權、所屬使用者組的許可權、所擁有角色的許可權,共同決定。

58同城敏捷BI系統的設計與實踐

功能許可權可直接賦給使用者,也可以賦給角色,一個使用者可以擁有多個角色。資料許可權包括行許可權和列許可權,星火可給使用者、使用者組進行資料許可權設定。支援使用者可同時擁有多個使用者組。
功能許可權包括使用者能否新建資料來源、資料集,能否對資料集進行編輯;資料許可權即可訪問、可檢視等,例如針對一張全國業務資料表,行許可權是指可檢視區域資料範圍,列許可權是指哪些列可見,哪些列不可見。
下面逐項介紹一下功能許可權構成:
(1)功能許可權下的選單許可權:星火角色體系包括域管理員、專案組管理員、普通使用者。每個域有對應的域管理員,域和域之間資源完全隔離;每個域內可以配置多個專案組,每個專案組由專案組管理員進行維護;所有的域共用一個駕駛艙空間。

58同城敏捷BI系統的設計與實踐

(2)功能許可權下的資源許可權:星火的資源主要包括資料來源、資料集、儀表板等三類。每類資源都提供了使用和管理兩種許可權,可以對應賦給使用者或使用者組。

58同城敏捷BI系統的設計與實踐

資源許可權配置介面如下:

58同城敏捷BI系統的設計與實踐

下面介紹一下資料許可權構成:
(1)資料許可權之列許可權,星火提供三類列許可權配置模式——允許檢視所有列;允許檢視指定列;不允許檢視指定列等。

58同城敏捷BI系統的設計與實踐

(2)資料許可權之行許可權,星火提供兩種行許可權配置模式——基於固定值或屬性值許可權設定。

58同城敏捷BI系統的設計與實踐

下面介紹一下資源操作鑑權過程:
星火平臺的資源操作許可權由“資源”+“操作”構成,底層透過“位”儲存,鑑權基於二進位制運算實現。

58同城敏捷BI系統的設計與實踐

星火資源操作鑑權基於“使用者表”、“資源表”、“使用者許可權表”構成。以是否擁有“報表刪除許可權”配置為例,將“報表”的“新建”操作對應位設定為“0b00000001”,即十進位制的“1”、將“報表”的“刪除”操作對應位設定為“0b00000010”,即十進位制的“2”。判斷某個使用者是否具有某張報表的刪除許可權,就基於“使用者許可權表”,組織查詢語句生成。示例如下:
select operation&2 from user_permission where user_id=1 and resource_id=1
同樣的賦權、刪除許可權,也可以透過二進位制方式實現。

2. 高效能 BI 查詢引擎

(1)星火查詢引擎的設計背景——敏捷 BI 需要解決的問題

  • 問題1:查詢慢

對於常規的關係庫,如 MySQL 等,查詢情況還可以。大資料 Hive 庫,查詢效能就很糟糕,查詢計算執行等待時間較長,短則幾分鐘,長則 1~2 小時。無法支撐敏捷 BI 分析應用。 

  • 問題2:語法多樣性

因為敏捷 BI 需要接入的資料來源的多樣性,不同的庫語法多樣,甚至引入異構查詢等問題。

  • 問題3:異構資料查詢

在 BI 分析場景中,存在基於不同資料來源的資料進行交叉整合分析,引入異構資料查詢的需求。

  • 問題4:二次計算

在 BI 分析過程中,存在大量的如同比、環比、累加佔比等功能,引入較多的二次計算需求。

58同城敏捷BI系統的設計與實踐

(2)星火查詢引擎的設計原理——高效能 BI 查詢引擎
資料查詢請求生成後,會進行請求解析,若無快速計算,會進入普通取數——請求進入取數引擎——針對不同的資料來源,透過方言介面卡將相應的方言請求轉化為對應的 SQL,進入 SQL 最佳化引擎,繼而透過資料查詢服務進行取數,涉及直連取數(直連資料庫)和抽取取數(MPP 資料庫)兩種應用模式。
針對快速計算請求,進入快速計算引擎,透過呼叫取數引擎將資料讀取至記憶體中,透過記憶體計算完成相關快速計算任務。

58同城敏捷BI系統的設計與實踐

以最簡單的同環比計算流程為例:首先獲取當期資料;再計算同期日期範圍,分普通同環比和範圍同環比,實現同期資料獲取;再記憶體中完成同期值、差值、差值百分比等計算;常規計算完成後,還支援進行二次過濾和排序等處理任務。

58同城敏捷BI系統的設計與實踐

星火支援的快速計算清單:包括同環比、佔比、累加、差值百分比、差值以及同期值等指標計算。

58同城敏捷BI系統的設計與實踐

3. MPP 快取加速

MPP 快取加速的觸發場景:

  • 針對 Hive 資料表,原生的查詢效能比較差,不適合 OLAP 分析。從而需要將資料抽取進入中間資料庫;
  • 針對 Excel、CSV 等資料來源,無法透過 SQL 查詢取數;
  • 另外針對內部的雲窗文件系統,需要提供資料抽取的能力。

58同城敏捷BI系統的設計與實踐

星火快取加速的配置頁面:提供開啟抽取開關,也支援手動抽取。

58同城敏捷BI系統的設計與實踐

抽取設定:支援原表配置、目標表配置。

58同城敏捷BI系統的設計與實踐

星火平臺從接入層到展現層的框圖如下:支援資料來源包括本地資料來源、大資料平臺、關係型資料庫等;直連模式基於 JDBC 連結方式取數;對於抽取模式,需要透過整合服務配置定時排程,將資料抽取至 MPP 資料庫,最後透過查詢服務取數提供給分析以及報表服務。

58同城敏捷BI系統的設計與實踐

下面,詳細講解一下星火平臺抽取資料的流程圖。使用者在平臺上新增抽取配置後,星火BI 會在 ClickHouse 中建立一張目標表,透過星河排程系統提供的 OpenAPI 建立抽取任務,繼而根據使用者配置的定時時間,建立抽取task完成將資料從Hive表抽取到 ClickHouse;使用者在訪問報表時,星火會自動完成資料來源轉換(把 Hive 轉換為ClickHouse),透過資料查詢服務,直接從 ClickHouse 中讀取資料。

58同城敏捷BI系統的設計與實踐

最後,再具體分享一下 ClickHouse 在星火的應用實踐

  • ClickHouse 是一個非常高效能的 MPP 資料庫,在單表查詢方面效能優越;
  • 基於 Zookeeper 提供的分散式協調能力,也支援分散式表。

可將 ClickHouse 在星火的實踐提煉為以下四個方面:

  • 星火使用了副本合併數的表引擎,實現了副本能力;透過建立分散式表,實現了分片能力。透過兩種技術方案的融合,保障了叢集的高可用和高效能。

具體實現:在新建目標表時,會在本地節點建立 Local 表,表引擎使用 ReplicatedMergeTree;然後建立一張分散式表,即每個節點上本地表的全域性代理。

  • 基於分散式表,星火的讀寫邏輯做了差異化設計實現

讀,透過分散式表讀取,發揮了 ClickHouse 非常高效的分片和副本能力,實現極速查詢。寫,由於在寫分散式表時,ClickHouse 會在叢集節點之間進行資料同步傳輸,存在寫放大的問題,降低了整體效率。星火透過直接輪訓批次寫本地表的方式,提高了寫入效能。

  • 隨著業務增長,不可避免的引出磁碟空間不足的問題

星火透過將 ClickHouse 的磁碟掛載到自研的 WFS 分散式檔案系統,實現存算分離,解決了儲存空間不足的問題。

  • 進一步降低星火執行風險

利用 ClickHouse 的多分組能力,透過叢集配置,可以將 ClickHouse 節點配置多個獨立的叢集。星火在建立表時會進行均勻打散,建立到多個不同的叢集,降低單叢集執行的風險。

58同城敏捷BI系統的設計與實踐

4. 資料視覺化資源庫
在使用星火過程中,使用者提出:
(1)星火通用元件不滿足需求,這時有JS能力的使用者可以透過自定義方式擴充套件元件;
(2)使用者在實現自定義元件時缺乏統一標準;
(3)需要支援自定義成果的分享?等問題。
綜上原因,星火透過聯合 58UXD 打造了 58 視覺化資源庫-星圖。

58同城敏捷BI系統的設計與實踐

星圖包括圖表庫和 Wcharts 兩部分。Wcharts 是星火和 58UXD 合作推出的可靠解決方案。圖表庫是面向全網的圖表開放社群,打通了圖表開發和應用的閉環。使用者在星火工作臺完成自定義元件的建立,可釋出至圖表庫,也可以直接呼叫其他使用者釋出的成果。

58同城敏捷BI系統的設計與實踐

Wcharts:提供包含折線圖、熱力圖、趨勢圖等豐富的前端資源。

58同城敏捷BI系統的設計與實踐

圖表庫提供包括和絃圖、水波圖等,均由使用者自定義開發製作並上傳提供。

58同城敏捷BI系統的設計與實踐

使用者若需要使用星圖的自定義元件,在工作臺圖表製作頁面右下角的社群相簿中,可以一鍵訪問。

58同城敏捷BI系統的設計與實踐

5. 星火開發者服務

星火為了解決系統製作資料圖表的開發成本高、維護難等問題。提供了豐富的開放介面以及安全便捷的報表嵌入功能,支援將報表無縫整合到企業專有平臺中。
星火提供的開發者服務包括:OpenAPI(資源列表、許可權管理、使用者體系等)、嵌入服務包括報表嵌入連結生成、認證方式管理、防傳播、iframe SDK 等,業務系統透過生成的嵌入連結,方便的將星火報表嵌入至業務系統內,透過 OpenAPI 非常高效的實現報表許可權管理的功能。

58同城敏捷BI系統的設計與實踐

業務系統呼叫星火報表的示例效果:

58同城敏捷BI系統的設計與實踐

04

未來展望
未來星火將推出更多功能,提供:

  • 更多樣的資料來源:支援 API 資料來源、流式資料、非 SQL 語法資料來源等的接入;
  • 更方便的資料處理:輕量化的 ETL 能力、電子表格能力;
  • 更強大的視覺化元件:圖形語法元件、自定義資料門戶;
  • 更智慧的星火:包括智慧預警、指標歸因分析等。

58同城敏捷BI系統的設計與實踐

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2933404/,如需轉載,請註明出處,否則將追究法律責任。

相關文章