分布式并行計算調度和管理系統Summoner
- 為什么要做“數據”并行計算調度?
- 他山之玉:azkaban2/oozie/mesos
- Summoner的特性 </ol>
- 涉及到商戶、門店、交易、折扣、核銷物料等等,數據量很大,至少每天都要算一次,要算得快,
- 激勵政策和傭金計算公式隨著競爭態勢變化,一般一兩個月變一次,
- 數據抽取盡可能少影響正常業務,
- 計算邏輯調整后要能快速部署和運行。
- 人員組織架構
- 大區、區域和城市的對照關系
- 合同以及合同擁有者
- 商戶和門店
- 門店下的收單交易
- 傭金計算公式、規則以及各種權重因子
- ……
Summoner 是國璽部門推出的基于 MySQL+Redis+Zookeeper 的分布式并行計算調度和管理系統,李紅紅主設。
大家都可能做過 基于 MySQL 數據庫的,大規模的、有步驟的、步驟與步驟之間有依賴關系的數據計算 。你可能定義了一堆彼此依賴的定時任務,也可能寫成一個大進程跑。
舉一個實際場景吧,在我們 O2O 業務體系下,我要做人員規模三四千人、有多條業務線、組織結構為大區-區域-城市-銷售組的銷售團隊的昨日傭金和當月傭金,這里的挑戰是:
那么,以前可能會定義一些定時任務,每天凌晨從各個業務數據庫(畢竟全都拆庫分表了)里抽取:
既有全量數據,也有增量數據,所以數據量是很大的。
先算簽約數、開店數、交易量等,再把業績歸結在 BD 身上,根據不同業務線的傭金計算公式依次對 BD、BD主管、城市經理等展開各種計算。
雖然我們的 JobCenter 是很優秀的定時任務調度和管理平臺, 但它沒有步驟(即定時任務之間的依賴關系)的概念 ,所以以前我們只好拍腦袋定 Job1 凌晨1點執行,Job2 凌晨2點執行,Job3和Job4放在3點執行,顯然這只是無奈之舉, 萬一 Job1 跑到凌晨3點才算完怎么辦?萬一 Job1 執行失敗了怎么辦?
什么是步驟?我們可以用下圖來理解一個大計算任務下步驟之間的依賴關系:
圖1
為了應對這種數據量很大的抽取和一環套一環的計算,我們需要 另行發展一個界面友好的、有步驟概念的、有集群調度的數據計算系統 ,以充分利用機器資源。
0x01,他山之玉:azkaban2/oozie/mesos
計算資源的調度,好學生有不少,如針對 hadoop 集群調度和管理的 azkaban2 和 oozie,抽象能力更高的分布式資源管理框架 apache mesos。
項目開始之初,我希望借鑒 oozie 和 azkaban2 的一些優秀設計思路,我們其實也是做調度和管理,只不過它們基于 hadoop,我們基于 mysql 而已。