07.12 360數據處理平臺的架構演進及優化實踐(有彩蛋)

360數據處理平臺的架構演進及優化實踐(有彩蛋)

本文根據DBAplus社群第153期線上分享整理而成,文末還有好書送哦~

講師介紹

360数据处理平台的架构演进及优化实践(有彩蛋)

王素梅

360大數據開發經理

  • 目前在360大數據中心擔任大數據開發經理,擁有7年以上大數據行業從業經驗,專注大數據處理、大數據平臺開發,對大數據處理技術與場景有豐富的實戰經驗,尤其擅長實時數據計算場景的解決方案。

本次要分享的是360大數據中心數據處理平臺Titan的架構演進,以及一些具體的實踐過程。

一、背景介紹

在當今的大數據時代,大數據計算引擎已經從原先最早的Hadoop生態系統演變到了第三代甚至是第四代計算引擎,比如Spark以及Flink等;存儲引擎也是呈現多樣化的發展,如支持MPP的關係型存儲、分佈式存儲、時序數據庫等。大數據生態的多樣性給大數據開發的學習成本造成了很大程度的提高。

然而,當前我們的主流開發模式還是基於腳本開發,業務人員無法參與到我們的計算中來,這種開發模式在很大程度上依賴開發人員的效率,數據的時效性會難以保證。同時,數據開發過程中的數據流轉全程黑盒,這給開發維護人員帶來了很大的維護困難。最後,缺乏統一的資源調度導致資源長時間被佔用不釋放,從而引起資源浪費。以上是大數據開發人員所面臨的問題和挑戰。

從平臺的角度來看,以360公司為例,公司產品形態多樣化,包括了PC產品、WEB產品、移動端產品等等,多樣化的產品意味著數據處理平臺面臨著繁雜的數據類型,同時也必然面臨了多樣化的存儲引擎及存儲格式。

此外,在大數據時代,數據處理的場景已經不再停留在簡單的ETL過程,不僅僅包括簡單的指標計算,還需要涵蓋數據解析、數據分析、機器挖掘等等。隨著數據對產品的指導作用越來越重要,業務對數據的時效、規則生效的時效以及需求響應的時效有了非常高的要求。

從大數據開發人員和平臺開發的角度分析了當前面臨的問題和挑戰之後,接下來我們來看看要如何通過平臺來解決這些問題。

二、平臺演進

Titan大數據處理平臺是360集團內部的一站式大數據處理應用平臺,提供了數據集成、 數據同步、數據計算、數據分析以及流式數據處理等大數據處理應用場景的功能。

既然是演進,那就要從前世講到今生了。我們的平臺化進程基本可以分為三個階段:

第一階段:Titan前

這個階段的架構圖如下圖1所示:

360数据处理平台的架构演进及优化实践(有彩蛋)

圖1 Titan前架構

這個時期分佈式計算興起,從傳統單機計算過渡到了分佈式計算,在分佈式計算引擎的基礎上抽象了各類腳本模板,基於此,我們的工作模式從純手工勞作轉變到了腳本模板的開發。

開發模式的轉變使得我們的計算效率和開發效率得到了很大程度的提升。但隨著產品爆發式的增長、場景的增多,腳本模板無法提供靈活的方式,依然需要鋪大量的人力解決。

第二階段:Titan 1.0

這個階段的架構圖如下圖2所示:

360数据处理平台的架构演进及优化实践(有彩蛋)

圖2 Titan 1.0架構

在這個架構裡,基於分佈式引擎及計算場景,抽象了各類型的模板庫,通過模板庫引用到我們的上層交互,以系統的方式將數據開發一定程度上交給業務。同時可以看到,這個階段裡,數據源相對豐富了,產品也比較豐富了,有計算平臺、報表平臺、在線查詢系統以及經營分析平臺。

一方面把數據運維交給業務,另一方面也一定程度上把數據開發交給業務,讓業務具有自主開發的能力。

