加推時序系統RTS實現原理及應用簡介

加推科技發表於2020-09-24

一、背景知識

1、什麼是時序資料及分析目的?

時序資料是指時間序列資料。時間序列資料是同一指標按時間順序記錄的資料列。在同一資料列中的各個資料必須是同口徑的,要求具有可比性。時序資料可以是【時期數】,也可以【時點數】。時間序列分析的目的是透過找出樣本內時間序列的【統計特性】和【發展規律性】,構建時間序列模型,進行樣本外【預測】。

——【定義來自百度】

Sky認為,更廣義來說時序分析是一種資料探勘:

透過“趨勢、相關性、特徵”,進行“整合、歸納、評估”。提升使用者感知,最佳化使用者體驗,支援產品改進,加強業務管理水平。

2、涉及人群

本文主要目的是讓研發人員理解時序分析和相關實現技術,同時適合以下人群:

  • 決策層

透過了解時序分析的場景,推進分析指標的確定。制定解決問題的總體策略與方針

  • 業務部門主管

給出專業的分析指標

  • 資料分析師

解決業務問題,資料產生後,進行溝通,並對其發現進行深刻的分析

透過時序分析作為切入點,以此來全面思考資料驅動未來企業的方案。

二、基本原理

企業對於各端,都有埋點操作,而埋點獲得的是一種時序行為資料,有使用者行為,也有系統行為。大量的時序資料構成了我們的網際網路時代,採用化整為零的思路實現之。

實現步驟如下:

  1. 定義時間盒子(時期數),常用的有:5min、1h、1d、1w、1m、1y

  2. 定義行為標籤,每個行為標籤包含<1>定義的時間盒子

  3. 時序資料到來,根據其時間戳,先放入相應的行為標籤,再分別放入多個時間盒子。每個時間盒子都會進行計數+1操作

  4. 定義聚合操作盒子,每個時間盒子下有多個聚合操作盒子,常用有:sum、count、max、min、avg平均、med中位數、std標準方差 

  5. 最終我們將原始的時序資料,按不同行為標籤,存入不同時間盒子中並行放入其下的多個聚合操作盒子中

獲取資料時,我們採用【行為資料標籤】+【時間段】+【某個時間盒子】+【某種聚類盒子】或者【行為資料標籤】+【某時間盒子的數量】+【某種聚合盒子】

例如:

  • 本週,使用者登入,每天登陸次數 (一個折線圖),實際取數<=7個,速度極快

  • 以現在向前24小時內的,App首頁訪問量 ,實際取數24個,速度極快

原理示意圖如下:

 

三、方案選型及系統架構

本架構選擇了Redis作為儲存,有如下考慮

  • 低成本

    Redis專案本身接近100%程式碼覆蓋率,故障率較低,運維成本低。但不支援分片和事務是其主要問題。

  • 實時與高效

    按經驗來看,作為KV資料庫使用,Redis的讀寫,4倍於傳統資料庫的讀寫效能。

  • 穩定與可靠

    內部佇列,v2.6.5之後的管道PIPELINE,將多條命令一次性執行,單程式有可靠的原子操作保證,資料不串門。

  • 豐富的基礎演算法

    支援五種基本資料結構,對於需要唯一化人次的概念,實現便捷。並擁有HyperLogLog,海量資料基數計算解決方案,百度一下很多。

  • 擴充套件性

    叢集使用,MasterSlave容易擴充套件。

聚合函式語言選擇:LUA語言

  • Lua由標準C編寫而成,幾乎在所有作業系統和平臺上都可以編譯,執行。

  • 整個Lua解析器,有2萬行C程式碼完成,可以編譯進182K的可執性檔案,載入與執行兼得。

  • Redis原生支援對lua語言的解析,彌補了Redis不是很強大的計算能力,並具備原子性,此特性有助於Redis對併發資料一致性的支援。

 系統架構圖

整個RTS系統由14K的指令碼實現,包括LUA語言部分。

Sky認為: 一切資料都有時效性

  • 有傳統的大資料分析架構作為主要資料分析手段,因此本系統設計伊始,定位是一個強力輔助,依據新鮮資料更快的出統計更快的分析各行為指標。

  • 有些場景的資料,可能不進入後臺大資料服務,但也想快速出分析結果。按RTS的原理,可以完成一套物聯網時序統計serveless系統,跑在類似樹莓派嵌入式作業系統上!

實際效能指標:

最高峰值,每秒2萬次API請求,不加佇列中介軟體的情況下,穩定統計持續時間1小時。

下圖某系統在日活10萬+時候統計資料,紫色為中位數:

四、模組的操作使用

整個RTS系統使用Nodejs完成和redis的互動,使用require即可輕鬆使用

具體使用如下:

初始化例項:

以上為返回一個靜態類,8個時間盒子,專案字首為statsCenter,用以在Redis建立多例項統計系統

寫入方法:

 

注意 上面是一個非同步函式,在可以選擇同步函式來寫入資料。

除了常用的聚合函式,本方法還提供,dy:每年按每天在週中的統計,hm:每月按小時在天中的統計,等高階環比聚合統計值

另有recordUnique 函式配合做唯一化統計,主要使用Redis的集合資料結構完成

讀取方法:

注意 上面是一個同步函式,在高併發下可以選擇非同步函式來獲取圖表。

下圖為按小時取資料畫圖表:

 

整個RTS系統,只有2個對外API,一讀一寫,學習成本低,中級研發人員10分鐘就可以完成初級時序統計前後臺。

五、應用場景

1、金融證券


在證券圖表中,會使用5m ,10m ,15m ,30m ,1h ,4h ,1d ,1w ,1m 等來構造K線圖。在時間週期的基礎上,延伸使用MACD、KDJ、CCI、Boll 、MDI等分析工具進行短期和長期的趨勢分析。

特別指出:各個指標均建立在時序基礎上。

金融資料以一個ticket作為一個時序包,大廠每200ms推送一次,資料量大,使用RTS後,將資料降維,實現了人們經常看到的K線圖。

下圖是Sky在2015年完成的自研K線圖表(全原生實現)介面:

2、運營統計


比起繁雜的創業過程,網際網路運營有許多確定的指標,是一個專業型較強的崗位。運營負責人透過對指標的鑑別制定出相應運營計劃。

對於使用者的行為,進行長期與短期分析,運營也需要深入到整個產品的生命週期,我們俗稱拿資料說話,做相應的對策。

日活躍使用者、周活躍使用者、月活躍使用者,僅各類活躍指標,結合RTS與產品功能矩陣進行比對,迅速迭代與修正。

加推在使用者行為分析指標上,有獨特的見解:

下一步就是聚類和客戶細分環節了。

3、監控服務

監控的目的是為了,推斷,預警,決策。

使用時序統計,將每小時,每天,API介面訪問的,最大值、最小值、平均值進行統計,快速發現網路波動和介面異常。

使用RTS快速建立一個埋點大看板。

當有介面有超過1000ms的響應時,我們就要開始預警了。

4、多維度統計


資料探勘是一門交叉科學,涉及統計學、機器學習、資料庫、雲端計算、人工智慧等。

透過資料探勘分析架構,從明細級變為彙總級和分析級。形成資料立方體,輔助機器學習。

將多個時間盒子的資料進行,再分析。給出使用者的時序行為特徵,完成更深入的資料探勘,解決企業核心資料分析,愉快的擁抱DT時代。

六、資料解決方案的方法論

最後給出一個,資料解決方案的方法論3步

  • 研究、談話理解業務活動(理解我們如何盈利,我的關鍵業務活動是什麼)

  • 頭腦風暴(確定資料在業務上的作用,需要哪些資料)

  • 設計與實施(評估模型,並試錯)落地很重要!

我們的DT之路是星辰大海。


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

相關文章