海量數據條件下,企業自定義數據分析需求的實現
原創【51CTO.com原創稿件】技術領域
互聯網電子商務領域,尤其涉及到快速實現業務部門數據分析需求的處理方法以及系統。
背景技術
隨著計算機通訊技術的發展,蘇寧易購各業務系統產生的業務數據的規模也越來越大,對如此龐大的數據進行快速分析傳統的框架和技術已顯得力不從心,并且隨著數據挖掘技術的發展,對其海量數據的分析往往都是隨機維度的自由組合,對此類需求傳統的做法都是一個固化離線統計分析,消耗大量的人力、物力,并且都不能實時分析。針對以上問題,我們設計出了一套可以快速響應蘇寧各業務部門數據需求分析的工具,不僅支持多維度的自由組合、個性化的設置,而且還能快速統計出用戶隨機指定的相關維度、指標數據。高效實現了用戶的個性化需求,達到創新!
創新的內容(技術創新和業務價值)
主要創新在于:首先我們將數據進行分類,如蘇寧的業務數據可以歸類為時序化和非時序化,匯總類和明細類數據等,然后采用不同的架構技術方案進行處理。如針對時序化的數據,我們基于Druid做了相關的設計和封裝,可以將能預匯總的數據存儲于此。時序化的明細數據我們基于ElasticSerach技術作了封裝,可以將歷史數據通過Spark直接初始化到ElasticSerach,增量數據可以開啟ElasticSerach服務獲取Kafka實時增量數據信息。針對一些特殊場景如精確去重計算,涉及多表關聯,我們采用了基于PostGreSql進行了相關的組件封裝,整套的技術架構方案,能覆蓋用戶在海量數據中快速自定義維度、指標進行數據分析的大部分場景。對于業務系統產生的海量數據,無論是實時還是離線的,都可以自由的進行維度、指標組合,個性化的設置,對用戶數據分析需求進行快速統計。其特點為:對存儲海量的業務數據無論是匯總和明細查詢都能夠高效的查詢,個性化的維度、指標的自由組合,能夠很好支持業務部門的大部分數據分析需求。
1、解決的問題
(1)業務部門數據分析需求問題
蘇寧易購各業務系統(如訂單,價格,購物車,促銷等電商業務系統)每天產生海量的數據,各業務部門在業務數據產生后,都會對業務數據進行數據分析和相關的明細查詢操作。然而這種數據分析往往帶有隨機和不確定性,每個部門不同的崗位想看的、想分析的往往會截然不同,這樣就會產生了大量的報表需求,給開發部門帶來了巨大的工作量。針對此需求背景,我們進行了架構的調整和設計,實現能夠讓客戶自由選擇不同維度和指標進行個性化需求分析,快速的統計出用戶想要的數據。在明細數據查詢的時候,根據用戶選擇的日期、維度和指標也能快速的響應。用這種支持用戶個性化的定義分析工具,可以解決大部分的日常的數據分析需求,為公司節約了成本。
(2)海量數據高效匯總問題
無論是面對海量的離線數據還是實時的數據,對如此龐大的數據進行數據分析都是困難的,之前我們針對實時數據的匯總一般采用STORM進行匯總再存入到DB或者其他的緩存中供查詢,但是這種定時調度存在延遲,不能進行實時的查詢。在海量的離線數據做匯總的時候,之前往往我們借助于HADOOP的離線計算,根據先定義好的維度統計相關的指標再入庫或緩存操作,這樣預先需要定義大量的不同維度組合,離線計算時效性也很差。基于以上的實時和離線的匯總統計出現的瓶頸,我們后續進行了架構的調整,先在DRUID定義一張大寬表,將相關的維度和指標都定義在這個寬表中,數據在存儲的時候會按照維度進行預匯總,在查詢的時候可以快速相應,徹底解決了海量數據匯總效率低的問題。
(3)海量明細數據高效查詢問題
對于業務中需要查詢大量的明細數據問題,之前傳統的做法都是分庫分表存儲在DB里,這樣在查詢數據集較大的情況下存在很大的延遲問題,在存儲上和歸檔上也是極其不便,我們進行了相關的架構調整,存儲海量的業務明細數據采用了ElasticSearch存儲介質,ElasticSearch是基于Lucene搜索引擎的其查詢效率很高,徹底解決了海量業務明細數據查詢高延遲問題。
(4)精確去重(count distinct)和多表關聯問題
蘇寧的業務分析中涉及統計到很多需要去重的維度、指標,利用Druid以及ElasticSearch去重都會有丟失精度問題,利用傳統的關系數據庫則統計的效率較低。鑒于此類場景,我們就PostgreSql進行了封裝,利用其自身Sharding 和分片技術實現了高效的查詢,滿足了精確去重、多表關聯并且高效查詢。
(5)為大促提供保障
蘇寧每年的大促都會進行大力的促銷活動,其交易量會是平時的幾十倍,對海量數據的存儲和分析對于傳統的架構來說顯然很吃力,本方案運用到諸葛大師的塔羅以及實時GMV項目中,很好的解決了該問題。自定義銷售塔羅我們設計一張大寬表,將可以匯總的數據入Druid進行預匯總,只保留匯總后的數據,業務部門可以根據隨機選取的維度和指標進行組合查詢。將明細不需要匯總的數據我們放入到ElasticSerach中去,利用其高效的Lucene搜索引擎可以快速查詢出業務需要的明細數據。對于需要精確去重以及多表關聯的特殊場景數據,我們存儲到PostGreSql中,用戶可以根據選擇需要去重的維度和指標進行查詢,也能快速的相應。利用此發明我們已經多次立項,其中主要內容包含實時GMV、歷史GMV、銷售塔羅、會員塔羅、庫存塔羅以及自定義塔羅等,在大促期間給領導、用戶、業務人員能夠快速的進行數據分析提供保障。
2、核心創新點
我們針對海量的數據下自定義維度和指標進行快速響應做了一套方案,對各種業務場景的覆蓋,對現有的開源技術Druid、ElasticSearch和PostGreSql進行封裝,制作成適合支持蘇寧此類業務場景個性化的組件,用此整套架構方案我們可以快速實現業務部門數據分析,實現用戶可以隨機定義維度和指標進行快速分析,無須再進行大量的個性化報表開發,不僅用戶體驗得到提高,同時也釋放了大量的開發資源。
3、技術方案
***步:數據的接入 ;
將時序化類型的匯總增量的實時流式數據和全量需要初始化的離線數據接入到Druid中,個性化的匯總數據分析都是基于DRUID實現的。海量的時序化的明細數據信息接入到ElasticSearch,離線數據我們通過Spark組件初始化到ElasticSerach,增量的流式數據我們通過ElasticSearch監控服務去從kafka拉取,所有的個性化的明細數據查詢都是基于ElasticSearch實現的。非時序化需要進行精確去重以及多表關聯的數據我們初始化到PostGreSql中,在PG 中我們支持匯總和明細各種場景的海量數據快速查詢。
第二步:個性化的數據分析匯總查詢;
個性化的數據分析匯總主要是基于Druid操作的,首先設計一張大寬表,這個大寬表包含了業務域的所有的維度和指標,再將實時和離線數據接入到這個基于Druid的大寬表中,數據會根據這個大寬表的定義的維度進行預匯總,存儲的并非明細數據,界面提供用戶選擇的維度和指標,可以任意的組合,支持個性化的配置,將選擇好的維度和指標固化后進入到查詢界面,再從Druid中開始查詢已經配置好的維度和指標進行數據分析。
舉例:
銷售塔羅:蘇寧的銷售數據有實時數據和歷史數據,在統計銷售數據的時候會有很多維度進行統計、如統計各大區的付款金額和訂單數量、各品牌、品類的付款金額和訂單數量、各業務渠道的同期和本期的銷售額等,這樣就會有大量的報表需要開發人員去開發,而且銷售的維度和指標有很多,涉及到數據挖掘那組合就更多了。之前的做法是實時數據我們基于STORM匯總后落入DB提供展示,但是這種設計不能滿足用戶個性化的操作,不能隨意的選擇維度和指標,往往都是先提需求再進行相關的開發,仍然有大量的開發工作量。后續我們基于Druid存儲后,將所有的銷售維度和指標都放在一張大寬表中,數據基于維度預匯總進行存儲,頁面支持個性化的配置,這樣就能夠快速的實現業務部門的數據分析需求。
第三步:個性化的數據分析明細查詢;
個性化的數據分析明細查詢主要是基于ElasticSearch操作的,在ElasticSearch中我們定義了索引和類型,將涉及到的維度和指標信息都定義在其中,接著我們將明細數據灌入其中,因ElasticSearch是基于Lucene框架的全文搜索引擎,其支持海量明細數據高效的查詢。如像訂單明細數據,每天約數十萬數據量,兩年數據存儲在ElasticSearch中,在對兩年訂單明細數據進行隨意過濾查詢,其相應速度都是秒級,用戶體驗較好。
第四步:非時序需要精確查詢和多表關聯的查詢
非時序化的需要精確查詢以及多表關聯的數據我們存儲在PostGreSql中,在PostGreSql中我們設置了分片表、本地表,對不同場景設置了不同的索引如:B-tree, Hash, GiST, GIN等,利用其Sharding, point-in-time recovery(PITR)等非常棒的特性實現了高可用、負載均衡與復制功能,從而保障了數據可以快速存儲到PostGreSql中并且能高效的查詢出來。對于需要精確去重的業務場景,我們可以直接采用和關系型數據庫一樣的操作count(distinct)即可,對于多表關聯,PostGreSql能很好支持大部分 SQL標準并且提供了許多其它特性。
總結
隨著數據量的不斷增長和業務對快速分析的要求,傳統的框架和技術已無法應對新的挑戰。新的挑戰逼迫技術人員要找到能滿足海量數據和快速分析需求的解決方案。本文所述的“海量數據條件下企業自定義數據分析需求的實現”是在新的條件下應對以上挑戰的一種探索,解決了海量數據的匯總、查詢問題,幫助業務部門快速進行數據的分析和挖掘,為各個業務部門的決策和行為提供數據支撐,特別是在大促期間能對精準營銷等業務提供數據方面的保障,為公司的“數據經營”添磚加瓦。
附圖
作者:丁安國,蘇寧易購IT總部大數據中心基礎分析研發部經理,15年從業背景,蘇寧架構師職稱。對于基于大數據的數據分析系統的建設有豐富的經驗,對于電商訂單、購物車、價格等高并發系統的設計、開發和運維也有獨到的見解,目前致力于蘇寧基于大數據的各類分析平臺的建設。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】