但隨著產品的發展,這個架構也很快暴露出了一些問題:一方面沒有實時流的接入;另一方面模板庫從一定程度上也是定製開發,依然無法滿足個性化場景;任務運維開放的不夠,在一定程度上依賴平臺開發人員,運維成了瓶頸。

第三階段:Titan 2.0

這個階段的架構圖如下圖3所示:

360数据处理平台的架构演进及优化实践(有彩蛋)

圖3 Titan 2.0架構

Titan 2.0採用了第三代計算引擎。

眾所周知,第三代計算引擎主要特點是支持JOB內部DAG以及強調實時計算。在第三代計算引擎基礎上,自主研發了DITTO組件框架和規則引擎,基於組件及計算的抽象提供豐富的組件庫,採用圖元拖拽的方式實現數據處理的無碼化操作。同時通過調度監控以及權限管理,實現系統的自助運維以及數據安全的保障,值得一提的是,支持多種數據源接入,極大程度上滿足各種數據類型及存儲類型。

三、Tian 2.0功能模塊

一級功能

從功能上,Tian 2.0劃分了以下幾個功能模塊,一級功能視圖如下圖4所示:

360数据处理平台的架构演进及优化实践(有彩蛋)

圖4 一級功能視圖

二級功能

數據源管理實現了多數據源歸一化處理,同時也提供了對數據安全和質量約束的保證。抽取和加載通過對各個存儲引擎處理的抽象,實現了同時支持流式數據抽取和加載以及批數據抽取和加載。

任務管理部分通過圖源配置,達到給用戶提供靈活配置的需求,同時輔以我們運維管理模塊的規則配置、任務調測以及數據流查看,實現了可視化運維和實例運維的效果。

調度引擎在提供即時調度、指定週期調度、歷史任務調度的同時,還支持了實時調度和監控的功能。此外,權限管理不僅實現了角色權限、操作權限、菜單權限,還實現了數據源權限管理,為數據提供安全保障。如圖5視圖所示:

360数据处理平台的架构演进及优化实践(有彩蛋)

圖5 二級功能視圖

Titan 2.0從技術架構上來講,採用的是第三代計算引擎,實現了跨引擎以及批處理和流處理的統一,這對上層用戶是透明的;其次,它採用了DAG優化,提供了整個系統的處理能力以及計算效率,Titan 2.0與數據資產系統結合實現了全鏈路的數據質量監控以及數據的安全性保障。

業務架構上的優勢可以總結為4個詞:

  • 多源:包含了對多應用的支持,以及對各類異構數據源存儲系統櫃的支持;

  • 易用:系統的易用性突出在無碼化上,數據計算,比如一個DAU計算只需要拖拖拽拽就可以了;

  • 自助、靈活:自助化和靈活性體現在任務的配置修改、監控調度完全交給用戶自己,不依賴於開發人員,想怎麼玩就怎麼玩,讓用戶真實的體驗到玩轉大數據。

實踐案例

接下來分享一下平臺的幾個典型的實踐:

首先是DITTO組件框架,DITTO組件框架的設計是為了解決多數據源、多存儲源以及滿足多種計算場景的需求。我們採用統一入口的方式,實現了對異構異源數據的支持以及離線計算與實時計算的統一,並採用組件組裝DAG後計算滿足各類場景需求。

下圖6為DITTO組件框架的基本架構圖,從架構圖中可以看到,DITTO是搭建在Spark、Flink這類計算引擎之上的,上層可以支持離線計算、實時計算、機器學習、在線查詢等圖元化應用。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖6 組件框架架構圖

DITTO採用了三層任務結構設計,如圖7所示,分別是Application、Job、Task,它們之間的關係是一對多的關係,也就是一個App對應多個Job,一個Job對應多個Task,App在一次運行中負責了所有層次的初始化及所有事件的提交,DAG會在Job層次進行編排,最後Task這裡是真正的執行單元。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖7 DITTO組件框架設計

在DITTO中,組件是最小的執行單元,DITTO的抽象大致可以分為組件計算邏輯抽象,組件計算引擎抽象和組件運行環境抽象這幾個部分。

