溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么

發(fā)布時(shí)間:2022-01-07 20:17:50 來源:億速云 閱讀:127 作者:iii 欄目:編程語言

本文小編為大家詳細(xì)介紹“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

1. 性能測試

1.1. 性能指標(biāo)

網(wǎng)站性能測試的主要指標(biāo)有:

  • 響應(yīng)時(shí)間 - 響應(yīng)時(shí)間(RT)是指從客戶端發(fā)一個(gè)請(qǐng)求開始計(jì)時(shí),到客戶端接收到從服務(wù)器端返回的響應(yīng)結(jié)果結(jié)束所經(jīng)歷的時(shí)間,響應(yīng)時(shí)間由請(qǐng)求發(fā)送時(shí)間、網(wǎng)絡(luò)傳輸時(shí)間和服務(wù)器處理時(shí)間三部分組成。

  • 并發(fā)數(shù) - 系統(tǒng)同時(shí)處理的請(qǐng)求、事務(wù)數(shù)。

  • 吞吐量 - TPS(每秒事務(wù)數(shù))、HPS(每秒 HTTP 請(qǐng)求數(shù))、QPS(每秒查詢數(shù))。

  • 性能計(jì)數(shù)器 - 系統(tǒng)負(fù)載、對(duì)象與線程數(shù)、內(nèi)存使用、CPU 使用、磁盤與網(wǎng)絡(luò) IO 等。這些指標(biāo)也是系統(tǒng)監(jiān)控的重要參數(shù)。

1.2. 性能測試方法

  • 性能測試

  • 負(fù)載測試

  • 壓力測試

  • 穩(wěn)定性測試

1.3. 性能測試報(bào)告

性能測試報(bào)告示例:

大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么

1.4. 性能優(yōu)化策略

  1. 性能分析 - 如果請(qǐng)求響應(yīng)慢,存在性能問題。需要對(duì)請(qǐng)求經(jīng)歷的各個(gè)環(huán)節(jié)逐一分析,排查可能出現(xiàn)性能瓶頸的地方,定位問題。檢查監(jiān)控?cái)?shù)據(jù),分析影響性能的主要因素:內(nèi)存、磁盤、網(wǎng)絡(luò)、CPU,可能是代碼或架構(gòu)設(shè)計(jì)不合理,又或者是系統(tǒng)資源確實(shí)不足。

  2. 性能優(yōu)化 - 性能優(yōu)化根據(jù)網(wǎng)站分層架構(gòu),大致可分為前端性能優(yōu)化、應(yīng)用服務(wù)性能優(yōu)化、存儲(chǔ)服務(wù)性能優(yōu)化。

2. 前端性能優(yōu)化

2.1. 瀏覽器訪問優(yōu)化

  1. 減少 HTTP 請(qǐng)求 - HTTP 請(qǐng)求需要建立通信鏈路,進(jìn)行數(shù)據(jù)傳輸,開銷高昂,所以減少 HTTP 請(qǐng)求數(shù)可以有效提高訪問性能。減少 HTTP 的主要手段是合并 Css、JavaScript、圖片。

  2. 使用瀏覽器緩存 - 因?yàn)殪o態(tài)資源文件更新頻率低,可以緩存瀏覽器中以提高性能。設(shè)置 HTTP 頭中的 Cache-Control 和 Expires 屬性,可以設(shè)定瀏覽器緩存。

  3. 啟用壓縮 - 在服務(wù)器端壓縮靜態(tài)資源文件,在瀏覽器端解壓縮,可以有效減少傳輸?shù)臄?shù)據(jù)量。由于文本文件壓縮率可達(dá) 80% 以上,所以可以對(duì)靜態(tài)資源,如 Html、Css、JavaScrip 進(jìn)行壓縮。

  4. CSS 放在頁面最上面,JavaScript 放在頁面最下面 - 瀏覽器會(huì)在下載完全部的 Css 后才對(duì)整個(gè)頁面進(jìn)行渲染,所以最好的做法是將 Css 放在頁面最上面,讓瀏覽器盡快下載 Css;JavaScript 則相反,瀏覽器加載 JavaScript 后立即執(zhí)行,可能會(huì)阻塞整個(gè)頁面,造成頁面顯示緩慢,因此 JavaScript 最好放在頁面最下面。

  5. 減少 Cookie 傳輸 - Cookie 包含在 HTTP 每次的請(qǐng)求和響應(yīng)中,太大的 Cookie 會(huì)嚴(yán)重影響數(shù)據(jù)傳輸。

