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