偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

網(wǎng)站用戶訪問速度監(jiān)測分析項(xiàng)目

開發(fā) 項(xiàng)目管理
剛來新公司不久做運(yùn)維開發(fā),本為以為要繼續(xù)做我的開源軟件開發(fā),結(jié)果領(lǐng)導(dǎo)給分了個以前基本從來沒考慮的任務(wù),監(jiān)測用戶訪問我們網(wǎng)站的速度,沒錯,是監(jiān)測所有的用戶訪問我們網(wǎng)站的速度。

剛來新公司不久做運(yùn)維開發(fā),本為以為要繼續(xù)做我的開源軟件開發(fā),結(jié)果領(lǐng)導(dǎo)給分了個以前基本從來沒考慮的任務(wù),監(jiān)測用戶訪問我們網(wǎng)站的速度,沒錯,是監(jiān)測所有的用戶訪問我們網(wǎng)站的速度。就跟基調(diào)一樣。因?yàn)榛{(diào)不能實(shí)現(xiàn)我們一些特殊的定制需求,所以公司準(zhǔn)備我們自己開發(fā)一個。雖然以前沒做過,但是有挑戰(zhàn)才有意思嘛,開始走起。

首先,確定頁面速度如何監(jiān)控?監(jiān)控什么指標(biāo)?如何分析?領(lǐng)導(dǎo)的基本需求如下:

  1. 實(shí)現(xiàn)全國各地用戶訪問速度的按區(qū)域分析
  2. 實(shí)現(xiàn)用戶從瀏覽器開始請求到頁面加載完畢的每一步驟的指標(biāo)統(tǒng)計
  3. 實(shí)現(xiàn)對定點(diǎn)區(qū)域的任務(wù)下發(fā)

到底咋做?剛開始想的是,能否通過分析網(wǎng)站日志來實(shí)現(xiàn)呢?尼馬,當(dāng)然不可能這么簡單,因?yàn)槿罩纠镒疃嘀荒苡涗浄?wù)器收到請求到開始響應(yīng)的時間,用戶何時完全加載完你的頁面,是找不到的。那咋辦?先學(xué)習(xí)基調(diào)的監(jiān)測方法發(fā)現(xiàn),他們是在全國各個機(jī)房里埋了數(shù)萬個客戶端,讓這些客戶端定時自動訪問你的網(wǎng)站,然后再對每個客戶端的加載速度做匯總后分析。很顯然我們不可能在全國各個機(jī)房放一臺機(jī)器當(dāng)客戶端,那樣的花費(fèi)非得把公司賣了不行。本著花小錢辦大事的思想,靈光一現(xiàn),為什么不讓用戶直接幫我們測?我們網(wǎng)站每天數(shù)億PV,這么好的資源不用就白浪費(fèi)了。咋讓用戶幫我們測?呵呵,很簡單,在頁面埋碼,在用戶訪問我們頁面的時候,瀏覽器會自動運(yùn)行一段JS腳本,會紀(jì)錄從瀏覽器開始請求到整個頁面加載完畢的過程。然后我的腳本把這些紀(jì)錄的值做成一個字典,統(tǒng)一用GET的方式發(fā)送到后臺分析接口,后臺分接程序接到數(shù)據(jù)進(jìn)來后就按相應(yīng)的分析維度做分析,然后,然后問題就解決了嘛。

GOOD,既然以為邏輯能走通,那就開始測試下吧,廢話少說上干貨,以下為實(shí)現(xiàn)過程:

  • 前端埋碼

首先確定收集以下指標(biāo)

  1. onLoad頁面加載時間
  2. 頁面下載時間
  3. JS加載時間
  4. 從request開始到服務(wù)器響應(yīng)時間
  5. DomReady時間      
  6. 第一次渲染時間(白屏?xí)r間)
  7. DNS lookup時間    
  8. 從服務(wù)器下載第一個byte時間
  9. 導(dǎo)航類型 
  10. 請求的url
  11. 瀏覽器類型     
  12. 瀏覽器版本     
  13. 分辨率      

以上指標(biāo)只是第一期功能,以后可能還會加很多新的指標(biāo),完全靠自己寫JS來實(shí)現(xiàn)挺麻煩的,尼馬我是運(yùn)維開發(fā)呀,不是搞前端的呀,這么多東西怎么弄,果斷尋找開源解決方案,找來找去找到了yahoo開源的一個頁面速度指標(biāo)收集的小插件boomerang, 下載下來用了下發(fā)現(xiàn)很強(qiáng)大,支持自行開發(fā)plugin, 于是就在他的基礎(chǔ)上做了些更改,自己加入了一些自定義指標(biāo)的收集。

為了幫助看客了解,先跟大家說一下,以上指標(biāo)如何收集?一個HTML頁面從開始服務(wù)器請求,到整個頁面展現(xiàn)在用戶面前,其實(shí)是經(jīng)過好多個步驟的,擦,干說好累,還是上圖吧。

wKiom1PGVZ-SaAE2AAKeyV4TnJA394.jpg

如上圖,頁面整個加載過程一般為:

  1. 輸入網(wǎng)址回車 navigationStart
  2. DNS解析,獲取網(wǎng)站IP地址  domainLookupStart
  3. 向服務(wù)器IP發(fā)起請求,TCP/IP 3次握手,建立連接 ConnectStart
  4. 服務(wù)器開始處理用戶請求頁面的URL     ResponseStart
  5. 向用戶發(fā)送第一個字節(jié)   FristByte
  6. DOM加載完畢                  domComplete
  7. Onload事件開始               LoadEventtart
  8. 頁面加載完畢                    LoadEventEnd

親,知道么,現(xiàn)在基本上所有的主流瀏覽器都會在頁面加載的時候把這些指標(biāo)記錄下來,你可以直接在JS腳本里調(diào)用。調(diào)用方法等詳細(xì)指標(biāo)解釋請看  https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html

因?yàn)椴恢С諭E9以下的瀏覽器,所以,去他媽的IE,果斷放棄老版本IE,直接設(shè)置為在IE9以下不執(zhí)行,簡單粗暴。

瀏覽器版本檢測代碼

  1. <script type="text/javascript">  
  2.    
  3.        function get_browser() {  
  4.            var N = navigator.appName, ua =navigator.userAgent, tem;  
  5.            var M =ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);  
  6.            if (M && (TEM = ua.match(/version\/([\.\d]+)/i)) != null) M[2] =tem[1];  
  7.            M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];  
  8.            return M[0];  
  9.        }  
  10.        function get_browser_version() {  
  11.            var N = navigator.appName, ua = navigator.userAgent, tem;  
  12.            var M = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);  
  13.            if (M && (tem = ua.match(/version\/([\.\d]+)/i)) != null) M[2] =tem[1];  
  14.            M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];  
  15.            return M[1];  
  16.        }  
  17.        var browser = get_browser();  
  18.        var browser_version = get_browser_version();  
  19.        var br_detect = 0; //default to run  
  20.        if (browser == 'MSIE') {  
  21.            if (parseInt(browser_version) < 9) {  
  22.                 var br_detect = 1; //not runthe status js  
  23.            }  
  24.         } //end if browser  
  25.    
  26.                    //setJS controller variable for speed monitor plugin  
  27.                    varBoomRunMark = 0; //0 = enable ,  1=disable  
  28.                    varBoomKickStartMark = 5; // run the collect plugin when random num < 5  
  29.                    varRandomNumber = Math.floor((Math.random() * 10) + 1);  
  30.                    if(br_detect == 0) {  
  31.                             imgLoadBeginTime= new Date();  
  32.                              
  33.                    }  
  34.                    //console.log('randomnumber :'+ RandomNumber);  
  35.        if (br_detect == 0) {  
  36.                      if (BoomRunMark == 0){  
  37.                             if(RandomNumber  < BoomKickStartMark ){  
  38.                                      BOOMR.init({  
  39.                                                beacon_url:"http://perf.che168.com/pv_perf.php",  
  40.                                                BW:{ enabled: false },  
  41.                                                RT:{  
  42.                                                         cookie:'CHE168-RT' 
  43.                                                }  
  44.                                      });  
  45.                             }//endRandomNumber check  
  46.                      }// end BoomRunMark check  
  47.        }//end if br_detect  
  48.           
  49. </script>  

做完后,上線測試,打開網(wǎng)站,就看到我的腳本在華麗麗的跑了。

 wKioL1PGVsbDM1BKAAHBVN8C_Cg217.jpg

由于每天收集量在大約上千萬,然后又需要用戶訪問速度進(jìn)行實(shí)時分析,所以才用了storm實(shí)時日志流分析,對數(shù)據(jù)做基本處理后,把各個地區(qū)的訪問統(tǒng)計一下,寫入redis,因?yàn)榱看螅瑢?shí)時數(shù)據(jù)只存1天左右,過了一天,就把這些數(shù)據(jù)按小時進(jìn)行平均優(yōu)化等。

#p#

分析方法

由于數(shù)據(jù)量大,如果直接簡單的對數(shù)據(jù)做平均的話,肯定會出現(xiàn)很多極值,導(dǎo)致平均值不能代表整組數(shù)據(jù)的實(shí)際平均值,例如,兩組數(shù),[1,999], [499,501] 兩組數(shù)平均后都等于500,直接取平均值就太坑了,這時候高中數(shù)學(xué)終于用上了,直接取標(biāo)準(zhǔn)差,中位數(shù),然后又TP90,TP99了一下,一番下來,數(shù)據(jù)基本準(zhǔn)了,當(dāng)然其中很多細(xì)節(jié)實(shí)現(xiàn),有興趣的同學(xué)可以專門找我探討。

直接看最后實(shí)現(xiàn)吧:

wKiom1PGVwOhSvCgAAEEqB5AZSk378.jpg

wKiom1PGVwLhGRHdAAcI0rQ6nus239.jpg

wKioL1PGWBrCQQuHAAMoiGR8Jko273.jpg

wKiom1PGVwKwkvVJAAZ-EKsdg3U766.jpg

wKioL1PGWBrR63GwAAUlMUyuxAg107.jpg

以下為實(shí)時監(jiān)控部分:

wKioL1PGWLiw-_ErAAQEIhqUh5Q426.jpg

wKiom1PGV6HgrhivAAS9WkPD_Xk063.jpg

好吧,差就多就這些吧,回頭搞一下,爭取開源下。 打完收工。

博文地址:http://3060674.blog.51cto.com/3050674/1439129

責(zé)任編輯:林師授 來源: 51CTO
相關(guān)推薦

2014-03-11 15:47:29

大型網(wǎng)站速度優(yōu)化運(yùn)維人員

2011-03-15 13:50:53

2017-12-05 13:41:02

SQL數(shù)據(jù)庫SQL查詢

2010-06-12 09:52:43

人民網(wǎng)網(wǎng)絡(luò)傳媒公信力

2011-03-15 14:03:16

2018-11-30 16:17:28

HTTPS

2013-12-02 15:50:59

極云計劃網(wǎng)站訪問

2013-07-25 14:47:46

網(wǎng)站分析網(wǎng)站流量分析訪問量變化

2012-01-04 09:29:01

2009-01-11 15:05:46

2018-10-08 09:29:19

網(wǎng)站訪問Nginx

2022-07-18 13:06:26

網(wǎng)站服務(wù)監(jiān)測

2010-11-09 13:47:30

2011-06-03 22:13:34

2009-07-01 15:02:56

JSP程序JSP操作

2011-05-20 11:15:47

數(shù)據(jù)分析

2014-12-31 09:37:57

節(jié)點(diǎn)延時提速

2011-05-27 14:25:04

網(wǎng)頁加載時間

2010-06-12 10:13:15

基調(diào)網(wǎng)絡(luò)網(wǎng)站性能優(yōu)化解決方案

2011-06-21 17:48:24

SEO關(guān)鍵詞
點(diǎn)贊
收藏

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