订单量的监控
要解決的問題 :
1.在電商項目中,如何準確的知道當前訂單量是正常的
2.如何在訂單量突變后快速感知
解決思路 :
實現一個關于訂單量的監控系統,將歷史數據與實時數據做對比,因為每天的訂單量,基本都是一個相似的變化范圍,比如凌晨4點的單量是一天中最少的,節假日的單量要小于工作日單量等等
前提條件 :
1.不影響當前系統的性能(主要是數據庫的壓力不能因為監控而受到影響)
2.減少誤報,但杜絕漏報
方案 :
未來不可預知,但可預測.
基于以上這個邏輯,我們可以抽象出四個的模塊來做,每個模塊日后都可獨立增強
1.收集整理模塊 : 收集歷史數據,統計單位時間片段內的數據
2.預測模塊 : 根據收集模塊中的數據,對未來數據進行預測
3.比較模塊 : 將預測的數據與實時數據進行比對,得出結論
4.輸出模塊 : 將結果可視化的輸出到前臺
具體實現 :
1.收集整理模塊
每個訂單在入庫后,都會發一個mq出來,我們就收集這個訂單mq,將每個訂單數據(訂單號,mq時間)收集起來,存入庫中(Mysql || Redis || HBase),待商榷
方案二:數據庫主表增加觸發器(insert),每當有insert操作就記錄下來
每天凌晨4點作為臨界點,根據歷史數據預測到下一個凌晨4點之內的每個時間片段內的訂單量
歷史數據初步暫定選取前一周的數據(日后肯定要可選可刪,比如刪除促銷的數據等)
時間片段暫定為一小時
2.預測模塊
使用二次指數平滑法預測數據
有人問為什么用二次指數平滑法預測,先看看他的優缺點:優點:所需數據資料少,就可以預測出來所需要的結果,指數平滑法是在移動平均法基礎上發展起來的一種時間序列分析預測法,兼容了全期平均和移動平均所長,不舍棄過去的數據,但是僅給予逐漸減弱的影響程度,即隨著數據的遠離,賦予逐漸收斂為零的權數是通過計算指數平滑值,配合一定的時間序列預測模型對現象的未來進行預測。缺點:賦予遠期較小的比重,近期較大的比重,所以只能進行短期預測。很明顯,我們需要的就是他的優點,他的缺點我們又剛好可以避開參考文章
3.比較模塊
相同時間段內的實時數據與預測數據相比較,數據差在一定范圍內則代表正常
4.輸出模塊
在一個圖表上輸出兩條線,一條數預測數據,一條是實時數據,橫軸是時間,縱軸是數量
后補(做出來的示例效果圖):
注意事項:
清理臟數據:
如果某天帶有促銷活動,對訂單量的影響較大,則最好不要當做計算預測數據的參考數據,尤其是近期的數據
預測出來的數據和實際數據到底差值在多少范圍算正常,多少算不正常,這個一般因項目而異,但會有一個最終算法來解決
輸出模塊,可以考慮使用長連接,
原因1 : 是查看監控的用戶時內網用戶,同一時間一般就幾個人,所以服務器壓力不用考慮
原因2 : 實時性可以更好的,如果數據發送太快,使用短連接就會頻繁的三次握手四次揮手,太累
常見的預測算法
預測算法——指數平滑法
總結
- 上一篇: 流式计算storm核心组件介绍以及入门案
- 下一篇: 修改git历史提交的commit信息