2.2. CDN

CDN 一般緩存的是靜態(tài)資源。

CDN 的本質(zhì)仍然是一個(gè)緩存,而且將數(shù)據(jù)緩存在離用戶最近的地方,使用戶已最快速度獲取數(shù)據(jù),即所謂網(wǎng)絡(luò)訪問第一跳。

大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么

2.3. 反向代理

傳統(tǒng)代理服務(wù)器位于瀏覽器一側(cè),代理瀏覽器將 HTTP 請(qǐng)求發(fā)送到互聯(lián)網(wǎng)上,而反向代理服務(wù)器位于網(wǎng)站機(jī)房一側(cè),代理網(wǎng)站服務(wù)器接收 HTTP 請(qǐng)求。

大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么

反向代理服務(wù)器可以配置緩存功能加速 Web 請(qǐng)求,當(dāng)用戶第一次訪問靜態(tài)內(nèi)容時(shí),靜態(tài)內(nèi)容就會(huì)被緩存在反向代理服務(wù)器上。

反向代理還可以實(shí)現(xiàn)負(fù)載均衡,通過負(fù)載均衡構(gòu)建的集群可以提高系統(tǒng)總體處理能力。

因?yàn)樗姓?qǐng)求都必須先經(jīng)過反向代理服務(wù)器,所以可以屏蔽一些攻擊 IP,達(dá)到保護(hù)網(wǎng)站安全的作用。

3. 應(yīng)用服務(wù)性能優(yōu)化

3.1. 分布式緩存

網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能。

緩存原理

緩存指將數(shù)據(jù)存儲(chǔ)在相對(duì)較高訪問速度的存儲(chǔ)介質(zhì)中,以供系統(tǒng)處理。一方面緩存訪問速度快,可以減少數(shù)據(jù)訪問的時(shí)間,另一方面如果緩存的數(shù)據(jù)是經(jīng)過計(jì)算處理得到的,那么被緩存的數(shù)據(jù)無需重復(fù)計(jì)算即可直接使用,因此緩存還起到減少計(jì)算時(shí)間的作用。

緩存的本質(zhì)是一個(gè)內(nèi)存 HASH 表。

緩存主要用來存放那些讀寫比很高、很少變化的數(shù)據(jù),如商品的類目信息,熱門詞的搜索列表信息、熱門商品信息等。

合理使用緩存

緩存數(shù)據(jù)的選擇:

  • 不要存儲(chǔ)頻繁修改的數(shù)據(jù)

  • 不要存儲(chǔ)非熱點(diǎn)數(shù)據(jù)

數(shù)據(jù)不一致和臟讀:

  • 緩存有有效期,所以存在一定時(shí)間的數(shù)據(jù)不一致和臟讀問題。如果不能接受,可以考慮使用數(shù)據(jù)更新立即更新緩存策略

需要考慮緩存問題:緩存雪崩、緩存穿透、緩存預(yù)熱

3.2. 異步操作

異步處理一般是通過分布式消息隊(duì)列的方式。

異步處理可以解決一下問題:

  • 異步處理

  • 應(yīng)用解耦

  • 流量削鋒

  • 日志處理

  • 消息通訊

3.3. 使用集群

