日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

發(fā)布時間:2024/9/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:http://www.cnblogs.com/edisonchou/p/3809839.html

此篇已收錄至《大型網(wǎng)站技術(shù)架構(gòu)》讀書筆記系列目錄貼,點擊訪問該目錄可獲取更多內(nèi)容。

一、網(wǎng)站性能測試

(1)性能測試指標:①響應(yīng)時間;②并發(fā)數(shù);③吞吐量;④性能計數(shù)器;

(2)性能測試方法:①性能測試;②負載測試;③壓力測試;④穩(wěn)定性測試;

(3)性能優(yōu)化策略:

  ①性能分析:檢查請求處理各個環(huán)節(jié)的日志,分析哪個環(huán)節(jié)響應(yīng)時間不合理,檢查監(jiān)控數(shù)據(jù)分析影響性能的因素;

  ②性能優(yōu)化:Web前端優(yōu)化,應(yīng)用服務(wù)器優(yōu)化,存儲服務(wù)器優(yōu)化;

二、Web前端性能優(yōu)化

(1)瀏覽器訪問優(yōu)化:

  ①減少http請求:因為http是無狀態(tài)的,每次請求的開銷都比較昂貴(需要建立通信鏈路、進行數(shù)據(jù)傳輸,而服務(wù)器端對于每個http請求都需要啟動獨立的線程去處理);減少http的主要手段是合并CSS、合并JS、合并圖片(CSS精靈,利用偏移定位image);

  ②使用瀏覽器緩存:設(shè)置http頭中Cache-Control和Expires屬性;

  ③啟用壓縮:可以對html、css、js文件啟用Gzip壓縮,可以達到較高的壓縮效率,但是壓縮會對服務(wù)器及瀏覽器產(chǎn)生一定的壓力;

  ④CSS放頁面最上面,JS放頁面最下面:瀏覽器會在下載完全部CSS之后才開始對整個頁面進行渲染,因此最好將CSS放在頁面最上面;而瀏覽器在加載JS后會立即執(zhí)行,有可能會阻塞整個頁面,造成頁面顯示緩慢,因此最好將JS放在頁面最下面;

  ⑤減少Cookie傳輸:一方面,太大的Cookie會嚴重影響數(shù)據(jù)傳輸;另一方面,對于某些靜態(tài)資源的訪問(如CSS、JS等)發(fā)送Cookie沒有意義;

(2)CDN加速:

  CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))仍然是一個緩存,它將數(shù)據(jù)緩存在離用戶最近的地方,便于用戶以最快速度獲取數(shù)據(jù)。即所謂的“網(wǎng)絡(luò)訪問第一跳”,如下圖所示:

  CDN只將訪問頻度很高的熱點內(nèi)容(例如:圖片、視頻、CSS、JS腳本等訪問頻度很高的內(nèi)容)進行緩存,可以極大地加快用戶訪問速度,減少數(shù)據(jù)中心負載。

(3)反向代理:

  反向代理服務(wù)器位于網(wǎng)站機房,代理網(wǎng)站W(wǎng)eb服務(wù)器接收Http請求,對請求進行轉(zhuǎn)發(fā),如下圖所示:

  反向代理服務(wù)器具有以下功能:

  ①保護網(wǎng)站安全:任何來自Internet的請求都必須先經(jīng)過代理服務(wù)器;

  ②通過配置緩存功能加速Web請求:減輕真實Web服務(wù)器的負載壓力;

  ③實現(xiàn)負載均衡:均衡地分發(fā)請求,平衡集群中各個服務(wù)器的負載壓力;

三、應(yīng)用服務(wù)器性能優(yōu)化

(1)分布式緩存:

PS:網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能。緩存是指將數(shù)據(jù)存儲在相對較高訪問速度的存儲介質(zhì)中(如內(nèi)存),以供系統(tǒng)進行快速處理響應(yīng)用戶請求。

  ①緩存本質(zhì)是一個內(nèi)存Hash表,數(shù)據(jù)以(Key,Value)形式存儲在內(nèi)存中。

  ②緩存主要用來存放那些讀寫比很高、很少變化的數(shù)據(jù),如商品的類目信息、熱門商品信息等。這樣,應(yīng)用程序讀取數(shù)據(jù)時,先到緩存中取,如緩存中沒有或失效,再到數(shù)據(jù)庫中取出,重新寫入緩存以供下一次訪問。因此,可以很好地改善系統(tǒng)性能,提高數(shù)據(jù)讀取速度,降低存儲訪問壓力

  ③分布式緩存架構(gòu):一方面是以以JBoss Cache為代表的互相通信派;另一方面是以Memcached為代表的互不通信派;

  JBoss Cache需要將緩存信息同步到集群中的所有機器,代價比較大;而Memcached采用一種集中式的緩存集群管理,緩存與應(yīng)用分離部署,應(yīng)用程序通過一致性Hash算法選擇緩存服務(wù)器遠程訪問緩存數(shù)據(jù),緩存服務(wù)器之間互不通信,因而集群規(guī)模可以輕易地擴容,具有良好的伸縮性。

  Memcached由兩個核心組件組成:服務(wù)端(ms)和客戶端(mc),在一個memcached的查詢中,mc先通過計算key的hash值來確定kv對所處在的ms位置。當ms確定后,客戶端就會發(fā)送一個查詢請求給對應(yīng)的ms,讓它來查找確切的數(shù)據(jù)。因為這之間沒有交互以及多播協(xié)議,所以 memcached交互帶給網(wǎng)絡(luò)的影響是最小化的。

(2)異步操作:

  ①使用消息隊列將調(diào)用異步化,可改善網(wǎng)站的擴展性,還可改善網(wǎng)站性能;

  ②消息隊列具有削峰的作用->將短時間高并發(fā)產(chǎn)生的事務(wù)消息存儲在消息隊列中,從而削平高峰期的并發(fā)事務(wù);

PS:任何可以晚點做的事情都應(yīng)該晚點再做。前提是:這個事兒確實可以晚點再做。

(3)使用集群:

  ①在高并發(fā)場景下,使用負載均衡技術(shù)為一個應(yīng)用構(gòu)建多臺服務(wù)器組成的服務(wù)器集群;

  ②可以避免單一服務(wù)器因負載壓力過大而響應(yīng)緩慢,使用戶請求具有更好的響應(yīng)延遲特性

  ③負載均衡可以采用硬件設(shè)備,也可以采用軟件負載。商用硬件負載設(shè)備(例如出名的F5)成本通常較高(一臺幾十萬上百萬很正常),所以在條件允許的情況下我們會采用軟負載,軟負載解決的兩個核心問題是:選誰、轉(zhuǎn)發(fā),其中最著名的是LVS(Linux Virtual Server)。

PS:LVS是四層負載均衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支持TCP/UDP的負載均衡。

LVS的轉(zhuǎn)發(fā)主要通過修改IP地址(NAT模式,分為源地址修改SNAT和目標地址修改DNAT)、修改目標MAC(DR模式)來實現(xiàn)。有關(guān)LVS的詳情請參考:http://www.importnew.com/11229.html

(4)代碼優(yōu)化:

  ①多線程:使用多線程的原因:一是IO阻塞,二是多CPU,都是為了最大限度地利用CPU資源,提高系統(tǒng)吞吐能力,改善系統(tǒng)性能;

  ②資源復(fù)用:目的是減少開銷很大的系統(tǒng)資源的創(chuàng)建和銷毀,主要采用兩種模式實現(xiàn):單例(Singleton)和對象池(Object Pool)。例如,在.NET開發(fā)中,經(jīng)常使用到的線程池,數(shù)據(jù)庫連接池等,本質(zhì)上都是對象池。

  ③數(shù)據(jù)結(jié)構(gòu):在不同場合合理使用恰當?shù)臄?shù)據(jù)結(jié)構(gòu),可以極大優(yōu)化程序的性能。

  ④垃圾回收:理解垃圾回收機制有助于程序優(yōu)化和參數(shù)調(diào)優(yōu),以及編寫內(nèi)存安安全的代碼。這里主要針對Java(JVM)和C#(CLR)一類的具有GC(垃圾回收機制)的語言。

四、存儲性能優(yōu)化

(1)機械硬盤 還是 固態(tài)硬盤?

  ①機械硬盤:通過馬達驅(qū)動磁頭臂,帶動磁頭到指定的磁盤位置訪問數(shù)據(jù)。它能夠?qū)崿F(xiàn)快速順序讀寫,慢速隨機讀寫

  ②固態(tài)硬盤(又稱SSD):無機械裝置,數(shù)據(jù)存儲在可持久記憶的硅晶體上,因此可以像內(nèi)存一樣快速隨機訪問

  在目前的網(wǎng)站應(yīng)用中,大部分應(yīng)用訪問數(shù)據(jù)都是隨機的,這種情況下SSD具有更好的性能表現(xiàn),但是性價比有待提升(蠻貴的,么么嗒)。

(2)B+樹 vs LSM樹

  ①傳統(tǒng)關(guān)系型數(shù)據(jù)庫廣泛采用B+樹,B+樹是對數(shù)據(jù)排好序后再存儲,加快數(shù)據(jù)檢索速度。

PS:目前大多數(shù)DB多采用兩級索引的B+樹,樹的層次最多三層。因此可能需要5次磁盤訪問才能更新一條記錄(三次磁盤訪問獲得數(shù)據(jù)索引及行ID,一次數(shù)據(jù)文件讀操作,一次數(shù)據(jù)文件寫操作,終于知道數(shù)據(jù)庫操作有多麻煩多耗時了)

  ②NoSQL(例如:HBase)產(chǎn)品廣泛采用LSM樹:

  具體思想是:將對數(shù)據(jù)的修改增量保持在內(nèi)存中,達到指定的大小限制后將這些修改操作批量寫入磁盤不過讀取的時候稍微麻煩,需要合并磁盤中歷史數(shù)據(jù)和內(nèi)存中最近的修改操作,所以寫入性能大大提升,讀取時可能需要先看是否命中內(nèi)存,否則需要訪問較多的磁盤文件。

  LSM樹的原理是:把一棵大樹拆分成N棵小樹,它首先寫入內(nèi)存中,隨著小樹越來越大,內(nèi)存中的小樹會被清除并寫入到磁盤中,磁盤中的樹定期可以做合并操作,合并成一棵大樹,以優(yōu)化讀性能。

  LSM樹的優(yōu)勢在于:在LSM樹上進行一次數(shù)據(jù)更新不需要磁盤訪問,在內(nèi)存即可完成,速度遠快于B+樹。

五、學習總結(jié)

  對于網(wǎng)站的高性能架構(gòu)這一章的閱讀,通過大牛的書籍我們學到了從三個主要方面的性能優(yōu)化策略,雖然都是理論,而且還只是淺顯地說明,但是對于我們這些廣大的開發(fā)菜鳥來說,擴展知識面,了解一點優(yōu)化策略不是一件壞事,我們可以從中注意到日常的代碼規(guī)范,如何寫出高效的代碼也是一件值得研究的事兒。在書中,看到了作者寫了這樣一句話,貼出來與各位正在學習途中的菜鳥們共享:“歸根結(jié)底,技術(shù)是為業(yè)務(wù)服務(wù)的,技術(shù)選型和架構(gòu)決策依賴業(yè)務(wù)規(guī)劃乃至企業(yè)戰(zhàn)略規(guī)劃,離開業(yè)務(wù)發(fā)展的支撐和驅(qū)動,技術(shù)走不遠,甚至還會迷路”。出來實習了一年多,對這句話感慨頗多,也吃了很多的虧,在和客戶的溝通交流上也有了自己的一點感悟,所以貼出來與各位園友共勉。最后,希望作為菜鳥的我們,在技術(shù)這條路上能夠走得遠一些,迷路不重要,重要的是能夠迷途知返,么么嗒!再過一個多月,就要開始找工作了,希望在此期間能夠認真閱讀完自己的計劃書單,加油!

參考文獻

(1)李智慧,《大型網(wǎng)站技術(shù)架構(gòu)-核心原理與案例分析》,http://item.jd.com/11322972.html

(2)周言之,《Memcached詳解》,http://blog.csdn.net/zlb824/article/details/7466943

(3)百度百科,CDN,http://baike.baidu.com/view/8689800.htm

(4)王晨純,《Web基礎(chǔ)架構(gòu):負載均衡和LVS》,http://www.importnew.com/11229.html

(5)輝之光,《B樹、B-樹、B+樹》,http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

(6)yanghuahui's blog,《LSM樹由來、設(shè)計思想以及應(yīng)用到HBase的索引》,http://www.cnblogs.com/yanghuahui/p/3483754.html

本章思維導圖


總結(jié)

以上是生活随笔為你收集整理的《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。