下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、任務(wù)就是要完成一個(gè)日志分析應(yīng)用。需求沒有很明確,只是要有這么一個(gè)東西能夠滿足分析收集后的日志,將分析后的原始數(shù)據(jù)入庫,作為后期分析和統(tǒng)計(jì)使用。在動手做之前,我還是給這個(gè)應(yīng)用作了最基本的需求定義:靈活配置(輸入源,輸出目標(biāo),分析器的實(shí)現(xiàn)等),高效(并行任務(wù)分解)。就這兩點(diǎn)能夠做到,那么將來需求如何變化都可以適應(yīng)。Tiger的Concurrent包是滿足后面那項(xiàng)最好的實(shí)現(xiàn),里面的線程池,異步服務(wù)調(diào)用,并發(fā)控制都能夠極好的完成并行任務(wù)分解的工作。J2SE7的Concurrent包中將會增加fork-join風(fēng)格的并行分解庫,其實(shí)這個(gè)是更細(xì)粒度的任務(wù)分解,同時(shí)能夠在當(dāng)前多CPU的情況下提高執(zhí)行效率,充
2、分利用CPU的一種實(shí)現(xiàn)。背景:由于服務(wù)路由應(yīng)用訪問量十分大,即時(shí)的將訪問記錄入庫對于路由應(yīng)用本身以及數(shù)據(jù)庫來說無疑都會產(chǎn)生很大的壓力和影響。因此考慮首先將訪問信息通過10g4j記錄在本地(當(dāng)然自己需要定制一下Log4j的Appender和Filter),然后通過服務(wù)器的定時(shí)任務(wù)腳本來將日志集中到日志分析應(yīng)用所在的機(jī)器上(這里通過配置可以決定日志是根據(jù)什么時(shí)間間隔來產(chǎn)生新文件)。日志分析應(yīng)用就比較單純的讀取日志,分析日志,輸出分析結(jié)果(包括寫入數(shù)據(jù)庫或者是將即時(shí)統(tǒng)計(jì)信息存入到集中式緩存Memcached中)。網(wǎng)絡(luò)結(jié)構(gòu)圖如下:00Concurrent概述:看Java的Doc很容易就理解了Concu
3、rrent,這里我只是大致的說一下幾個(gè)自己在應(yīng)用中使用的接口:BlockingQueue:看看名字就知道了,阻塞式隊(duì)列,可以設(shè)置大小。適合于生產(chǎn)者和消費(fèi)者模式,生產(chǎn)者在隊(duì)列滿時(shí)阻塞,消費(fèi)者在隊(duì)列空時(shí)阻塞。在日志分析應(yīng)用開發(fā)中被用于分析任務(wù)(生產(chǎn)者)和輸出任務(wù)(消費(fèi)者)之間的分析結(jié)果存儲通道。Callable:任何需要執(zhí)行的任務(wù)都可以定義成Callable,類似于線程的Runnable接口,可以被ServiceExecutor指派給內(nèi)部的線程異步執(zhí)行,并且返回對象或者拋出異常。在日志分析應(yīng)用開發(fā)中,非定時(shí)性的任務(wù)都定義成為此類型。ConcurrentMap:這個(gè)以前常常使用,因?yàn)樾室h(yuǎn)遠(yuǎn)高于C
4、ollections.synchronizedCollection和synchronized。后面還會提到實(shí)踐中的幾個(gè)實(shí)用的技巧來防止在高并發(fā)的情況下出現(xiàn)問題。在日志分析應(yīng)用中,此類型的Map作為保存日志文件分析狀態(tài)的緩存(日志文件分為兩種狀態(tài):分析中,分析結(jié)束。如果不存在于Map中就認(rèn)為尚未分析,那么將其納入Map然后啟動分析處理線程工作,如果存在于Map中標(biāo)示為分析中,那么將不會再分析此文件,如果分析結(jié)束并且被輸出,將會標(biāo)示此文件分析結(jié)束,異步清理線程將會定時(shí)根據(jù)策略刪除或移動文件)ExecutorService:內(nèi)置線程池,異步執(zhí)行指派任務(wù),并可以根據(jù)返回的Future來跟蹤執(zhí)行情況。在
5、日志分析應(yīng)用開發(fā)中,被用于非定時(shí)性任務(wù)執(zhí)行。ScheduledExecutorService:內(nèi)置線程池,定時(shí)異步執(zhí)行指派任務(wù),并可以根據(jù)返回的Future來跟蹤執(zhí)行情況。在日志分析應(yīng)用開發(fā)中,被用于定時(shí)性任務(wù)執(zhí)行。以上就是被使用到的接口,具體實(shí)現(xiàn)策略配置就不在此贅述了。整體結(jié)構(gòu)設(shè)計(jì):整體設(shè)計(jì)還是基于開始設(shè)定的兩個(gè)原則靈活配置,高效性(任務(wù)分解,并行流水線執(zhí)行)。說到任務(wù)分解又會想起讀書時(shí)候的離散數(shù)學(xué)中關(guān)鍵路徑等等。任務(wù)分解還是要根據(jù)具體情況來分析和設(shè)計(jì),不然并行不但不會提高效率,反而還降低了處理效率。就日志分析來看,主要的處理過程可以分成這么幾個(gè)任務(wù):1. 檢查日志來源目錄,鎖定需要分析的文
6、件。(執(zhí)行需要時(shí)間很短,可通過定時(shí)間隔執(zhí)行)。2. 分析已經(jīng)被鎖定的日志文件,產(chǎn)生分析結(jié)果。(執(zhí)行需要時(shí)間根據(jù)日志文件大小來決定,因此需要線程異步執(zhí)行,結(jié)果根據(jù)設(shè)定拆分成細(xì)粒度包,降低輸出線程等待時(shí)間)。3. 檢查分析結(jié)果隊(duì)列。(執(zhí)行需要時(shí)間很短,當(dāng)前是配置了SingleThreadExecutor來執(zhí)行檢查阻塞隊(duì)列的工作,同時(shí)獲取到分析結(jié)果包以后立刻創(chuàng)建線程來執(zhí)行輸出任務(wù))4. 輸出分析結(jié)果,如果輸出成功,將分析過的日志文件在日志文件狀態(tài)緩存中的狀態(tài)更新為已分析。(執(zhí)行時(shí)間根據(jù)輸出情況來定,當(dāng)前實(shí)現(xiàn)的是批量輸出到數(shù)據(jù)庫中,根據(jù)配置來批量提交入庫,后續(xù)還會考慮實(shí)時(shí)統(tǒng)計(jì)到集中式Cache作為監(jiān)控
7、使用)。5. 清理分析日志文件。(執(zhí)行時(shí)間較短,根據(jù)策略并且清除設(shè)定了定時(shí)線程池執(zhí)行清理任務(wù),配置來執(zhí)行清理和移動文件任務(wù),在日志文件狀態(tài)緩存中的信息)根據(jù)上面的分解可以看到,其實(shí)在單線程工作的過程中,容易造成阻塞而影響性能的主要是讀取,分析和寫出這三個(gè)過程的協(xié)調(diào),一個(gè)一個(gè)讀取分析和寫出,性能一定低于讀取和分析并行工作,而分析完畢才寫出,性能一定低于分析部分,寫出部分。同時(shí)由于細(xì)分各個(gè)任務(wù),因此任務(wù)與任務(wù)之間的耦合度降低,可以運(yùn)行期獲取具體的任務(wù)實(shí)現(xiàn)配置,達(dá)到靈活配置的目的。卜面就具體的看看整個(gè)流程,以及其中的一些細(xì)節(jié)的說明,這里根據(jù)下圖中的序號來逐描述:1. 配置了ScheduleExecu
8、tor來檢查日志所屬目錄中的日志文件,Executor的線程池大小以及檢查時(shí)間間隔都根據(jù)配置來設(shè)Tip:定時(shí)任務(wù)可以設(shè)置delay時(shí)間,那么可以根據(jù)你的任務(wù)數(shù)量以及時(shí)間間隔來設(shè)定每一個(gè)任務(wù)的delay時(shí)間,均勻的將這些任務(wù)分布,提高效率。2. 當(dāng)ReadSchedule被執(zhí)行時(shí),將會去檢查AnalysisLogFileStateConcurrentCache(也就是上面提到的ConcurrentMap)中是否存在此文件,如果不存在證明尚未分析,需要將其置入Cache,如果已經(jīng)存在就去查詢其他文件。Tip:這里用了一點(diǎn)小技巧,通常我們對于此類操作應(yīng)該做兩部分工作,get然后再put,但是這樣可能
9、就會在高并發(fā)的情況下出現(xiàn)問題,因?yàn)檫@兩個(gè)操作不是一個(gè)原子操作。ConcurrentMap提供了putIfAbsent操作,這個(gè)操作意思就是說如果需要put的key沒有存在于Map中,那么將會把key,value存入,并且返回null,如果已經(jīng)存在了key那么就返回key在map已經(jīng)對應(yīng)的值。通過if(resources.putIfAbsent(filename,Constants.FILE_STATUS_ANALYSISING)=null)就可以把兩個(gè)操作合并成為一個(gè)操作。3. 日志讀取的工作線程完成鎖定文件以后,就將后續(xù)的工作交給LogAnalysisServiceExecutor來創(chuàng)建分析
10、任務(wù)異步執(zhí)行分析操作,日志讀取工作線程任務(wù)就此完成。4. LogAnalysisSchedule是運(yùn)行期裝載具體的接口實(shí)現(xiàn)類(采用的就是類似于JAXP等框架使用的META-INF/services來讀取工廠類,載入接口實(shí)現(xiàn))。AnalysisSchedule執(zhí)行的主要任務(wù)就是分析文件,并且根據(jù)配置將分析結(jié)果拆分并串行的置入到BlockQueue中,提供給輸出線程使用。Write5. Receiver主要工作就是守候著BlockQueue,當(dāng)有數(shù)據(jù)結(jié)果產(chǎn)生就創(chuàng)建Schedule來異步執(zhí)行輸出。6. LogWriterServiceExecutor根據(jù)配置來決定內(nèi)置線程池大小,同時(shí)在Receive
11、r獲取到數(shù)據(jù)包時(shí)產(chǎn)生WriteSchedule來異步執(zhí)行輸出工作。7. WriteSchedule和AnalysisSchedule一樣可以運(yùn)行期裝載接口實(shí)現(xiàn)類,這樣提供了靈活的輸出策略配置。Tips:在數(shù)據(jù)庫輸出的時(shí)候需要配置批量提交記錄最大數(shù),分批提交提高性能,也防止過大結(jié)果集批量提交問題。8. 寫出完成以后需要更新鎖定文件的狀態(tài),標(biāo)示成為已經(jīng)分析成功。這里還遺留一點(diǎn)問題,在一個(gè)日志文件分包的過程中每一個(gè)包都回記錄隸屬于哪一個(gè)分析文件,文件的最后一個(gè)數(shù)據(jù)包將會被標(biāo)示。在輸出成功以后會去檢查哪些包是文件最后數(shù)據(jù)包,更新此文件為已分析成功,如果出現(xiàn)異常,那么將會把這些文件狀態(tài)清除,接受下一次的
12、重新分析。這里一個(gè)文件部分包提交暫時(shí)沒有做到事務(wù)一致,如果出現(xiàn)部分成功可能會重復(fù)分析和記錄。9. 最后就是CleanSchedule被定時(shí)執(zhí)行,根據(jù)策略來刪除或者移動已經(jīng)被分析過的文件。Tips:ScheduledExecutorService內(nèi)部可以配置線程池,當(dāng)執(zhí)行定時(shí)任務(wù)比較耗時(shí),線程池中的線程都被占用的情況下,定時(shí)任務(wù)將不會準(zhǔn)確的按時(shí)執(zhí)行,因此設(shè)計(jì)過程中需要注意的是,定時(shí)任務(wù)一般是簡短的工作任務(wù),如果比較耗時(shí),那么應(yīng)該結(jié)合ScheduledExecutorService和ExecutorService,定時(shí)任務(wù)完成必要工作以后將耗時(shí)工作轉(zhuǎn)交給ExecutorService創(chuàng)建的即時(shí)執(zhí)行
13、異步線程去處理,保證ScheduleExecutor正常工作。IdLOQ用NmuAj:hrVecsloo:Cc4tdUdite:LeuAnsl/zctocngnHtu1020004221D.3C19330942215:5:16SarvieaAccxtLo?4T1:radL。:LeacVockerF”1Q3LogXatdFv,Et”2re2rdscslQficgfile彘icnndatruntime3:zem1,乎L0sAmxLysistferkerTooliceluVc.rLXicol5ic9?iL)3ATialyzizScrv:cIxecuUi4:jdd叫力。3t=uftp,ordVIacc
14、ount:lnt10D- redC“cMntarvjIintB60- residerihirtidCount;mt=10wuritarTIhroadC口uni:iE:=方- cleanErThreadCount:int=2- chanErChedcInterval:int=1O.5cM如、Txag/uMuGxE,3,Mq);vld*X5CQC1sL”弋Jgicw;V.I4*iurO:i,4,HJ4D:vM=true-dbconrmitWaxCount:int=20IT1IrLoaAnsivzerL-宦目aLeg-LggFn城giotL1helpsrLogAnalyzsrHeIper*un0iu
15、oid+:爐&d+郵0:i/加id+EHnlSbincm竄jidL一IT1LLoOnal/zeirHelper,L-wi電工Lg-L、F目七:oryg屯1tL.- SohidulelExtcutoc號ervice- jdjilyaHtrezExaut4r4vi4- QrsuniinExscytsrSiwvice- wui艇際Ex?utorS與rvi依- clejnes:ScheduIedElxecutorServoc-e- writerRssourceQuee:LinkedBlocking3ueuaAiTialiysisResult- res*urc4S:Concur悟nt卜astiMpSbi
16、ng.Inleg生a-contig:L4gAnHyzerCcinfis-rjJhdlcir:chodijIcdFMtuPfl*?()-corsumtuHindler;Futjr-cleanHandl&rSGhedniedFuture(Q*gelJRei-ci,dMaC-ii7lini0L.I111+sdReerdM覺ountdrB:iraid+gatRajdChtcklntinrilQ:int+7eiRecdCiigekintevdl(iint):vqideEP4jdairThr&aduiritQiint+seiRecderThreadCciuriHinit):void+gelWrrierTh
17、readlCount):initWriterTlireddlCuunbin0.valcl*elCI&dnrThiejdCoun10:ini+sttC11inaiThutidCounlOirt):void+getcIejnerChecfclnterraIQ:iniIajnaiCh4delntara:voiid+geERerouirceQueubSizeiQiint+寶ER電的uttiSiQu蟲u電君:voidglAiiTln-ddCuikiibCv-Im+iiO:Shin.。+5eiL。gFileDiSiring口J:vQid*tsDeIAftocin3lysisQn+seiDeNteAfteA
18、nalysiboclean):i/oid+gefcSackupDiii:SliingT:Bd1MUp&ItillIIj).J0|iC3+goiDbeemrnitMu10iMf可。b8mmitMurHj府);void上面的類圖中主要描述的就是日志分析應(yīng)用的三個(gè)主類:類似于控制臺的LogAnalyzer具體內(nèi)部資源管理類,配置類。(T表示采用泛型)了I-Io.LopFcto?qe?L thesouiueORij*Ler如oGcgQue.93Mlmf,gT, 31g-configLogAn*,orCor ifaiftaMUrcQuulinbdBiado*gCMeueAn4loroMalt)vad B
19、*ITY9#“uIT” 信*,vid wnO:ui,Awn、e、&anjIBiOTd alSNQ”須)g,Cg.uoMr3RN,3R皿一心.觸:.a3,/F,uitC0)9c。曲.Loa句QlC-cC。9ewviiM.Cxo8sXMWSMgsRs/AdvlTpO.8.liv):*0IOxtcn”dL*“vzeVac,g:rXtHHhMjp,ELOIMC8力:OR&enMzh3rKoivyc-toit-jg,ZD:vad0小田劃,1。*5226田3時(shí)”CMTMSGlPe”BgW”3d/aD.ScKfeuyl尸-0dW?A立sDDttAnatrflic-:BringraunxnteErejieLS
20、D4r3。士S:“0C3fV.cLNez。”,IIacui,9”,L”fdoiygKL.*4e,Ii,iikO.i,I*ftlla4iinfQua.An4aRaau*14 (utcaxRonarr.EHa,N,pd/mpMif*,* caM岬:Lo9AnfXCoM|:cewmurSoMRe“。3Ln=LoMjSx,.UTfUqiRcccgGu:Lnk4SBi3iMQu0rsur:匕:CorKjncithxhMjpamn;inHaa,witee:LxewfcGUMio:La川”MCovig:ddieduleTpe(il*a*ur0i3/,Me6MgMfd gATyrp。S5,duleTee 5HMrtatrP*u*Q.euQjrt*9(MA0Gues,田尸31,):wed ror慶 8田學(xué)eQ,uoX*jeiih*f5(E*eoS*M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級地理(難點(diǎn)突破)2027年上學(xué)期期末考核卷
- 2025-2026年四年級科學(xué)(考點(diǎn)過關(guān))下學(xué)期期末測試卷
- 2025年大學(xué)建筑裝飾(裝飾設(shè)計(jì)原理)試題及答案
- 2026年土木工程(混凝土結(jié)構(gòu))考題及答案
- 高職第一學(xué)年(動物醫(yī)學(xué))動物臨床診療2026年綜合測試題及答案
- 五年級科學(xué)(綜合探究)2027年下學(xué)期期中測評卷
- 2025年高職風(fēng)電系統(tǒng)運(yùn)行與維護(hù)(風(fēng)機(jī)調(diào)試)期末試題
- 2026年用戶體驗(yàn)設(shè)計(jì)流程與方法(標(biāo)準(zhǔn)制定)考題及答案
- 2025年高職生態(tài)保護(hù)技術(shù)(土壤修復(fù)實(shí)操)試題及答案
- 2025年大學(xué)公共項(xiàng)目管理(公共項(xiàng)目管理)試題及答案
- 2025年法律職業(yè)倫理歷年試題及答案
- 大學(xué)生心理健康論文情緒管理
- 學(xué)術(shù)報(bào)告廳舞臺燈光音響系統(tǒng)項(xiàng)目工程施工技術(shù)方案及技術(shù)措施
- JG/T 255-2020內(nèi)置遮陽中空玻璃制品
- JG/T 254-2015建筑用遮陽軟卷簾
- TCNFPIA1003-2022采暖用人造板及其制品中甲醛釋放限量
- 大健康產(chǎn)業(yè)可行性研究報(bào)告
- 腸易激綜合征中西醫(yī)結(jié)合診療專家共識(2025)解讀課件
- 庫存周轉(zhuǎn)率提升計(jì)劃
- 護(hù)理部競聘副主任
- 《統(tǒng)計(jì)學(xué)-基于Excel》(第 4 版)課件 賈俊平 第5-9章 概率分布- 時(shí)間序列分析和預(yù)測
評論
0/150
提交評論