這裡分享DITTO設計過程中如何對計算、組件、context和規則引擎進行抽象:

  • 首先計算抽象。不論是數據處理、數據分析還是數據挖掘,最終都是一個數據的輸入到一個數據的輸出,那麼首先就會有一個數據源的概念。而數據處理又分為業務的處理邏輯以及計算單元,這樣就產生了業務邏輯的抽象和計算邏輯的抽象。當然,在計算的時候,要根據業務場景或者需求需要來選擇不同的計算引擎,所以基於這四個方面計算可以進行動態的拼裝,隨意拼接去形成一次數據處理的計劃,滿足一定場景,這就是我們計算抽象的過程。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖8 計算抽象

  • 其次是組件抽象,組件的執行需要做一個統一的入口或者說統一的標準,這個標準抽象為生命週期。標準定下來之後,數據如何進入到組件中,這裡就會有一個數據採集。接下來數據在組件之間的流轉需要定義一個元數據,元數據包括了數據類型和數據字段。對於數據依賴其實就是拓撲關係的維護。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖9 計算組件抽象

下圖10是關於組件的類圖,通過一個高層次的抽象來達到計算引擎的無關性,同時從這個類圖中也可以看到我們的組件週期大致分為了prepare、execute、declare、clearup等幾個階段,數據的依賴通過dependencies來維繫。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖10 組件的類圖

  • 而後是context,在DITTO中context主要負責初始化過程及上下文傳輸,在一個application的初始階段,首先由context進行初始化。它負責了組件的初始化、計算引擎的初始化、時間的初始化還有DittoEnv和調度器的初始化。上下文傳輸部分的話,由於對於組件來說只關注自己本身,context來負責維繫各個組件之間的數據流轉。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖11 context

360数据处理平台的架构演进及优化实践(有彩蛋)

圖12 context初始化流程圖

  • 最後是規則引擎,規則引擎其實比較好理解,它最重要的功能就是實現業務規則從應用程序代碼中分離,簡單來說就是實現了集成代碼與業務無關,也就是將字符串或者是代碼塊傳到我們的解釋器後直接給出結果。在Titan 2.0裡,基於規則引擎主要抽象出了四個部分,分別包括了邏輯運算、內置運算、四則運算、文本處理。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖13 規則引擎

在做DITTO初期,規則引擎是以一種DSL的方式接入到系統中的,隨著場景的發展以及我們平臺的擴展,規則引擎目前以獨立的產品形態來提供服務。

圖14為當前我們規則引擎的整體架構,從架構圖中可以看到在提供常規規則處理的同時,我們規則引擎也提供了規則庫和函數庫的管理,方便我們業務以更加自主自助的方式來試用我們的規則引擎。

360数据处理平台的架构演进及优化实践(有彩蛋)

圖14 規則引擎架構

另外在實際場景中,我們還從組件粒度上對性能和場景進行了優化,包括防止數據傾斜處理、防止內存溢出處理、數據緩存處理小文件合併等等。

四、心得體會

最後分享一下個人的一些心得體會。

我個人認為,在設計產品或者技術架構上,首先應該遵循化繁為簡的原則,一定要避免過度設計,這個我們早期確實也踩過不少的坑;再者就是要一起從業務場景出發,做好需求分析,瞭解用戶的核心痛點才能做到設計直擊痛點、方便用戶,因為平臺的發展離不開業務的滋養,也正是業務場景的不斷變化才帶來了平臺的不斷進步;最後,平臺的穩定是一切的基礎,一切性能優化都需要找到那個平衡點。

彩蛋來了

在本文微信訂閱號(dbaplus)評論區留下足以引起共鳴的真知灼見,小編將在本文發佈後的隔天中午12點選出留言最精彩的一位讀者,送出以下書籍一本~

注:同一個月裡,已獲贈者將不可重複拿書。

360数据处理平台的架构演进及优化实践(有彩蛋)
360数据处理平台的架构演进及优化实践(有彩蛋)

近期熱文


分享到:


相關文章: