000"){ sucCount. += v. count, } I); return {optCode:ags[;0], pr〇vCOde;ags[1 ], chGode:ags[2], .count: total, suc_courit ; sucCount ,. suc_rate: sucCount / tot a I } 執(zhí)行: r es = db. runCommand C{ mapreduce:'' op I nf o, map : m, reduce:r, out; w da 丨 I y - r ep:o r t "
[0174] I)
[0175] 內(nèi)存數(shù)據(jù)庫(kù)同樣基于MongoDB搭建,但是與分布式日志存儲(chǔ)子系統(tǒng)存儲(chǔ)于磁盤(pán)上 不同的是采用了 Li nux的Tmpfs內(nèi)存文件系統(tǒng)作為存儲(chǔ)空間。在Linux中Tmpfs同常規(guī) 的文件系統(tǒng)一樣,只是它完全位于內(nèi)存中,而MongoDB使用內(nèi)存應(yīng)射文件(memory-mapped file)來(lái)處理對(duì)磁盤(pán)文件中數(shù)據(jù)的讀寫(xiě)請(qǐng)求,并不對(duì)內(nèi)存和磁盤(pán)這兩者進(jìn)行區(qū)別對(duì)待,只是 將文件看作一個(gè)巨大的數(shù)組,然后按照字節(jié)為單位訪問(wèn)其中的數(shù)據(jù)剩下的都交由操作系統(tǒng) 自己去處理,所以MongoDB可以無(wú)需任何修改就能運(yùn)行于內(nèi)存之中。
[0176] 掛載 16G 的 Tmpfs :
[0177] mount-t tmpfs-o size = 16384m tmpfs/tmp
[0178] 使用MongoDB的Capped集合存放最近兩小時(shí)的日志數(shù)據(jù):
[0179] Capped集合是一種固定大小的集合,當(dāng)集合的大小達(dá)到指定大小時(shí),
[0180] 新數(shù)據(jù)會(huì)自動(dòng)覆蓋老的數(shù)據(jù),這樣就不必?fù)?dān)心日志會(huì)超出Tmpfs的大小,而且 Capped集合的數(shù)據(jù)存儲(chǔ)空間是提前分配的,因此擁有相比普通集合更高的性能。系統(tǒng)中使 用如下命令創(chuàng)建Capped集合:
[0181] db.createCollection(〃cappedLog {capped: true, size :6442450944});
[0182] 分布式日志系統(tǒng)對(duì)外接口使用HTTP協(xié)議,響應(yīng)數(shù)據(jù)為JSON格式。
[0183] 以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和 原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種構(gòu)建大數(shù)據(jù)分布式日志的方法,其特征在于,包括以下步驟: 步驟Sl,日志傳輸子系統(tǒng)從業(yè)務(wù)系統(tǒng)接收到日志數(shù)據(jù),并為每條接收到的所述日志數(shù) 據(jù)生成一個(gè)UUID標(biāo)識(shí),并將附帶UUID標(biāo)識(shí)的所述日志數(shù)據(jù)經(jīng)過(guò)負(fù)載均衡后經(jīng)過(guò)多個(gè)節(jié)點(diǎn) 發(fā)送給日志存儲(chǔ)子系統(tǒng); 步驟S2,日志存儲(chǔ)子系統(tǒng)接收所述日志數(shù)據(jù),通過(guò)水平擴(kuò)展的方式存儲(chǔ)所述日志數(shù) 據(jù); 步驟S3,批量日志處理子系統(tǒng)讀取存儲(chǔ)在所述日志存儲(chǔ)子系統(tǒng)中的所述日志數(shù)據(jù),并 采用MapReduce算法定時(shí)對(duì)所述日志數(shù)據(jù)進(jìn)行批量預(yù)處理,生成按小時(shí)報(bào)表和按天報(bào)表供 外部業(yè)務(wù)報(bào)表系統(tǒng)進(jìn)行查詢。2. 根據(jù)權(quán)利要求1所述的構(gòu)建大數(shù)據(jù)分布式日志的方法,其特征在于,步驟S2中,所述 水平擴(kuò)展的方式包括所述日志存儲(chǔ)子系統(tǒng)按照預(yù)設(shè)的數(shù)據(jù)分片規(guī)則將所述日志數(shù)據(jù)拆分, 并發(fā)送到多個(gè)主數(shù)據(jù)節(jié)點(diǎn),每個(gè)主數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)或多個(gè)從數(shù)據(jù)節(jié)點(diǎn),主數(shù)據(jù)節(jié)點(diǎn)將接 收到的所述日志數(shù)據(jù)備份到與其對(duì)應(yīng)的從數(shù)據(jù)節(jié)點(diǎn)中。3. 根據(jù)權(quán)利要求1所述的構(gòu)建大數(shù)據(jù)分布式日志的方法,其特征在于,步驟Sl中,所述 日志傳輸子系統(tǒng)還將附帶UUID標(biāo)識(shí)的所述日志數(shù)據(jù)經(jīng)過(guò)負(fù)載均衡后經(jīng)過(guò)多個(gè)節(jié)點(diǎn)實(shí)時(shí)發(fā) 送給內(nèi)存數(shù)據(jù)庫(kù); 所述內(nèi)存數(shù)據(jù)庫(kù)按照預(yù)設(shè)的數(shù)據(jù)分片規(guī)則將所述實(shí)時(shí)日志數(shù)據(jù)拆分,并發(fā)送到多個(gè)數(shù) 據(jù)庫(kù)點(diǎn)中進(jìn)行實(shí)時(shí)存儲(chǔ); 所述實(shí)時(shí)數(shù)據(jù)處理子系統(tǒng)讀取存儲(chǔ)在所述內(nèi)存數(shù)據(jù)庫(kù)中的所述實(shí)時(shí)日志數(shù)據(jù),并采用 MapReduce算法對(duì)所述實(shí)時(shí)日志數(shù)據(jù)進(jìn)行處理,生成實(shí)時(shí)報(bào)表供外部業(yè)務(wù)報(bào)表系統(tǒng)進(jìn)行查 詢。4. 根據(jù)權(quán)利要求1所述的構(gòu)建大數(shù)據(jù)分布式日志的方法,其特征在于,步驟S3中,所述 MapReduce算法包括映射任務(wù)和歸約任務(wù)。5. 根據(jù)權(quán)利要求1所述的構(gòu)建大數(shù)據(jù)分布式日志的方法,其特征在于,步驟S3中,所述 批量日志處理子系統(tǒng)能在緩存空間中緩存外部業(yè)務(wù)報(bào)表系統(tǒng)的查詢結(jié)果,并對(duì)緩存空間進(jìn) 行緩存淘汰。6. -種構(gòu)建大數(shù)據(jù)分布式日志的系統(tǒng),其特征在于,包括日志傳輸子系統(tǒng)、日志存儲(chǔ)子 系統(tǒng)、批量日志處理子系統(tǒng)、內(nèi)存數(shù)據(jù)庫(kù)和實(shí)時(shí)數(shù)據(jù)處理子系統(tǒng); 所述日志傳輸子系統(tǒng)用于從業(yè)務(wù)系統(tǒng)接收到日志數(shù)據(jù),并為每條接收到的所述日志數(shù) 據(jù)生成一個(gè)UUID標(biāo)識(shí),并將附帶UUID標(biāo)識(shí)的所述日志數(shù)據(jù)經(jīng)過(guò)負(fù)載均衡后經(jīng)過(guò)多個(gè)節(jié)點(diǎn) 發(fā)送給日志存儲(chǔ)子系統(tǒng)以及實(shí)時(shí)發(fā)送給所述內(nèi)存數(shù)據(jù)庫(kù); 所述日志存儲(chǔ)子系統(tǒng)用于接收所述日志數(shù)據(jù),通過(guò)水平擴(kuò)展的方式存儲(chǔ)所述日志數(shù) 據(jù); 所述批量日志處理子系統(tǒng)用于讀取存儲(chǔ)在所述日志存儲(chǔ)子系統(tǒng)中的所述日志數(shù)據(jù),并 采用MapReduce算法定時(shí)對(duì)所述日志數(shù)據(jù)進(jìn)行批量預(yù)處理,生成按小時(shí)報(bào)表和按天報(bào)表供 外部業(yè)務(wù)報(bào)表系統(tǒng)進(jìn)行查詢; 所述內(nèi)存數(shù)據(jù)庫(kù)用于將接收到的所述實(shí)時(shí)日志數(shù)據(jù)拆分,并發(fā)送到多個(gè)數(shù)據(jù)庫(kù)點(diǎn)中進(jìn) 行實(shí)時(shí)存儲(chǔ); 所述實(shí)時(shí)數(shù)據(jù)處理子系統(tǒng)用于讀取存儲(chǔ)在所述內(nèi)存數(shù)據(jù)庫(kù)中的所述實(shí)時(shí)日志數(shù)據(jù),并 采用MapReduce算法對(duì)所述實(shí)時(shí)日志數(shù)據(jù)進(jìn)行處理,生成實(shí)時(shí)報(bào)表供外部業(yè)務(wù)報(bào)表系統(tǒng)進(jìn) 行查詢。7. 根據(jù)權(quán)利要求6所述的構(gòu)建大數(shù)據(jù)分布式日志的系統(tǒng),其特征在于,所述日志傳輸 子系統(tǒng)包括日志傳輸客戶端、負(fù)載均衡器和日志接收服務(wù)器; 所述日志傳輸客戶端用于接收業(yè)務(wù)系統(tǒng)產(chǎn)生的所述日志數(shù)據(jù),并發(fā)送給所述日志接收 服務(wù)器;所述日志傳輸客戶端還包括一個(gè)UUID標(biāo)識(shí)生成單元,用于為每條接收到的所述日 志數(shù)據(jù)生成一個(gè)UUID標(biāo)識(shí); 所述日志接收服務(wù)器用于接收所述日志傳輸客戶端發(fā)送的所述日志數(shù)據(jù),所述日志接 收服務(wù)器包括多個(gè)節(jié)點(diǎn); 所述負(fù)載均衡器用于將所述日志接收服務(wù)器接收到的所述日志數(shù)據(jù)分配到所述日志 接收服務(wù)器的多個(gè)節(jié)點(diǎn)上,并通過(guò)所述多個(gè)節(jié)點(diǎn)將所述日志數(shù)據(jù)發(fā)送給所述日志存儲(chǔ)子系 統(tǒng)和所述內(nèi)存數(shù)據(jù)庫(kù)。8. 根據(jù)權(quán)利要求6所述的構(gòu)建大數(shù)據(jù)分布式日志的系統(tǒng),其特征在于,所述日志存儲(chǔ) 子系統(tǒng)包括第一數(shù)據(jù)分片路由器和多個(gè)主數(shù)據(jù)節(jié)點(diǎn)以及每個(gè)主數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的一個(gè)或多 個(gè)從數(shù)據(jù)節(jié)點(diǎn); 所述第一數(shù)據(jù)分片路由器用于按照預(yù)設(shè)的數(shù)據(jù)分片規(guī)則將所述日志存儲(chǔ)子系統(tǒng)接收 到的所述日志數(shù)據(jù)進(jìn)行拆分后發(fā)送到多個(gè)所述主數(shù)據(jù)節(jié)點(diǎn); 所述主數(shù)據(jù)節(jié)點(diǎn)用于存儲(chǔ)所述日志數(shù)據(jù);并將所述日志數(shù)據(jù)發(fā)送給所述從數(shù)據(jù)節(jié)點(diǎn); 所述從數(shù)據(jù)節(jié)點(diǎn)用于接收所述主數(shù)據(jù)節(jié)點(diǎn)發(fā)送的所述日志數(shù)據(jù)并進(jìn)行存儲(chǔ)備份。9. 根據(jù)權(quán)利要求6所述的構(gòu)建大數(shù)據(jù)分布式日志的系統(tǒng),其特征在于,所述批量日志 處理子系統(tǒng)包括第一 MapReduce任務(wù)管理單元、定時(shí)任務(wù)管理單元、按小時(shí)報(bào)表生成單元、 按天報(bào)表生成單元、第一數(shù)據(jù)查詢結(jié)果緩存單元和批量數(shù)據(jù)查詢接口; 所述第一 MapReduce任務(wù)管理單元用于采用MapReduce算法對(duì)所述批量日志處理子系 統(tǒng)讀取到的所述日志數(shù)據(jù)進(jìn)行批量預(yù)處理; 所述定時(shí)任務(wù)管理單元用于使所述MapReduce任務(wù)管理單元定時(shí)對(duì)所述批量日志處 理子系統(tǒng)讀取到的所述日志數(shù)據(jù)進(jìn)行批量預(yù)處理; 所述按小時(shí)報(bào)表生成單元用于根據(jù)所述MapReduce任務(wù)管理單元的預(yù)處理結(jié)果以每 小時(shí)為時(shí)間跨度生成按小時(shí)報(bào)表; 所述按天報(bào)表生成單元用于匯總所述按小時(shí)報(bào)表并生成按天報(bào)表; 所述第一數(shù)據(jù)查詢結(jié)果緩存單元用于將外部業(yè)務(wù)報(bào)表系統(tǒng)的查詢結(jié)果緩存在緩存空 間中,并對(duì)緩存空間進(jìn)行緩存淘汰; 所述批量數(shù)據(jù)查詢接口用于為外部業(yè)務(wù)報(bào)表系統(tǒng)提供查詢接口。10. 根據(jù)權(quán)利要求6所述的構(gòu)建大數(shù)據(jù)分布式日志的系統(tǒng),其特征在于,所述內(nèi)存數(shù)據(jù) 庫(kù)包括第二數(shù)據(jù)分片路由器和多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn); 所述第二數(shù)據(jù)分片路由器用于按照預(yù)設(shè)的數(shù)據(jù)分片規(guī)則將所述內(nèi)存數(shù)據(jù)庫(kù)接收到的 所述實(shí)時(shí)日志數(shù)據(jù)進(jìn)行拆分后發(fā)送到多個(gè)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn); 所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)用于存儲(chǔ)所述實(shí)時(shí)日志數(shù)據(jù); 所述實(shí)時(shí)數(shù)據(jù)處理子系統(tǒng)包括第二MapReduce任務(wù)管理單元、第二數(shù)據(jù)查詢結(jié)果緩存 單元和實(shí)時(shí)數(shù)據(jù)查詢接口; 所述第二MapReduce任務(wù)管理單元用于采用MapReduce算法對(duì)所述實(shí)時(shí)日志處理子系 統(tǒng)讀取到的所述日志數(shù)據(jù)進(jìn)行實(shí)時(shí)處理; 所述第二數(shù)據(jù)查詢結(jié)果緩存單元用于將外部業(yè)務(wù)報(bào)表系統(tǒng)的查詢結(jié)果緩存在緩存空 間中,并對(duì)緩存空間進(jìn)行緩存淘汰; 所述實(shí)時(shí)數(shù)據(jù)查詢接口用于為外部業(yè)務(wù)報(bào)表系統(tǒng)提供查詢接口。
【專利摘要】本發(fā)明涉及一種構(gòu)建大數(shù)據(jù)分布式日志的方法和系統(tǒng),包括步驟S1,日志傳輸子系統(tǒng)從業(yè)務(wù)系統(tǒng)接收到日志數(shù)據(jù),并為每條接收到的所述日志數(shù)據(jù)生成一個(gè)UUID標(biāo)識(shí),并將附帶UUID標(biāo)識(shí)的所述日志數(shù)據(jù)經(jīng)過(guò)負(fù)載均衡后經(jīng)過(guò)多個(gè)節(jié)點(diǎn)發(fā)送給日志存儲(chǔ)子系統(tǒng);步驟S2,日志存儲(chǔ)子系統(tǒng)接收所述日志數(shù)據(jù),通過(guò)水平擴(kuò)展的方式存儲(chǔ)所述日志數(shù)據(jù);步驟S3,批量日志處理子系統(tǒng)提取存儲(chǔ)在日志存儲(chǔ)子系統(tǒng)中的所述日志數(shù)據(jù),并采用MapReduce算法定時(shí)對(duì)所述日志數(shù)據(jù)進(jìn)行批量預(yù)處理,生成按小時(shí)報(bào)表和按天報(bào)表供外部業(yè)務(wù)報(bào)表系統(tǒng)進(jìn)行查詢。本發(fā)明能夠滿足大數(shù)據(jù)情況下對(duì)日志系統(tǒng)可靠性、實(shí)時(shí)性、高性能和高可擴(kuò)展性以及可維護(hù)性的要求。
【IPC分類】G06F17/30
【公開(kāi)號(hào)】CN105138615
【申請(qǐng)?zhí)枴緾N201510486223
【發(fā)明人】王萍末
【申請(qǐng)人】北京思特奇信息技術(shù)股份有限公司
【公開(kāi)日】2015年12月9日
【申請(qǐng)日】2015年8月10日