本文小編為大家詳細(xì)介紹“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、無棣網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為無棣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
網(wǎng)站性能測試的主要指標(biāo)有:
響應(yīng)時間 - 響應(yīng)時間(RT)是指從客戶端發(fā)一個請求開始計時,到客戶端接收到從服務(wù)器端返回的響應(yīng)結(jié)果結(jié)束所經(jīng)歷的時間,響應(yīng)時間由請求發(fā)送時間、網(wǎng)絡(luò)傳輸時間和服務(wù)器處理時間三部分組成。
并發(fā)數(shù) - 系統(tǒng)同時處理的請求、事務(wù)數(shù)。
吞吐量 - TPS(每秒事務(wù)數(shù))、HPS(每秒 HTTP 請求數(shù))、QPS(每秒查詢數(shù))。
性能計數(shù)器 - 系統(tǒng)負(fù)載、對象與線程數(shù)、內(nèi)存使用、CPU 使用、磁盤與網(wǎng)絡(luò) IO 等。這些指標(biāo)也是系統(tǒng)監(jiān)控的重要參數(shù)。
性能測試
負(fù)載測試
壓力測試
穩(wěn)定性測試
性能測試報告示例:
性能分析 - 如果請求響應(yīng)慢,存在性能問題。需要對請求經(jīng)歷的各個環(huán)節(jié)逐一分析,排查可能出現(xiàn)性能瓶頸的地方,定位問題。檢查監(jiān)控數(shù)據(jù),分析影響性能的主要因素:內(nèi)存、磁盤、網(wǎng)絡(luò)、CPU,可能是代碼或架構(gòu)設(shè)計不合理,又或者是系統(tǒng)資源確實不足。
性能優(yōu)化 - 性能優(yōu)化根據(jù)網(wǎng)站分層架構(gòu),大致可分為前端性能優(yōu)化、應(yīng)用服務(wù)性能優(yōu)化、存儲服務(wù)性能優(yōu)化。
減少 HTTP 請求 - HTTP 請求需要建立通信鏈路,進行數(shù)據(jù)傳輸,開銷高昂,所以減少 HTTP 請求數(shù)可以有效提高訪問性能。減少 HTTP 的主要手段是合并 Css、JavaScript、圖片。
使用瀏覽器緩存 - 因為靜態(tài)資源文件更新頻率低,可以緩存瀏覽器中以提高性能。設(shè)置 HTTP 頭中的 Cache-Control 和 Expires 屬性,可以設(shè)定瀏覽器緩存。
啟用壓縮 - 在服務(wù)器端壓縮靜態(tài)資源文件,在瀏覽器端解壓縮,可以有效減少傳輸?shù)臄?shù)據(jù)量。由于文本文件壓縮率可達 80% 以上,所以可以對靜態(tài)資源,如 Html、Css、JavaScrip 進行壓縮。
CSS 放在頁面最上面,JavaScript 放在頁面最下面 - 瀏覽器會在下載完全部的 Css 后才對整個頁面進行渲染,所以最好的做法是將 Css 放在頁面最上面,讓瀏覽器盡快下載 Css;JavaScript 則相反,瀏覽器加載 JavaScript 后立即執(zhí)行,可能會阻塞整個頁面,造成頁面顯示緩慢,因此 JavaScript 最好放在頁面最下面。
減少 Cookie 傳輸 - Cookie 包含在 HTTP 每次的請求和響應(yīng)中,太大的 Cookie 會嚴(yán)重影響數(shù)據(jù)傳輸。
CDN 一般緩存的是靜態(tài)資源。
CDN 的本質(zhì)仍然是一個緩存,而且將數(shù)據(jù)緩存在離用戶最近的地方,使用戶已最快速度獲取數(shù)據(jù),即所謂網(wǎng)絡(luò)訪問第一跳。
傳統(tǒng)代理服務(wù)器位于瀏覽器一側(cè),代理瀏覽器將 HTTP 請求發(fā)送到互聯(lián)網(wǎng)上,而反向代理服務(wù)器位于網(wǎng)站機房一側(cè),代理網(wǎng)站服務(wù)器接收 HTTP 請求。
反向代理服務(wù)器可以配置緩存功能加速 Web 請求,當(dāng)用戶第一次訪問靜態(tài)內(nèi)容時,靜態(tài)內(nèi)容就會被緩存在反向代理服務(wù)器上。
反向代理還可以實現(xiàn)負(fù)載均衡,通過負(fù)載均衡構(gòu)建的集群可以提高系統(tǒng)總體處理能力。
因為所有請求都必須先經(jīng)過反向代理服務(wù)器,所以可以屏蔽一些攻擊 IP,達到保護網(wǎng)站安全的作用。
網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能。
緩存指將數(shù)據(jù)存儲在相對較高訪問速度的存儲介質(zhì)中,以供系統(tǒng)處理。一方面緩存訪問速度快,可以減少數(shù)據(jù)訪問的時間,另一方面如果緩存的數(shù)據(jù)是經(jīng)過計算處理得到的,那么被緩存的數(shù)據(jù)無需重復(fù)計算即可直接使用,因此緩存還起到減少計算時間的作用。
緩存的本質(zhì)是一個內(nèi)存 HASH 表。
緩存主要用來存放那些讀寫比很高、很少變化的數(shù)據(jù),如商品的類目信息,熱門詞的搜索列表信息、熱門商品信息等。
緩存數(shù)據(jù)的選擇:
不要存儲頻繁修改的數(shù)據(jù)
不要存儲非熱點數(shù)據(jù)
數(shù)據(jù)不一致和臟讀:
緩存有有效期,所以存在一定時間的數(shù)據(jù)不一致和臟讀問題。如果不能接受,可以考慮使用數(shù)據(jù)更新立即更新緩存策略
需要考慮緩存問題:緩存雪崩、緩存穿透、緩存預(yù)熱
異步處理一般是通過分布式消息隊列的方式。
異步處理可以解決一下問題:
異步處理
應(yīng)用解耦
流量削鋒
日志處理
消息通訊
在高并發(fā)場景下,使用負(fù)載均衡技術(shù)為一個應(yīng)用構(gòu)建一個由多臺服務(wù)器組成的服務(wù)器集群,將并發(fā)訪問請求分發(fā)到多臺服務(wù)器上處理,避免單一服務(wù)器因負(fù)載壓力過大而響應(yīng)緩慢,使用戶請求具有更好的響應(yīng)延遲特性。
從資源利用的角度看,使用多線程的原因主要有兩個:IO 阻塞和多 CPU。
線程數(shù)并非越多越好,那么啟動多少線程合適呢?
有個參考公式:
啟動線程數(shù) = (任務(wù)執(zhí)行時間 / (任務(wù)執(zhí)行時間 - IO 等待時間)) * CPU 內(nèi)核數(shù)
最佳啟動線程數(shù)和 CPU 內(nèi)核數(shù)成正比,和 IO 阻塞時間成反比。如果任務(wù)都是 CPU 計算型任務(wù),那么線程數(shù)最多不要超過 CPU 內(nèi)核數(shù),因為啟動再多線程,CPU 也來不及調(diào)度;相反如果是任務(wù)需要等待磁盤操作,網(wǎng)絡(luò)響應(yīng),那么多啟動線程有助于任務(wù)并罰賭,提高系統(tǒng)吞吐量。
線程安全問題
將對象設(shè)計為無狀態(tài)對象
使用局部對象
并發(fā)訪問資源時使用鎖
應(yīng)該盡量減少那些開銷很大的系統(tǒng)資源的創(chuàng)建和銷毀,如數(shù)據(jù)庫連接、網(wǎng)絡(luò)通信連接、線程、復(fù)雜對象等。從編程角度,資源復(fù)用主要有兩種模式:單例模式和對象池。
根據(jù)具體場景,選擇合適的數(shù)據(jù)結(jié)構(gòu)。
如果 Web 應(yīng)用運行在 JVM 等具有垃圾回收功能的環(huán)境中,那么垃圾回收可能會對系統(tǒng)的性能特性產(chǎn)生巨大影響。立即垃圾回收機制有助于程序優(yōu)化和參數(shù)調(diào)優(yōu),以及編寫內(nèi)存安全的代碼。
考慮使用固態(tài)硬盤替代機械鍵盤,因為它的讀寫速度更快。
傳統(tǒng)關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫索引一般都使用兩級索引的 B+ 樹結(jié)構(gòu),樹的層次最多三層。因此可能需要 5 次磁盤訪問才能更新一條記錄(三次磁盤訪問獲得數(shù)據(jù)索引及行 ID,然后再進行一次數(shù)據(jù)文件讀操作及一次數(shù)據(jù)文件寫操作)。
由于磁盤訪問是隨機的,傳統(tǒng)機械鍵盤在數(shù)據(jù)隨機訪問時性能較差,每次數(shù)據(jù)訪問都需要多次訪問磁盤影響數(shù)據(jù)訪問性能。
許多 NOSQL 數(shù)據(jù)庫中的索引采用 LSM 樹作為主要數(shù)據(jù)結(jié)構(gòu)。LSM 樹可視為一個 N 階合并樹。數(shù)據(jù)寫操作都在內(nèi)存中進行。在 LSM 樹上進行一次數(shù)據(jù)更新不需要磁盤訪問,速度遠(yuǎn)快于 B+ 樹。
HDFS(分布式文件系統(tǒng)) 更被大型網(wǎng)站所青睞。它可以配合 MapReduce 并發(fā)計算任務(wù)框架進行大數(shù)據(jù)處理,可以在整個集群上并發(fā)訪問所有磁盤,無需 RAID 支持。
讀到這里,這篇“大型網(wǎng)站背后的高性能系統(tǒng)架構(gòu)設(shè)計方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。