您現在的位置: 網站首頁 / 網站建設 / 正文

大型網站中重要的要素-性能

作者: admin 发布: 2014-10-8 22:44:59 分类: 網站建設 閱讀: 次 查看評論

  在前一篇隨筆大型網站系統架構的演化中,介紹了大型網站的演化過程,期間穿插了一些技術和手段,我們可以從中看出一個大型網站的輪廓,但想要掌握設計開發維護大型網站的技術,需要我們一步一步去研究實踐。所以我打算寫一個系列,從理論到實踐講述大型網站的點滴,這也是一個共同學習的過程,希望自己能堅持下去。系列大概會分爲兩部分,理論和實踐,理論部分盡量通俗易懂,也要講一些細節。實踐部分會抽取一些技術做實踐,將方法、解決問題過程分享出來。本文將講述大型網站中一個重要的要素,性能。

  什麽是性能

  有人說性能就是訪問速度快慢,這是最直觀的說法,也是用戶的真實體驗。一個用戶從輸入網址到按下回車鍵,看到網頁的快慢,這就是性能。對于我們來說,需要去挖掘這個過程,因爲這決定我們怎麽去做性能優化。

  這中間發生了什麽?

  

  用戶訪問網站的整個流程:用戶輸入網站域名,通過DNS解析,找到目標服務器IP,請求數據經互聯網達到目標服務器,目標服務器收到請求數據,進行處理(執行程序、訪問數據庫、文件服務器等)。處理完成,將響應數據又經互聯網返回給用戶浏覽器,浏覽器得到結果進行計算渲染顯示給用戶。

  我們把整個過程,分爲三段路徑:

  1、第一段在用戶和浏覽器端,主要負責發出用戶請求,以及接受響應數據進行計算渲染顯示給用戶;

  2、第二段在網絡上,負責對請求數據、響應數據的傳輸;

  3、第三段在網站服務器端,負責對請求數據進行處理(執行程序、訪問數據庫、文件等),並將結果返回;

  第一路徑

  第一路徑花费的时间包括输入域名发起请求的时间和浏览器收到响应后计算渲染的时间。

  輸入域名發起請求,實質過程是:

  1、用戶在浏覽器輸入要訪問的網站域名;

  2、本地DNS請求網站授權的DNS服務器對域名進行解析,並得到解析結果即IP地址(並將IP地址緩存起來)。

  3、向目標IP地址發出請求。

  从这个过程我们可以看到,优化的地方主要是减少DNS解析次数,而如果用户浏览器设置了缓存,则再第二次访问相同域名的时候就不会去请求DNS服务器,直接用缓存中的IP地址发出请求。因此这个过程主要取决于浏览器的设置。现在主流的浏览器默认设置了DNS的预取功能(DNS Prefetch),当然你也可以主动告知浏览器我的網站需要做DNS预取:

  浏覽器將數據進行計算渲染的過程:

  1、浏覽器解析響應數據;

  2、浏覽器創建DOM樹;

  3、浏覽器下載CSS樣式,並應用到DOM樹,進行渲染;

  4、浏覽器下載JS文件,開始解析執行;

  5、顯示給用戶。

  從這個過程,我們可以找出不少可以優化的地方。首先我們可以盡量控制頁面大小,使得浏覽器解析的時間更短;並且將多個CSS文件、JS文件文件合並壓縮減少文件下載的次數和大小;另外注意將CSS放在頁面前面,JS訪問頁面後面,這樣便于頁面首先能渲染出來,再執行js腳本,對于用戶來說有更好的體驗。最後我還可以設置浏覽器緩存,下次訪問時從緩存讀取內容,減少http請求。

  該代碼說明了浏覽器啓用了緩存並在5秒內不會再次訪問服務器。注意緩存的設置需要結合你的業務特性來適當配置。

  以下是京東商城的HTML簡圖:

  css樣式放在html前面,並且進行了合並。

  大型網站 網站性能 代码优化

  大多數的JS文件放在頁尾。

  大型網站 網站性能 代码优化

  第二路徑

  第二路徑在网络上,花费的时间同样包括请求数据的传输时间和响应数据的传输时间,这个两个时间取决于数据传输的速度,这里我们要讲一个名词“带宽”。什么是带宽,我们经常说带宽10M,20M是什么意思?我的带宽20M,这意味着什么?

  我們知道帶寬速度分爲上行、下行速度,也就是上傳和下載的速度。帶寬20M對于用戶來說則是下載速度20M(20×1024×1024比特率),換算成字節20M/8=2.5M。也就是說20M的帶寬下載速度理論可達2.5M/s,而對于家庭用戶而言上傳速度一般比下載速度小的多,大約是不到十分之一。而對于網站服務器(企業用戶)來說,則不然,一般上行速度等于下載速度。這也是運營商根據實際需求分配的,畢竟用戶的主要需求是下載數據,而不是上傳數據。

  整個流程從傳輸方式看就是:用戶發送請求數據(上傳),網站服務器接受請求數據(下載),網站服務器返回響應數據(上傳),用戶接受響應數據(下載)。對于用戶來說,上傳數據是很小的(Url參數),而下載數據是較大的(響應數據);對于服務器來說,下載數據是很小的(url參數),上傳數據是較大(響應數據)。

  理解了這個,我們可以解釋爲什麽有時用戶反映爲什麽自己的帶寬足夠,但打開某些網站仍然很慢,就是因爲盡管用戶的下載速度很快,但網站服務器的上傳速度很慢,這就像一個抽水管和一個出水管,不管抽水管再大,但出水管很小,同樣抽到的水量是有限的。

  了解了這個原理我們來看怎麽提高數據傳輸的速度,首先用戶的上傳、下載速度我們是無法決定的,我們能決定的是網站服務器的上傳、下載速度,所以我們可以做的是適當的增加服務器帶寬(帶寬是很貴的,盲目的增加只會增加不必要成本)。購買合適的帶寬需要根據網站業務特性、規模以及結合運維人員的經驗來選擇。通常可以考慮的算法,即根據一次響應數據的大小,乘以PV數,除以對應的高峰時間段,從而大致估算出網站帶寬的需求。

  下面我們繼續進一步研究第二路徑:

  大型網站 網站性能 代码优化

  上圖表示用戶訪問網站服務器時網絡的大致情況,從圖上可以看出假設網站服務器從電信網絡接入,而用戶A作爲電信的寬帶用戶,則可以通過電信骨幹網快速的訪問到網站服務器。用戶B,用戶C作爲移動和聯通用戶需要通過運營商的互聯互通經過較長路徑才能訪問到服務器。

  針對這種情況,我們可以采取以下方法來優化:

  1、在各運營商發達的地區的IDC(互聯網數據中心,可以理解成機房)部署網站服務器,各運營商的用戶即可通過各自的骨幹網訪問服務器。

  2、購買代理服務,也就是原來聯通用戶需要通過聯通骨幹網——>聯通互聯互通路由器——>電信骨幹網——>網站服務器的過程。通過代理服務,代理服務器直連到電信骨幹網,訪問網站服務器。

  3、在主要地區城市購買CDN服務,緩存對應的數據,用戶可先從最近的CDN運營商獲取請求數據。

  第三路徑

  第三路徑主要是網站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源。

  這是對于我們來說最可以發揮的地方:

  1、使用緩存,根據需要使用本地緩存或分布式緩存;

  2、使用異步操作,這種方式不僅可以提高性能,也提高了系統的擴展性;

  3、代碼優化;

  4、存儲優化;

  緩存

  如果緩存數據較少,可以利用OSCache實現本地緩存:

  大型網站 網站性能 代码优化

  當緩存數據過多時,利用Memcached實現分布式緩存:

  大型網站 網站性能 代码优化

  Memcached實現分布式緩存,緩存服務器之間是互不通信的,也就是我們可以方便的通過增加Memcached服務器對系統進行擴展。

  異步操作

  大型網站 網站性能 代码优化

  使用同步請求的方式,在高並發的情況下,會對數據庫造成很大的壓力,也會讓用戶感覺響應時間過長。異步請求方式,則可以快速的對用戶做出響應,而具體的數據庫操作請求,則通過消息隊列服務器發送給數據庫服務器,做具體的插入操作。插入操作的結果則已其他方式通知客戶端。例如一般在訂票系統當中,出票行爲就是異步完成,最終的出票結果會以郵件或其他方式告知用戶。

  代碼優化

  這裏就不在詳細描述。

  存儲優化

  大型網站中海量的數據讀寫對磁盤造成很大壓力,系統最大的瓶頸還是在磁盤的讀寫。可以考慮使用磁盤陣列、分布式儲存來改善存儲的性能。

  性能的指標和測試

  上面通過解析用戶訪問網站的過程來思考怎麽提高用戶感知的性能,對于用戶來言性能就是快和慢。但對于我們來說,不能這樣簡單描述,我們需要去量化他,用一些數據指標去衡量它。這裏講到幾個名詞:響應時間、並發量、吞吐量。

  響應時間:就是用戶發出請求到收到響應數據的時間;

  並發量:就是系統同時能處理多少用戶請求;

  吞吐量:就是單位時間內系統處理的請求數量;

  爲了通俗的了解這三個概念,我們以高速公路的收費站爲例子:響應時間是指一輛車經過收費站的時間,也就是車輛從進入收費站、付錢、開閘、離開收費站的時間;並發量是指這個收費站同時能通行多少輛車,可以理解爲收費站的出口數量。吞吐量是指:在一段時間內,這個收費站通往了多少了車。

  這個例子不曉得恰不恰當。

  對于性能測試來說,基本也是圍繞這些方面來測試,下圖說明了性能測試的過程:

  大型網站 網站性能 代码优化

  左圖表示響應時間和並發用戶量的二維坐標圖,從圖上可以看出,並發用戶量在一定量增加時,響應時間很短,並且沒有太大的起伏,這表示系統目前處于日常運行期,可以很快處理用戶請求(A點之前);隨著並發量的增加,系統處于請求高峰期,但仍然可以有序的處理用戶請求,響應時間較日常有所增加(A、B之間);當並發量增加到一定數量時,超過了系統的負載能力,系統處于瀕臨崩潰的邊緣(B、C之間),響應時間嚴重過長,直到系統崩潰。

  右圖表示吞吐量與並發用戶量的二維坐標圖,可以看出,隨著並發用戶量的增加,吞吐量逐漸增加;在並發量到達一定量時,由于系統處理能力達到最大,吞吐量增加放緩;當並發量超過系統負載時(E點),系統處理能力開始下降,不能再請求增加的用戶請求,吞吐量反而降低。

  小結

  本文通過用戶訪問網站的過程,分析了三個路徑過程中提高性能的想法和手段,最後介紹了描述性能的指標,並對性能測試做了簡要說明。

  作者:cnblogs

  來源:SEO搜尋引擎優化 - SEO自學網 轉載注明出處!

? 上一篇下一篇 ?   本文關鍵詞: 網站  

評論列表:

站長SEO學院
第一節:百度搜索引擎工作原理
第二節:建設對搜索引擎友好的站點
第三節:如何进行網站内容建设
第四節:整體優化、結構優化、網頁優化
第五節:移動搜索-明確移動搜索優化標准
百度SEO資料文檔
百度搜索引擎優化指南2.0
百度移動搜索優化指南2.0
網站分析白皮书(站长版)
移動站點該如何優化
建設對百度友好的站點
百度搜索引擎網頁質量白皮書
石榴算法-綠蘿算法-冰桶算法
新搜索時代下的優化策略
更多百度SEO資料文檔
站長推薦
DIV+CSS布局實例教程-Web標准
網站SEO優化常见问题汇总
SEO優化推广方案该如何写
SEO優化方案步骤
影响網站关键词排名因素总结
影響谷歌搜索引擎排名的因素調查
手機移動端站點適配優化
最近發表