您好,登錄后才能下訂單哦!
微信支付萬億日志在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中的實踐是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。