穩定性三十六計-歷史記錄


引子
半夜三點,睡夢中被一陣沒人接聽誓不罷休的電話鈴吵醒。睡眼惺忪的接聽了電話,電話那頭傳來了不用聽清任何人類語言就能感受的焦急。讓我趕快打開電腦,說服務整個不工作了!
打開監控看到線程池被打滿。本着“先恢復現場再排查原因”的基本原則,重啟並擴容了一倍的服務器。服務又正常了。完美的做到了“三分鍾定位,十分鍾解決”。但是現場不在了,怎么排查根因呢?答案是:歷史記錄。
 
為什么要做歷史記錄
歷史記錄是大數據的最重要數據源。通過歷史記錄可以進行事件追溯、未來預判和推薦。舉個例子:
靜兒在網上搜索了“穩定性三十六計”這個詞,找到自己想要的內容了。然后去做別的事情,再打開瀏覽器的時候,發現旁邊的小彈出框里推薦我《穩定性寶典》這本書。
這個推薦效果很多種算法都能實現,比如最近比較火的“協同過濾推薦算法(Collaborative Filtering Recommendation)”。啥是協同過濾推薦算法呢?協同過濾推薦算法簡而言之,就是找到相同興趣的群體,將這個群體中感興趣的其他信息推薦給用戶。
實施的時候可以先建立一個大表,X軸是所有的推薦內容,Y軸是所有的用戶。
然后我們將每個用戶感興趣的XY交叉點都標出來。如圖可以看到對“穩定性三十六計”感興趣的對“穩定性寶典”感興趣的概率也很高。
歷史記錄對於穩定性,也可以將其他同類系統作為用戶,將他們的問題作為推薦項進行協同過濾分析,找到自身的可優化點。系統出了問題需要分析原因時,事件追溯更是必不可少。
 
怎么做歷史記錄
日志
最常用的事件維度記錄是日志。有存於本地磁盤和集中式日志兩種。
本地磁盤日志就是將日志在程序中控制直接寫入本地磁盤。
集中式日志的架構大同小異,基本結構如下:
  • 采集器負責采集數據,並發送給收集器。
  • 收集器負責收集采集器發送過來的數據,並定時寫入集群。
  • 存儲中心負責對數據分類、排序、去重,把同類型的數據合並。
  • 分析和可視化平台負責數據的展示。
以下是常用的數據收集系統的比較
 
產品 公司 優勢 劣勢
Flume NG Cloundera
1.支持故障轉移和負載均衡
2.容易水平擴展
3.社區活躍、文檔豐富
4.依賴第三方類庫少
5.通過事務保證數據一致性
6.支持多種存儲
1.需要自己實現客戶端代碼
2.對數據的過濾能力差
Scribe Facebook
1.具有很高的容錯性
2.支持水平擴展
1.依賴zookeeper或Hash等工具
2.需要自己實現客戶端代碼
3.社區活躍度低、文檔少
3.依賴第三方庫多
4.部署復雜
5.存儲系統類型少
6.數據過濾解析能力差
7.官方已經停止更新和維護
Chukwa Apache
1.高可靠
2.易擴展
3.社區活躍度較高
4.文檔資料豐富
1.依賴hadoop
ELK Elasic.co
1.提供完整的解決方案
2.支持集群部署和水平擴展
3.社區活躍度高、文檔豐富
4.部署簡單
1.占用資源比較高
ELK不是一款軟件,而是Elasticsearch、Logstash和Kibana首字母的縮寫。這三者是開源軟件,通常配合一起使用。而且先后歸於Elasic.co公司的名下,所以簡稱ELK Stack。根據Google Trend的信息顯示,ELK已經成為目前最流行的集中式日志解決方案。
 
Nosql
除了日志,任何有價值的歷史信息都是應該存儲起來做分析的。這時候存儲就是關鍵。因為數據量大,對強一致性沒有苛刻的要求。所以從成本上傳統的關系型數據庫不是首選。一般選擇Nosql數據庫。Nosql數據庫主要有四類:
1.key-value數據庫
 
項目 說明
典型應用場景 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日志系統
數據模型 Key指向Value的鍵值對,通常用hash table實現
強項 查找速度快
弱項 數據無結構,通常被當做字符串或者二進制數據
例子 Redis、Memcached
2.列式數據庫
項目 說明
典型應用場景 分布式的文件系統
數據模型 以列簇式存儲,將統一列數據存在一起
強項 查找速度快,可擴展性強,更容易進行分布式擴展
弱項 功能相對局限
例子 Cassandra、HBase
3.文檔型數據庫
項目 說明
典型應用場景 Web應用,Value是結構化的,容易被解析
數據模型 KeyValue的鍵值對,Value為結構化數據
強項 數據結構要求不嚴格,表結構可變、不需要預先定義表結構
弱項 查詢性能不高,缺乏統一的查詢語法
例子 CouchDB、MongoDB、Elasticsearch
4.圖結構數據庫
項目 說明
典型應用場景 社交網絡,推薦系統等。專注於構建關系圖譜
數據模型 圖結構
強項 利用圖結構相關算法,比如最短路徑尋址,N讀關系查找等
弱項 需要再次計算出所需信息,不容易做分布式集群方案
例子 Neo4j、InfoGrid、Infinite Graph
 
時序數據庫
時序數據庫全稱為時間序列數據庫。時間序列數據庫主要用於指處理帶時間標簽的數據。帶時間標簽的數據也稱為時間序列數據。
基於時間序列數據的特點,關系型數據庫無法滿足對時間序列數據的有效存儲與處理,因此迫切需要一種專門針對時間序列數據來做優化的數據庫系統,即時間序列數據庫。
目前行業內比較流行的開源時序數據庫產品對比如下:
 
  InfluxData Prometheus Graphite OpenTSDB
數據模型 labels labels dot-separated label
按時間分段管理數據 ✔️ ✔️ ✔️ 手動
分布式 ✔️商業版 單機 單機 ✔️
聚合分析
權限管理 ✔️商業版 × × ×
接口 類SQL REST REST REST
社區生態 +++ ++ ++ ++
時間序列分析
抽取日志指標 × × × ×
Rollup ✔️ × ✔️ ×
 
總結
Talk is cheap, show me the data! 
 

推薦閱讀

 

關於作者

一線開發十二年,有日本東京和美國硅谷研發經驗。有百余項技術發明專利,目前任美團點評技術專家。有自己的技術公眾號「編程一生」。如果您在閱讀本書時有什么疑問或者發現本書的錯誤,歡迎在公眾號里給我留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM