導語 | 微信支付日誌系統利用 Hermes 來實現日誌的全文檢索功能,自從接入以來,日誌量持續增加。目前單日入庫日誌量已經突破萬億級,單集羣日入庫規模也已經突破了萬億,存儲規模達 PB 級。本文將介紹微信支付日誌系統在 Hermes 上的實踐,但願與你們一同交流。文章做者:宋新村,騰訊大數據高級運維工程師。微信
目前微信支付日誌單日最大入庫總量已達到萬億級,單日入庫存儲量達 PB 級,而在春節等重大節假日預計整個日入庫規模會有進一步的增加。架構
微信支付日誌業務採用的 Hermes 集羣,單集羣日入庫規模也已經突破了萬億級天天,節點部署有二百多臺,單集羣存儲總量達到 PB 級。另外,天天的檢索查詢併發在 6000 左右:併發
在如此海量日誌存儲規模下,整個微信支付日誌查詢 SLA 達到了 4 個 9,95% 的耗時小於 5s。運維
Hermes 底層存儲採用 HDFS 來實現,全部的存儲相關的策略都由專業的 HDFS 的能力來提供,包括:異步
日誌默認存儲 2 副本容災,針對歷史數據能夠靈活的下降副原本減小存儲成本,而針對很是重要的日誌數據也能夠靈活的增長副原本提升數據容災能力。性能
單磁盤或單機故障 HDFS 可自動遷移副本,整個容錯過程對上層計算層透明。大數據
利用 HDFS 提供的異構存儲能力,結合 Hermes 自己的按天分區存儲,能夠很是方便的實現數據的冷熱分級。冷熱分級後的數據對上層業務透明,業務無需關注數據自己的存儲狀況微信支付
HDFS 3.0 版本以後支持 EC 編碼,進一步下降存儲成本,目前暫時未在線上實踐。編碼
經過採用這種存算分離的架構,一方面能夠簡化上層的計算層的設計;另外一方面計算層計算索引的時候只需計算單份便可實現多副本容災,從而極大的減小計算層的 CPU、內存資源消耗,使得寫入 QPS 成倍提高。設計
Hermes 自己採用類 LSM 的數據寫入模式,數據先寫入內存+WAL,積累到必定數量後再批量刷寫到 HDFS 進行持久化存儲。節點故障時,系統經過回滾 WAL 進行數據恢復,從而確保整個寫入爲高效的順序寫入。
這種高效的寫入方式帶來的一個問題就是:隨着數據的不斷刷寫,會產生大量的小的索引,從而對查詢和 HDFS 存儲形成較大的壓力。
Hermes 自己會不斷的對小的索引進行合併,下降索引文件的個數;而在夜間低峯期,咱們也會對歷史的分區數據進行一次較大的合併粒度,從而儘量的提升整個系統的查詢效率。微信支付業務的合併時間點選取的是凌晨 2~6 點,避開了凌晨 0~1 點的除夕紅包高峯。
日誌等業務場景的一個重要的特色就是:先按照分詞+字段信息進行檢索,而後拉取完整的一整行日誌進行分析。
針對這種場景,傳統的列存每每存在行存信息獲取效率較低,而索引和數據混存又會存在合併索引時讀寫 IO 放大嚴重的問題。
爲此,Hermes 除了會對日誌進行分詞構建索引以外,還能夠額外配置存儲一份完整的日誌行存信息:
如上圖所示,經過將索引和數據分離存儲,索引目錄裏只存儲倒排索引,行數據裏同一個分片裏每一個索引目錄相應的行數據。經過每一個索引目錄的 Offset 和 RowId,在 RowData 中讀取結果數據。
經過索引和數據的分離,索引目錄刷盤次數和個數下降 68%,內存使用量下降 70%,磁盤使用量下降 14%,檢索性能提高 80%。
微信支付 90% 的日誌模塊都是數據量很是小的長尾模塊。所以適當的引入一些高性能的 SSD 設備來加速這些存儲較小的業務的查詢是很是合適的,而爲了能夠儘量的減小 SSD 的成本,須要對業務的數據進行冷熱分級。
Hermes 自己的數據冷熱分級是利用 HDFS 的異構存儲能力來實現的,經過配置不一樣的副本放置策略,能夠靈活的指定副本使用的存儲類型,而整個過程對上層業務透明。
HDFS 異構存儲策略以下所示:
HDFS 異構存儲在 Hermes 中的實踐:
Hermes 底層存儲採用 HDFS 多副原本進行數據容災,通常默認會存儲兩副本。目前微信支付的日誌最長的保存週期爲 30 天,存儲數據量很是大。
爲了儘量的下降業務的存儲成本,在同業務協商溝通以後,瞭解到通常三天以前的日誌的查詢需求很低,對於日誌的穩定性能夠下降一些,所以 Hermes 運維側直接對三天前的數據進行例行降副本操做,從而使得整個存儲的成本直接下降 70% 以上,整個降副本操做對上層計算層和業務層都是透明的,業務對此沒有任何感知。
微信支付的同事常常會有批量導出指定時間段的命中某些關鍵詞的日誌的需求:
爲此 Hermes 提供批量異步導出日誌到 HDFS 等存儲介質的功能,用戶提交導出請求後,系統會把全部命中的日誌導出一份到 TDW HDFS 上面,用戶再用 TDW HDFS 客戶端或者經過 Hermes 的接口機拖走就行。
TDW HDFS 上面用戶的日誌導出文件:
微信支付接入 Hermes 以來,日誌量規模從最初的百億規模增加至如今的萬億級規模,對整個 Hermes 自己的存儲能力、擴展能力、容災能力和資源規劃能力都持續提出挑戰。
好在 Hermes 自己優秀的存儲架構使得能夠在海量業務數據規模下靈活的對業務的數據進行翻轉騰挪,從而從容的應對業務持續提出的各類挑戰。