在高并發(fā)場景下,使用負(fù)載均衡技術(shù)為一個(gè)應(yīng)用構(gòu)建一個(gè)由多臺(tái)服務(wù)器組成的服務(wù)器集群,將并發(fā)訪問請(qǐng)求分發(fā)到多臺(tái)服務(wù)器上處理,避免單一服務(wù)器因負(fù)載壓力過大而響應(yīng)緩慢,使用戶請(qǐng)求具有更好的響應(yīng)延遲特性。

3.4. 代碼優(yōu)化

多線程

從資源利用的角度看,使用多線程的原因主要有兩個(gè):IO 阻塞和多 CPU。

線程數(shù)并非越多越好,那么啟動(dòng)多少線程合適呢?

有個(gè)參考公式:

啟動(dòng)線程數(shù) = (任務(wù)執(zhí)行時(shí)間 / (任務(wù)執(zhí)行時(shí)間 - IO 等待時(shí)間)) * CPU 內(nèi)核數(shù)

最佳啟動(dòng)線程數(shù)和 CPU 內(nèi)核數(shù)成正比,和 IO 阻塞時(shí)間成反比。如果任務(wù)都是 CPU 計(jì)算型任務(wù),那么線程數(shù)最多不要超過 CPU 內(nèi)核數(shù),因?yàn)閱?dòng)再多線程,CPU 也來不及調(diào)度;相反如果是任務(wù)需要等待磁盤操作,網(wǎng)絡(luò)響應(yīng),那么多啟動(dòng)線程有助于任務(wù)并罰賭,提高系統(tǒng)吞吐量。

線程安全問題

  • 將對(duì)象設(shè)計(jì)為無狀態(tài)對(duì)象

  • 使用局部對(duì)象

  • 并發(fā)訪問資源時(shí)使用鎖

資源復(fù)用

應(yīng)該盡量減少那些開銷很大的系統(tǒng)資源的創(chuàng)建和銷毀,如數(shù)據(jù)庫連接、網(wǎng)絡(luò)通信連接、線程、復(fù)雜對(duì)象等。從編程角度,資源復(fù)用主要有兩種模式:單例模式和對(duì)象池。

數(shù)據(jù)結(jié)構(gòu)

根據(jù)具體場景,選擇合適的數(shù)據(jù)結(jié)構(gòu)。

垃圾回收

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

4. 存儲(chǔ)性能優(yōu)化

4.1. 機(jī)械鍵盤和固態(tài)硬盤

考慮使用固態(tài)硬盤替代機(jī)械鍵盤,因?yàn)樗淖x寫速度更快。

4.2. B+數(shù)和 LSM 樹

傳統(tǒng)關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫索引一般都使用兩級(jí)索引的 B+ 樹結(jié)構(gòu),樹的層次最多三層。因此可能需要 5 次磁盤訪問才能更新一條記錄(三次磁盤訪問獲得數(shù)據(jù)索引及行 ID,然后再進(jìn)行一次數(shù)據(jù)文件讀操作及一次數(shù)據(jù)文件寫操作)。

由于磁盤訪問是隨機(jī)的,傳統(tǒng)機(jī)械鍵盤在數(shù)據(jù)隨機(jī)訪問時(shí)性能較差,每次數(shù)據(jù)訪問都需要多次訪問磁盤影響數(shù)據(jù)訪問性能。

許多 Nosql 數(shù)據(jù)庫中的索引采用 LSM 樹作為主要數(shù)據(jù)結(jié)構(gòu)。LSM 樹可視為一個(gè) N 階合并樹。數(shù)據(jù)寫操作都在內(nèi)存中進(jìn)行。在 LSM 樹上進(jìn)行一次數(shù)據(jù)更新不需要磁盤訪問,速度遠(yuǎn)快于 B+ 樹。

4.3. RAID 和 HDFS

HDFS(分布式文件系統(tǒng)) 更被大型網(wǎng)站所青睞。它可以配合 MapReduce 并發(fā)計(jì)算任務(wù)框架進(jìn)行大數(shù)據(jù)處理,可以在整個(gè)集群上并發(fā)訪問所有磁盤,無需 RAID 支持。

讀到這里,這篇“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計(jì)方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI