溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

發(fā)布時(shí)間:2022-01-12 16:43:14 來(lái)源:億速云 閱讀:119 作者:柒染 欄目:云計(jì)算

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。


一、業(yè)務(wù)規(guī)模

目前微信支付日志單日最大入庫(kù)總量已達(dá)到萬(wàn)億級(jí),單日入庫(kù)存儲(chǔ)量達(dá) PB 級(jí),而在春節(jié)等重大節(jié)假日預(yù)計(jì)整個(gè)日入庫(kù)規(guī)模會(huì)有進(jìn)一步的增長(zhǎng)。

微信支付日志業(yè)務(wù)采用的 Hermes 集群,單集群日入庫(kù)規(guī)模也已經(jīng)突破了萬(wàn)億級(jí)每天,節(jié)點(diǎn)部署有二百多臺(tái),單集群存儲(chǔ)總量達(dá)到 PB 級(jí)。另外,每天的檢索查詢并發(fā)在 6000 左右:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

在如此海量日志存儲(chǔ)規(guī)模下,整個(gè)微信支付日志查詢 SLA 達(dá)到了 4 個(gè) 9,95% 的耗時(shí)小于 5s。

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

二、存算分離

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

Hermes 底層存儲(chǔ)采用 HDFS 來(lái)實(shí)現(xiàn),所有的存儲(chǔ)相關(guān)的策略都由專業(yè)的 HDFS 的能力來(lái)提供,包括:

1. 數(shù)據(jù)多副本容災(zāi)


日志默認(rèn)存儲(chǔ) 2 副本容災(zāi),針對(duì)歷史數(shù)據(jù)可以靈活的降低副本來(lái)減少存儲(chǔ)成本,而針對(duì)非常重要的日志數(shù)據(jù)也可以靈活的增加副本來(lái)提高數(shù)據(jù)容災(zāi)能力。

2. 磁盤故障容錯(cuò)

單磁盤或單機(jī)故障 HDFS 可自動(dòng)遷移副本,整個(gè)容錯(cuò)過(guò)程對(duì)上層計(jì)算層透明。

3. 冷熱分級(jí)

利用 HDFS 提供的異構(gòu)存儲(chǔ)能力,結(jié)合 Hermes 本身的按天分區(qū)存儲(chǔ),可以非常方便的實(shí)現(xiàn)數(shù)據(jù)的冷熱分級(jí)。冷熱分級(jí)后的數(shù)據(jù)對(duì)上層業(yè)務(wù)透明,業(yè)務(wù)無(wú)需關(guān)注數(shù)據(jù)本身的存儲(chǔ)情況

4. EC編碼


HDFS 3.0 版本之后支持 EC 編碼,進(jìn)一步降低存儲(chǔ)成本,目前暫時(shí)未在線上實(shí)踐。

通過(guò)采用這種存算分離的架構(gòu),一方面可以簡(jiǎn)化上層的計(jì)算層的設(shè)計(jì);另一方面計(jì)算層計(jì)算索引的時(shí)候只需計(jì)算單份即可實(shí)現(xiàn)多副本容災(zāi),從而極大的減少計(jì)算層的 CPU、內(nèi)存資源消耗,使得寫入 QPS 成倍提升。

三、異步索引合并

Hermes 本身采用類 LSM 的數(shù)據(jù)寫入模式,數(shù)據(jù)先寫入內(nèi)存+WAL,積累到一定數(shù)量后再批量刷寫到 HDFS 進(jìn)行持久化存儲(chǔ)。節(jié)點(diǎn)故障時(shí),系統(tǒng)通過(guò)回滾 WAL 進(jìn)行數(shù)據(jù)恢復(fù),從而確保整個(gè)寫入為高效的順序?qū)懭搿?/p>

這種高效的寫入方式帶來(lái)的一個(gè)問(wèn)題就是:隨著數(shù)據(jù)的不斷刷寫,會(huì)產(chǎn)生大量的小的索引,從而對(duì)查詢和 HDFS 存儲(chǔ)造成較大的壓力。

Hermes 本身會(huì)不斷的對(duì)小的索引進(jìn)行合并,降低索引文件的個(gè)數(shù);而在夜間低峰期,我們也會(huì)對(duì)歷史的分區(qū)數(shù)據(jù)進(jìn)行一次較大的合并粒度,從而盡可能的提高整個(gè)系統(tǒng)的查詢效率。微信支付業(yè)務(wù)的合并時(shí)間點(diǎn)選取的是凌晨 2~6 點(diǎn),避開(kāi)了凌晨 0~1 點(diǎn)的除夕紅包高峰。

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

四、索引與數(shù)據(jù)分離

日志等業(yè)務(wù)場(chǎng)景的一個(gè)重要的特點(diǎn)就是:先按照分詞+字段信息進(jìn)行檢索,然后拉取完整的一整行日志進(jìn)行分析。

針對(duì)這種場(chǎng)景,傳統(tǒng)的列存往往存在行存信息獲取效率較低,而索引和數(shù)據(jù)混存又會(huì)存在合并索引時(shí)讀寫 IO 放大嚴(yán)重的問(wèn)題。

為此,Hermes 除了會(huì)對(duì)日志進(jìn)行分詞構(gòu)建索引之外,還可以額外配置存儲(chǔ)一份完整的日志行存信息:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

如上圖所示,通過(guò)將索引和數(shù)據(jù)分離存儲(chǔ),索引目錄里只存儲(chǔ)倒排索引,行數(shù)據(jù)里同一個(gè)分片里每個(gè)索引目錄相應(yīng)的行數(shù)據(jù)。通過(guò)每個(gè)索引目錄的 Offset 和 RowId,在 RowData 中讀取結(jié)果數(shù)據(jù)。

通過(guò)索引和數(shù)據(jù)的分離,索引目錄刷盤次數(shù)和個(gè)數(shù)降低 68%,內(nèi)存使用量降低 70%,磁盤使用量降低 14%,檢索性能提升 80%。

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

五、存儲(chǔ)冷熱分級(jí)

微信支付 90% 的日志模塊都是數(shù)據(jù)量非常小的長(zhǎng)尾模塊。因此適當(dāng)?shù)囊胍恍└咝阅艿?SSD 設(shè)備來(lái)加速這些存儲(chǔ)較小的業(yè)務(wù)的查詢是非常合適的,而為了可以盡可能的減少 SSD 的成本,需要對(duì)業(yè)務(wù)的數(shù)據(jù)進(jìn)行冷熱分級(jí)。

Hermes 本身的數(shù)據(jù)冷熱分級(jí)是利用 HDFS 的異構(gòu)存儲(chǔ)能力來(lái)實(shí)現(xiàn)的,通過(guò)配置不同的副本放置策略,可以靈活的指定副本使用的存儲(chǔ)類型,而整個(gè)過(guò)程對(duì)上層業(yè)務(wù)透明。
 

HDFS 異構(gòu)存儲(chǔ)策略如下所示:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

HDFS 異構(gòu)存儲(chǔ)在 Hermes 中的實(shí)踐:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

六、歷史分區(qū)副本降級(jí)

Hermes 底層存儲(chǔ)采用 HDFS 多副本來(lái)進(jìn)行數(shù)據(jù)容災(zāi),一般默認(rèn)會(huì)存儲(chǔ)兩副本。目前微信支付的日志最長(zhǎng)的保存周期為 30 天,存儲(chǔ)數(shù)據(jù)量非常大。

為了盡可能的降低業(yè)務(wù)的存儲(chǔ)成本,在同業(yè)務(wù)協(xié)商溝通之后,了解到一般三天之前的日志的查詢需求很低,對(duì)于日志的穩(wěn)定性可以降低一些,因此 Hermes 運(yùn)維側(cè)直接對(duì)三天前的數(shù)據(jù)進(jìn)行例行降副本操作,從而使得整個(gè)存儲(chǔ)的成本直接降低 70% 以上,整個(gè)降副本操作對(duì)上層計(jì)算層和業(yè)務(wù)層都是透明的,業(yè)務(wù)對(duì)此沒(méi)有任何感知。

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

七、日志批量導(dǎo)出

微信支付的同事經(jīng)常會(huì)有批量導(dǎo)出指定時(shí)間段的命中某些關(guān)鍵詞的日志的需求:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

為此 Hermes 提供批量異步導(dǎo)出日志到 HDFS 等存儲(chǔ)介質(zhì)的功能,用戶提交導(dǎo)出請(qǐng)求后,系統(tǒng)會(huì)把所有命中的日志導(dǎo)出一份到 TDW HDFS 上面,用戶再用 TDW HDFS 客戶端或者通過(guò) Hermes 的接口機(jī)拖走就行。


TDW HDFS 上面用戶的日志導(dǎo)出文件:

微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的

關(guān)于微信支付萬(wàn)億日志在Hermes中的實(shí)踐是怎樣的問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI