自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聽云廖雄杰:大數(shù)據(jù)時(shí)代精益應(yīng)用性能管理

原創(chuàng)
大數(shù)據(jù)
WOT2015"互聯(lián)網(wǎng)+"時(shí)代大數(shù)據(jù)技術(shù)峰會(huì)于今日在深圳前海華僑城GW萬豪酒店盛大揭幕,42位業(yè)內(nèi)重量級(jí)嘉賓匯聚,重磅解析大數(shù)據(jù)技術(shù)的點(diǎn)睛應(yīng)用。秉承專注技術(shù)、服務(wù)技術(shù)人員的理念,自2012年起WOT大會(huì)已成功舉辦七屆,積累了大量技術(shù)專家資源,成為業(yè)界重要的技術(shù)分享交流以及人脈拓展平臺(tái)。

【2015年11月28日 51CTO.com快訊】WOT2015"互聯(lián)網(wǎng)+"時(shí)代大數(shù)據(jù)技術(shù)峰會(huì)于今日在深圳前海華僑城GW萬豪酒店盛大揭幕,42位業(yè)內(nèi)重量級(jí)嘉賓匯聚,重磅解析大數(shù)據(jù)技術(shù)的點(diǎn)睛應(yīng)用。秉承專注技術(shù)、服務(wù)技術(shù)人員的理念,自2012年起WOT大會(huì)已成功舉辦七屆,積累了大量技術(shù)專家資源,成為業(yè)界重要的技術(shù)分享交流以及人脈拓展平臺(tái)。

本次峰會(huì)涵蓋九大技術(shù)主題,分別是:互聯(lián)網(wǎng)金融、O2O電商架構(gòu)、醫(yī)療應(yīng)用、商業(yè)創(chuàng)新、移動(dòng)大數(shù)據(jù)、技術(shù)創(chuàng)業(yè)、社交網(wǎng)絡(luò)、數(shù)據(jù)安全、廣告數(shù)據(jù)技術(shù)。51CTO作為本次大會(huì)主辦方,將通過圖文直播與后期視頻展示,全程跟蹤報(bào)道這場技術(shù)盛宴。

下面是聽云技術(shù)副總裁廖雄杰帶來的主題為《大數(shù)據(jù)時(shí)代:精益應(yīng)用性能管理》的精彩演講。

 

[[157462]]

大家好,我是頭一次來深圳和大家做分享,今天是講精益應(yīng)用性能管理,我們會(huì)有很多的主機(jī),兩年前不好意思打招呼,覺得我們系統(tǒng)里面,我們的主機(jī)數(shù)量,物理主機(jī)加上虛擬機(jī)還不到一百臺(tái),覺得不好意思好打招呼。過了半年以后,我們物理主機(jī)、虛擬機(jī)迅速超過了一百多臺(tái),這個(gè)在我們的互聯(lián)網(wǎng)很多公司里,這是非常常見的現(xiàn)象,我們運(yùn)維主機(jī)的數(shù)量,很全面在一百臺(tái)以上甚至更多。

我們現(xiàn)在面臨一些新的挑戰(zhàn),特別是大數(shù)據(jù)的領(lǐng)域,我們需要監(jiān)控每一臺(tái)主機(jī)后臺(tái)統(tǒng)籌的指標(biāo),像CPU、內(nèi)存、網(wǎng)絡(luò)等,除了這些性能,應(yīng)用層要監(jiān)測的指標(biāo)就更多了,簡單的列舉一下,比如說有一些緩存,前端的QPS,應(yīng)用層可能需要和研發(fā)人員做一些運(yùn)維緊密的配合,需要從應(yīng)用的日志分析一些問題。

大數(shù)據(jù)時(shí)代,我們剛才簡單列舉了幾個(gè)指標(biāo),大數(shù)據(jù)的時(shí)代,我們的架構(gòu)發(fā)生了一些演進(jìn),我們的用戶端會(huì)向移動(dòng)端遷移,遷移最終的效果是什么?我們做運(yùn)維都會(huì)比較頭疼,移動(dòng)端的數(shù)量,我們的日活可能上千萬,至少成千上萬,我們服務(wù)應(yīng)用的客戶端也是慢慢的提高了發(fā)展,我們的應(yīng)用端也是在往后端的云上轉(zhuǎn)移。

我們的互聯(lián)網(wǎng)領(lǐng)域,產(chǎn)品的迭代速度是非??斓模覀?cè)谶@個(gè)過程中,我們的監(jiān)控能否跟上我們的產(chǎn)品迭代,我們的開發(fā)需求一直是在變的,我們后端的監(jiān)控是不是能緊隨著我們開發(fā)產(chǎn)品迭代的步伐,我們的技術(shù)架構(gòu)也是越來越復(fù)雜,至少是不斷的在往前演進(jìn),在演進(jìn)的過程中延伸出我們的監(jiān)控能不能跟上我們技術(shù)架構(gòu)的變化。

如何監(jiān)控我們的應(yīng)用系統(tǒng)的性能?我們有很多的主機(jī),成百上千臺(tái)主機(jī)的基礎(chǔ)指標(biāo),我們有成熟的監(jiān)控手段,我們的CPU內(nèi)存,我們的監(jiān)控系統(tǒng)里要加一個(gè)RDB。我們應(yīng)用以后的架構(gòu),我們?nèi)绾伪O(jiān)控我們的應(yīng)用,后端有很多的服務(wù)和指標(biāo),其實(shí)都是需要去監(jiān)控的,我們后臺(tái)的架構(gòu)可能會(huì)有數(shù)據(jù)庫,我們會(huì)有NoSQL,我們的架構(gòu)上可能做一些服務(wù)化的治理,我們會(huì)有大量的API調(diào)用,大量的API、遠(yuǎn)程的調(diào)用,我們的服務(wù)會(huì)往云端轉(zhuǎn)移,這個(gè)過程中會(huì)帶來監(jiān)控的手段和以前有很大的不同,消息隊(duì)列是我們架構(gòu)里面比較常見的幾個(gè)組件。

    如何在我們的架構(gòu)中對(duì)我們的應(yīng)用進(jìn)行持續(xù)的監(jiān)控?精益化的性能管理的概念,我們做開發(fā)、做管理的同事可能比較熟悉,我們經(jīng)常講,我們是做敏捷開發(fā),中間可能引入一些精益的流程,或者是敏捷式的流程,我們看其中比較有名的過程控制方法,這也是六西格瑪?shù)倪^程控制里比較重要的概念。

    我們需要對(duì)我們的系統(tǒng)進(jìn)行定義,我們首先要對(duì)我們的系統(tǒng)里面每一個(gè)指標(biāo)進(jìn)行度量,這個(gè)度量的前提是,要把我們要定義的東西首先全部拆解成一個(gè)一個(gè)具體的性能指標(biāo),比如說CDU網(wǎng)絡(luò),都會(huì)有比較成熟的指標(biāo),我們應(yīng)用這塊是不是有一些標(biāo)準(zhǔn)化的指標(biāo)?我們度量之后就會(huì)對(duì)我們要做的管理進(jìn)行分析,指標(biāo)出來我們需要去分析,什么樣的指標(biāo)算是有問題?我們需要有標(biāo)準(zhǔn)化的分析方法。分析完之后需要有一個(gè)改善的過程,進(jìn)行一些控制,不斷改進(jìn)、控制、度量分析的流程和迭代的持續(xù)演進(jìn)。

    我們很重要的理念,他沒有更好的概念,我們能不能在下一步做得更好?我們說我們應(yīng)用的性能是可以精確的度量。我們精細(xì)化的性能管理里,我們用APM的方式,怎么樣持續(xù)的做數(shù)據(jù)改進(jìn)和優(yōu)化,監(jiān)控這個(gè)東西,剛才說我們的應(yīng)用系統(tǒng),我們說不太好去監(jiān)控,首先是在我們的應(yīng)用里,需要監(jiān)控的指標(biāo),首先要精確的度量出來,這是我們遇到的挑戰(zhàn),不同的應(yīng)用系統(tǒng)是有不同的組件,我們?cè)趺礃影阉鼧?biāo)準(zhǔn)化?通常的方式,被監(jiān)控的技術(shù)組件的IO,從應(yīng)用系統(tǒng)本身進(jìn)行監(jiān)控,應(yīng)用本身就是我們系統(tǒng)里非常好的監(jiān)控手段,所有后臺(tái)的服務(wù)都是通過應(yīng)用去調(diào)用的,我們能不能用我們的應(yīng)用直接在運(yùn)行的過程中,把監(jiān)控和所有的指標(biāo)都監(jiān)控起來,這個(gè)是可行的。

    我們傳統(tǒng)的方法是監(jiān)控基礎(chǔ)的指標(biāo),CPU、內(nèi)存,監(jiān)控到這些,我們的應(yīng)用哪里出現(xiàn)問題導(dǎo)致這樣的結(jié)果。我們從應(yīng)用層那邊來看,只要給他可以度量的標(biāo)準(zhǔn),哪里出問題,哪里可以被優(yōu)化的。

[[157463]]

    我們?cè)倏匆幌挛覀冊(cè)趺礃幼龅竭@一點(diǎn),從我們的應(yīng)用層去完成自我的性能發(fā)現(xiàn)過程,這個(gè)過程我們簡單的用代碼來表示,我們要監(jiān)控這個(gè)業(yè)務(wù)方法,比如說這個(gè)業(yè)務(wù)的方法叫做XXOO,我們里面有兩個(gè)很簡單的業(yè)務(wù)邏輯方法,我們?cè)趺礃颖O(jiān)控這個(gè)業(yè)務(wù)方法和性能?做的方式很簡單,總共分三步:一是在代碼的塊頭插入,代碼掉入執(zhí)行時(shí)間打一個(gè)標(biāo)注,把這個(gè)時(shí)間算進(jìn)來。***一步把這個(gè)指標(biāo)上傳到我們的系統(tǒng)里。我們也可以把這個(gè)異常信息捕捉起來自動(dòng)上傳上去,異常通常在我們應(yīng)用優(yōu)化里也是非常重要的關(guān)注點(diǎn)。

    做完這個(gè)以后,是不是就比較***了?顯然不是的,我們運(yùn)維的同學(xué)、開發(fā)的同學(xué)都要提出異議,運(yùn)維會(huì)想說,這個(gè)東西必須在我們的業(yè)務(wù)代碼里插入,運(yùn)維首先是不能接受的,必須讓研發(fā)干這個(gè)事情,我們的應(yīng)用、我們的開發(fā)迭代,是不是要嵌入這個(gè)代碼,需要規(guī)范的流程確保每個(gè)開發(fā)都有這樣的監(jiān)控意識(shí)把它管理,標(biāo)準(zhǔn)的代碼放進(jìn)去,在運(yùn)維的層面上實(shí)施起來是不太可控的。

    我想干的事情就是XXOO,插入和我用戶代碼無關(guān)的代碼。我們有沒有什么辦法,這個(gè)過程我們想到這一點(diǎn),我們發(fā)現(xiàn)問題的話,下一步我們要去改進(jìn)這個(gè)流程,首先我們要去看到代碼是標(biāo)準(zhǔn)的,作為的應(yīng)用都可以數(shù)據(jù)庫調(diào)用,Linuxe調(diào)用也不一樣,我們可以對(duì)它調(diào)用的方法進(jìn)行類似的操作,可以用非常標(biāo)準(zhǔn)的方式監(jiān)控起來,我們能不能用自動(dòng)化的方式完成這個(gè)過程?不需要開發(fā)人員手動(dòng)的插入代碼,這樣看起來比較手動(dòng)的代碼。

    拿Java舉一個(gè)例子,這個(gè)過程對(duì)Java是有這樣的機(jī)制,其他也有類似的方式實(shí)現(xiàn)。我們以Java舉個(gè)例子,我們要干的事情是把標(biāo)準(zhǔn)的代碼用一個(gè)標(biāo)準(zhǔn)的組件直接插到應(yīng)用里,不需要業(yè)務(wù)的開發(fā)人員手動(dòng)修改,我們Java里面有一個(gè)參數(shù)叫做JavaAgent,有一些做代碼的診斷和運(yùn)維的同學(xué)做一些類似的事情可能會(huì)用agent。實(shí)現(xiàn)了方式是他會(huì)有每個(gè)函數(shù)的入口,啟動(dòng)一個(gè)應(yīng)用服務(wù)器還是我們自己的寫的程序,最終都會(huì)用這個(gè)方法去啟動(dòng)除了這個(gè)函數(shù)以外,還有一個(gè)函數(shù)是Premain函數(shù),這個(gè)函數(shù)我們可以用Instrumentatian動(dòng)態(tài)加載的時(shí)候,我們執(zhí)行的時(shí)候是我們JAM所看到的自解碼,我們自己直接改掉就可以了,把那幾行代碼插到程序員寫好的Classloader的代碼里就可以自動(dòng)實(shí)現(xiàn)。

    我們用簡單的代碼給大家看看是怎么體現(xiàn)的,這個(gè)是我們?cè)嫉臉I(yè)務(wù)類的方法。怎么具體實(shí)現(xiàn)呢?我們用一個(gè)比較容易看的方式,做自解碼修改的話,我們要干的事情是把自解碼改掉,這個(gè)通常是需要非常了解自解碼,事實(shí)上我們有一些第三方的框架是可以提供讓我們以非常高級(jí)的方式,跟普通寫代碼的方式一樣去修改他,寫一個(gè)普通的業(yè)務(wù)代碼很類似 ,可能會(huì)稍微麻煩一些。

    這是一個(gè)Agent這個(gè)是一個(gè)單獨(dú)的組件,這個(gè)不用修改任何的代碼,我們?cè)谶@里面,我們舉簡單的例子,我們確實(shí)是想監(jiān)控XXOO的方法,讓我們拿到XXOO的方法以后,我們用在標(biāo)框的前面,在他的前面加上一個(gè)執(zhí)行的時(shí)間,同樣我們?cè)诤竺娌迦胍粋€(gè)執(zhí)行的時(shí)間,我們就可以把執(zhí)行的時(shí)間算出來。

    為了看起來比較簡單,我是用了比較簡單的框架,這個(gè)是可以用于修改自解碼,還有JavaASM,性能會(huì)比Java好很多,他的接口用起來比他更頂層一些,麻煩一些。這樣的代碼插進(jìn)來以后,配合我們的Java的參數(shù),我們配合Classloader,我們加入一個(gè)參數(shù),以Agent的方式完成的代碼的注入。運(yùn)行的結(jié)果就是這樣,XXOO是我們的業(yè)務(wù)代碼產(chǎn)生的輸出,后面就是我們剛才自動(dòng)插進(jìn)去的代碼輸出,這個(gè)我們把它稍微改一下上傳到我們的監(jiān)控系統(tǒng)里,我們的監(jiān)控系統(tǒng)會(huì)監(jiān)控日常、報(bào)警,所有的監(jiān)控都可以做出來。

    具體的過程剛才已經(jīng)簡單的介紹過了,首先我們通常實(shí)現(xiàn)自動(dòng)化監(jiān)控的時(shí)候,關(guān)鍵點(diǎn)是在剛才的自解碼,在函數(shù)里我們是可以修改自解碼,改完以后再返回給虛擬機(jī),這是我們改過的代碼,他其實(shí)看到的是我們改過的自解碼,這個(gè)和我們的應(yīng)用,在我們的開發(fā)過程中、應(yīng)用里去寫的效果是一樣的,性能也是一樣的。

    我們需要去監(jiān)控一些我們的系統(tǒng)里面對(duì)于web的頂替,我們會(huì)從它的請(qǐng)求到響應(yīng),他的響應(yīng)時(shí)間是我們最關(guān)心的,這是用戶直接感受到的時(shí)間,這個(gè)時(shí)間背后是可以分解,按他的組件去分解,在這個(gè)過程中我們和調(diào)用數(shù)據(jù)庫,可能會(huì)調(diào)用各種各樣的東西,任何一個(gè)環(huán)節(jié)出現(xiàn)性能問題,最終都可以占到我們響應(yīng)時(shí)間的結(jié)果,這些組件都可以監(jiān)控起來。

    說到自動(dòng)化,我們有一個(gè)很重要的,剛才是自動(dòng)的嵌入,很顯然我們是不能對(duì)所有的方法做嵌入操作,任何新的東西會(huì)影響到系統(tǒng)本身的性能,對(duì)所有的代碼干這樣的事情,***的結(jié)果可能是不可預(yù)知的。我們最關(guān)心的是,我們的后臺(tái),我們常用的系統(tǒng)里,我們常用的架構(gòu)里,我們最可能產(chǎn)生性能問題的是數(shù)據(jù)庫,比如說壓力比較大,后臺(tái)的數(shù)據(jù)庫任何的指標(biāo)都可能會(huì)影響到整個(gè)應(yīng)用和調(diào)用的時(shí)間。

    比如說一般普通本機(jī)執(zhí)行的操作,通常情況下,除非代碼非常糟糕,產(chǎn)生性能問題的幾率,像數(shù)據(jù)庫,還有一個(gè)容易產(chǎn)生問題的地方,我們會(huì)調(diào)用云端的API,這個(gè)過程中,有網(wǎng)絡(luò)的地方,都是一個(gè)潛在的風(fēng)險(xiǎn)點(diǎn),MQ也是一樣,掉線的話,大部分都是一些標(biāo)準(zhǔn)的地方。

    再結(jié)合剛才的過程看一下我們對(duì)系統(tǒng)能監(jiān)控哪些指標(biāo),我們監(jiān)控的***要素,我們要把他的應(yīng)用系統(tǒng)里的所有組成部分分解,然后標(biāo)準(zhǔn)指標(biāo)化進(jìn)行度量,這個(gè)里面會(huì)監(jiān)控響應(yīng)時(shí)間,API調(diào)用,會(huì)有外部服務(wù)的時(shí)間,API調(diào)用的時(shí)間,包括會(huì)有一些IDC的調(diào)用,還有數(shù)據(jù)庫的時(shí)間,整個(gè)組合起來是我們看到應(yīng)用的響應(yīng)時(shí)間。

    對(duì)于外部應(yīng)用,我們首先要對(duì)指標(biāo)進(jìn)行分解,我們的業(yè)務(wù)請(qǐng)求,訪問到哪個(gè)url,這個(gè)是我們監(jiān)控用戶所關(guān)心最基本的單元,我們每一個(gè)請(qǐng)求,他的響應(yīng)時(shí)間是什么樣的,對(duì)應(yīng)到后面的響應(yīng)時(shí)間,如果發(fā)生什么問題,我們可以關(guān)注他后面問題出在數(shù)據(jù)庫還是出在我們其他的組件上,我們希望看到應(yīng)用方,我發(fā)現(xiàn)現(xiàn)在主機(jī)CPU有點(diǎn)高,內(nèi)存有點(diǎn)高,到底是哪個(gè)組件出來問題?我們看最基礎(chǔ)的應(yīng)用。

    我們看到一個(gè)比較慢的訪問時(shí)間,這里有160多秒的請(qǐng)求訪問,剛才說我們希望他到底去哪兒,首先可以看出來到底是哪幾個(gè)后端的組件調(diào)用的方法占用系統(tǒng)的絕大部分,在這里,這個(gè)圖上體現(xiàn)的是四個(gè)階段,他是我們這里面對(duì)我們?cè)斐?**影響的部分。

    剛才嵌碼有一個(gè)地方?jīng)]體現(xiàn)出來,每個(gè)方法監(jiān)控起來,我們會(huì)把調(diào)用數(shù)輸出,我們可以非常清晰的看到,調(diào)用對(duì)象是哪個(gè)函數(shù)。每個(gè)函數(shù)發(fā)現(xiàn)問題,對(duì)于開發(fā)人員還不夠,有的時(shí)候,有些函數(shù)還要再調(diào)一調(diào),我們可以做得更直接一點(diǎn),我們是可以看到,他到底是在每個(gè)原文件的每個(gè)代碼上的問題,所有的問題都是可能的。

    我們現(xiàn)在在這個(gè)圖上看到的是SQL的操作,它的SQL是什么樣的?這個(gè)SQL我們可以現(xiàn)場抓出來,也可以對(duì)它進(jìn)行一些其他的操作,比如說在現(xiàn)場的計(jì)劃,優(yōu)化細(xì)節(jié)可以看到的話,我們優(yōu)化的結(jié)果可以看到是否規(guī)范。

    這個(gè)是我們剛才說的比較簡單的方式,后臺(tái)可能很多的服務(wù),可以通過API和其他的服務(wù)框架,做一些應(yīng)用之間的調(diào)用鏈,前端的應(yīng)用發(fā)生問題的時(shí)候里有的時(shí)候是由于后端的服務(wù)產(chǎn)生的問題導(dǎo)致前端,我們監(jiān)控到前端,如果不監(jiān)控后端還是很麻煩的,后臺(tái)提示大家的節(jié)點(diǎn),排查的時(shí)候能不能自動(dòng)的把后端慢的過程也輸出出來。比如說我們?cè)谶@個(gè)地方看到一個(gè)前臺(tái)的應(yīng)用情況,我們追蹤進(jìn)去,發(fā)現(xiàn)后端的某個(gè)API調(diào)用是URL,這個(gè)我們是希望在這個(gè)地方,我們?cè)谶@個(gè)地方自動(dòng)關(guān)聯(lián)過去的話,我們會(huì)看到他剛才這個(gè)API調(diào)用是由于后端提供服務(wù)的Sever出現(xiàn)了問題,他的SQL直接抓到,他的響應(yīng)時(shí)間很短,問題在于他是執(zhí)行了,在同一個(gè)云端他執(zhí)行了1900多次,這個(gè)不慢就奇怪了,這個(gè)是通過自動(dòng)嵌碼的方式把前后端可以串聯(lián)起來去幫助我們?nèi)プ隹焖俚姆治?、定位、診斷,基本上可以現(xiàn)場做出來。

    謝謝大家的聆聽和關(guān)注,我們是聽云,這些都是用我們運(yùn)營的互聯(lián)網(wǎng)公司,謝謝大家。

以上是51CTO.com記者為您從一線帶來的精彩報(bào)道。更多精彩內(nèi)容盡在51CTO.com獨(dú)家報(bào)道,敬請(qǐng)期待!

 

責(zé)任編輯:李英杰 來源: 51cto.com
相關(guān)推薦

2015-07-29 15:06:21

2017-07-10 13:52:47

移動(dòng)應(yīng)用性能匠心

2014-07-28 17:23:51

基調(diào)網(wǎng)絡(luò)聽云

2015-11-24 13:18:02

WOT2015

2014-09-16 13:33:50

大數(shù)據(jù)

2014-07-21 12:54:45

聽云基調(diào)網(wǎng)絡(luò)

2017-03-29 13:55:57

2015-08-18 20:33:28

DevOpsAPMSaaS

2017-04-14 12:56:05

WOT2017APM聽云

2015-03-21 16:26:34

應(yīng)用性能管理大數(shù)據(jù)

2017-04-20 10:02:04

APM

2015-03-11 15:31:10

性能魔方mmtrix應(yīng)用性能APM

2014-08-08 16:05:24

聽云

2014-08-28 03:44:30

mAPM聽云App移動(dòng)應(yīng)用性能監(jiān)測

2015-09-11 15:16:21

APM數(shù)據(jù)

2017-04-21 11:59:12

廖雄杰APM

2015-05-21 13:19:23

聽云應(yīng)用性能管理大講堂

2013-06-28 10:21:48

云應(yīng)用性能管理APM應(yīng)用性能管理

2016-01-11 09:14:09

Riverbed/應(yīng)用

2016-01-11 17:29:34

Riverbed應(yīng)用性能可視化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)