《大型網(wǎng)站技術(shù)架構(gòu)》筆記:架構(gòu)之高性能


一船老、性能測試指標和測試方法

  • 性能指標
  • 響應(yīng)時間
    從發(fā)出請求開始到收到最后響應(yīng)數(shù)據(jù)所需要的時間
  • 并發(fā)數(shù)
    是指系統(tǒng)同時處理請求的數(shù)目
  • 吞吐量
    單位時間內(nèi)系統(tǒng)處理的請求數(shù)量
  • 性能計數(shù)器
    描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標,包括System Load娇钱、對象與線程數(shù)悦施、內(nèi)存使用并扇、CPU使用、磁盤與網(wǎng)絡(luò)I/O等指標抡诞。
  • 性能測試方法
  • 性能測試
  • 負載測試
  • 壓力測試
  • 穩(wěn)定性測試

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

2.1 瀏覽器端

  • 減少HTTP請求
    主要手段是合并CSS、合并JavaScript昼汗、合并圖片
  • 使用瀏覽器緩存
    通過設(shè)置HTTP頭中的Cache-Control和Expires屬性肴熏。通過對靜態(tài)文件改名并更新Html中的引用實現(xiàn)。
  • 啟用壓縮
    在服務(wù)器端對文件進行壓縮顷窒,在瀏覽器端對文件進行解壓縮蛙吏,可有效減少通信傳輸?shù)臄?shù)據(jù)量。但壓縮會對服務(wù)器和瀏覽器產(chǎn)生一定壓力蹋肮,需要權(quán)衡出刷。
  • CSS放在頁面最上面,JavaScript放在頁面最下面
  • 減少Cookie傳輸
    一是靜態(tài)資源不要攜帶Cookie坯辩,而是盡量減小Cookie本身攜帶的數(shù)據(jù)量馁龟。

2.2 使用CDN加速

主要將靜態(tài)資源(如圖片、文件漆魔、CSS坷檩、JavaScript、靜態(tài)網(wǎng)頁等)放在網(wǎng)絡(luò)服務(wù)提供商的本地機房中進行緩存

2.3 使用反向代理服務(wù)器

傳統(tǒng)代理服務(wù)器位于瀏覽器一側(cè)改抡,代理瀏覽器將HTTP請求發(fā)送到互聯(lián)網(wǎng)上矢炼。而反向代理服務(wù)器位于網(wǎng)站機房一側(cè),代理網(wǎng)站的Web服務(wù)器接受HTTP請求阿纤,來自互聯(lián)網(wǎng)的所有訪問請求必須經(jīng)過代理服務(wù)再到達應(yīng)用服務(wù)器句灌。

反向代理可以實現(xiàn)的三個作用:

  • 保護網(wǎng)站安全:相當于在Web服務(wù)器和可能的網(wǎng)絡(luò)攻擊之間建立了一個屏障
  • 緩存:當靜態(tài)內(nèi)容第一次被訪問后,就將靜態(tài)內(nèi)容緩存在反向代理服務(wù)器上,之后相同的靜態(tài)內(nèi)容請求可以直接從反向代理服務(wù)器返回胰锌,不必再到達應(yīng)用服務(wù)器骗绕。也可以將像熱門詞條、帖子资昧、博客等動態(tài)內(nèi)容緩存在反向代理服務(wù)器上酬土。
  • 實現(xiàn)負載均衡

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

3.1 分布式緩存

  • 緩存的基本原理
    緩存是指將數(shù)據(jù)存儲在訪問速度較快的存儲介質(zhì)中(如內(nèi)存)格带。緩存的本質(zhì)是一個內(nèi)存Hash表撤缴,數(shù)據(jù)以一對key、value的形式存儲在內(nèi)存Hash表中--數(shù)據(jù)讀寫的時間復(fù)雜度為O(1)叽唱。
    緩存主要用來存放讀寫比(大于2)高屈呕、很少變化的數(shù)據(jù)。

  • 合理使用緩存
    ①頻繁修改的數(shù)據(jù)不要放在緩存中棺亭;
    ②只緩存熱點數(shù)據(jù)凉袱。內(nèi)存有限,如果沒有熱點侦铜,大部分數(shù)據(jù)還沒有被再次訪問就被擠出緩存了专甩;
    ③應(yīng)用要容忍一定時間的數(shù)據(jù)不一致,如果數(shù)據(jù)更新后立即更新緩存钉稍,會帶來更多系統(tǒng)開銷和事務(wù)一致性問題涤躲;
    ④通過分布式緩存服務(wù)器集群提高緩存可用性
    ⑤緩存預(yù)熱
    ⑥準備好應(yīng)對緩存穿透(訪問的數(shù)據(jù)不在緩存中,直接落到數(shù)據(jù)庫上):一個簡單的對策是將不存在的數(shù)據(jù)也緩存起來贡未,value設(shè)為null种樱。

  • 分布式緩存架構(gòu)
    分布式緩存是指緩存部署在多個服務(wù)器組成的集群中,以集群方法提供緩存服務(wù)俊卤。其架構(gòu)有兩種方式:
    ①以JBoss Cache為代表的需要更新同步的分布式緩存:
    集群中的所有服務(wù)器中保存相同的緩存數(shù)據(jù)嫩挤,當某臺服務(wù)器有緩存數(shù)據(jù)更新的時候,會通知集群中的其他機器進行更新緩存會或清除緩存數(shù)據(jù)消恍。通常岂昭,將應(yīng)用程序和緩存部署在同一臺服務(wù)器上(應(yīng)用程序也是集群部署),應(yīng)用程序可以從本地快速獲取緩存數(shù)據(jù)狠怨。但由于數(shù)據(jù)同步的代價較大约啊,這種方案更多見于企業(yè)應(yīng)用中,很少在大型網(wǎng)站中使用佣赖。
    ②以Memcached為代表的不互相通信的分布式緩存:
    緩存與應(yīng)用分離部署恰矩,應(yīng)用程序通過一致性Hash等路由算法來確定緩存數(shù)據(jù)存放的緩存服務(wù)器,然后遠程訪問獲取緩存數(shù)據(jù)憎蛤。緩存服務(wù)器之間不需要通信外傅,緩存集群的規(guī)模可以很容易地實現(xiàn)擴容,具有良好的可伸縮性萎胰。
    Memcached的特點:簡單的通信協(xié)議彬碱;豐富的客戶端支持;高性能的網(wǎng)絡(luò)通信奥洼;高效的內(nèi)存管理;互不通信的服務(wù)器集群架構(gòu)晚胡;

3.2 使用消息隊列實現(xiàn)異步操作

使用消息隊列將調(diào)用異步化灵奖,可改善網(wǎng)站的擴展性,還可以改善網(wǎng)站系統(tǒng)的性能估盘。
主要體現(xiàn)在使用消息隊列進行削峰:通過異步處理瓷患,將短時間高并發(fā)產(chǎn)生的事務(wù)消息存儲在消息隊列中,從而削平高峰期的并發(fā)事務(wù)遣妥。但由于數(shù)據(jù)在后續(xù)的業(yè)務(wù)校驗擅编、寫數(shù)據(jù)庫等操作中有可能失敗,因此在使用消息隊列進行業(yè)務(wù)異步處理后箫踩,需要適當修改業(yè)務(wù)流程進行配合爱态。

3.3 使用集群

使用負載均衡技術(shù)構(gòu)建應(yīng)用服務(wù)器集群,將并發(fā)訪問請求發(fā)到多臺服務(wù)器進行處理境钟,避免單一應(yīng)用服務(wù)器因負載壓力過大而響應(yīng)緩慢锦担。

3.4 代碼優(yōu)化

  • 多線程
    ①一臺應(yīng)用服務(wù)器上啟動多少線程合適?可供參考的估算公式:
    啟動線程數(shù)=[任務(wù)執(zhí)行時間/(任務(wù)執(zhí)行時間-IO等待時間)]×CPU內(nèi)核數(shù)
    ②線程安全問題的解決手段
    a.將對象設(shè)計為無狀態(tài)對象(如Java中的Servlet就是無狀態(tài)對象):無狀態(tài)對象是指對象本身不存儲狀態(tài)信息對象無成員變量或者成員變量本身也是無狀態(tài)對象慨削。(我覺得還有一種就是有狀態(tài)洞渔,但是狀態(tài)只能是一種,永遠不會改變)---不符合面向?qū)ο蟮乃枷耄?br> b.使用局部對象:在方法內(nèi)部創(chuàng)建對象缚态,這些對象會被進入該方法的每個線程創(chuàng)建磁椒,除非程序手動將對象傳遞給其他線程,否則不會出現(xiàn)對象被多線程并發(fā)訪問的情形玫芦。
    c.并發(fā)訪問資源時浆熔,使用鎖。隨著操作系統(tǒng)和編程語言的進步桥帆,出現(xiàn)各種輕量級鎖蘸拔,使得運行期線程獲取鎖和釋放鎖的代價變小,但由于鎖導(dǎo)致線程同步順序執(zhí)行环葵,可能會對系統(tǒng)性能產(chǎn)生嚴重影響调窍。

  • 資源復(fù)用
    主要有兩種方式:單例和對象池。
    單例:使用同一個對象张遭。Spring默認構(gòu)造的對象都是單例邓萨。
    對象池:比如線程池、連接池等可以理解為對象池,都由一個池來管理固定的幾個對象(可能有最大缔恳、最小值)宝剖,使用的時候從池里面拿出閑著的那個對象來用,用完還給池歉甚。

  • 數(shù)據(jù)結(jié)構(gòu)
    靈活組合各種數(shù)據(jù)機構(gòu)改善數(shù)據(jù)讀寫和計算特性万细。

  • 垃圾回收
    如果應(yīng)用運行在JVM等就有垃圾回收功能的環(huán)境中,那么垃圾回收可能會對系統(tǒng)的性能產(chǎn)生巨大影響纸泄。理解垃圾回收機制有助于程序優(yōu)化和參數(shù)調(diào)優(yōu)赖钞,以及編寫內(nèi)存安全的代碼。

3.5 存儲性能優(yōu)化
  • 固態(tài)硬盤 vs 機械硬盤
  • B+樹 vs LSM樹
  • RAID vs HDFS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聘裁,一起剝皮案震驚了整個濱河市雪营,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衡便,老刑警劉巖献起,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異镣陕,居然都是意外死亡谴餐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碱鳞,你說我怎么就攤上這事舆床。” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我年枕,道長,這世上最難降的妖魔是什么乎完? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任熏兄,我火速辦了婚禮,結(jié)果婚禮上树姨,老公的妹妹穿的比我還像新娘摩桶。我一直安慰自己,他們只是感情好帽揪,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布硝清。 她就那樣靜靜地躺著,像睡著了一般转晰。 火紅的嫁衣襯著肌膚如雪芦拿。 梳的紋絲不亂的頭發(fā)上士飒,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音蔗崎,去河邊找鬼酵幕。 笑死,一個胖子當著我的面吹牛缓苛,可吹牛的內(nèi)容都是我干的芳撒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼未桥,長吁一口氣:“原來是場噩夢啊……” “哼笔刹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钢属,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎门躯,沒想到半個月后淆党,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡讶凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年染乌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懂讯。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡荷憋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褐望,到底是詐尸還是另有隱情勒庄,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布瘫里,位于F島的核電站实蔽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谨读。R本人自食惡果不足惜局装,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劳殖。 院中可真熱鬧铐尚,春花似錦、人聲如沸哆姻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矛缨。三九已至统舀,卻和暖如春匆骗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誉简。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工碉就, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闷串。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓瓮钥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烹吵。 傳聞我的和親對象是個殘疾皇子碉熄,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 性能既是客觀指標,諸如響應(yīng)時間肋拔、吞吐量等技術(shù)指標锈津;又是實際參與者的主觀感受。 1 性能測試 性能測試是性能優(yōu)化的前...
    deniro閱讀 1,345評論 2 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理凉蜂,服務(wù)發(fā)現(xiàn)琼梆,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 概述 1 架構(gòu)演化大型網(wǎng)站的關(guān)注指標高可用 高性能 易擴展 可伸縮 安全 大型網(wǎng)站的特點高并發(fā)茎杂,大流量 高可用 海...
    西西老師閱讀 2,815評論 0 12
  • 大型網(wǎng)站架構(gòu)演化 大型網(wǎng)站的關(guān)注指標 高可用 高性能 易擴展 可伸縮 安全 大型網(wǎng)站的特點 高并發(fā),大流量 高可用...
    技術(shù)修行者閱讀 2,560評論 1 13
  • 姓名:王成茗 日精進打卡第19天 【打卡始于2017.10.12持續(xù)于2017.10.30】 【知~學習】...
    王成茗閱讀 168評論 0 0