干貨!史上最詳細(xì)腦圖《大型網(wǎng)站技術(shù)架構(gòu)》
時間:2023-04-18 22:54:02 | 來源:網(wǎng)站運(yùn)營
時間:2023-04-18 22:54:02 來源:網(wǎng)站運(yùn)營
干貨!史上最詳細(xì)腦圖《大型網(wǎng)站技術(shù)架構(gòu)》:
1. 介紹一下
《大型網(wǎng)站技術(shù)架構(gòu)》這本書可能很多人都看過,小編個人覺得真的是非常不錯的一本書。
看完這本書后,你會對如何設(shè)計(jì)大型網(wǎng)站架構(gòu),有非常清晰的思路。
如果還沒有讀過的小伙伴,趕緊去讀一讀吧。
PS:小編這里有這本書的Kiddle電子版,如有需要可聯(lián)系我獲取哦!
2. 架構(gòu)思路
1. 大型網(wǎng)站系統(tǒng)特點(diǎn)
既然談的是大型網(wǎng)站架構(gòu),所謂“大型”網(wǎng)站,首先需要了解大型網(wǎng)站系統(tǒng)具有什么樣的特點(diǎn)。一般大型網(wǎng)站系統(tǒng)都具有如下共同特點(diǎn):
- 高并發(fā),大流量
- 高可用
- 海量數(shù)據(jù)
- 用戶分布廣,網(wǎng)絡(luò)情況復(fù)雜
- 安全環(huán)境惡劣
- 需求快速變更,發(fā)布頻繁
- 漸進(jìn)式發(fā)展和演化
2. 大型網(wǎng)站架構(gòu)核心要素
基于大型網(wǎng)站系統(tǒng)的特點(diǎn),需要圍繞這些特點(diǎn)來設(shè)計(jì)系統(tǒng)架構(gòu)?;诖?,可以概括出設(shè)計(jì)大型網(wǎng)站需要考慮的核心架構(gòu)要素。
設(shè)計(jì)大型網(wǎng)站系統(tǒng)的核心架構(gòu)要素:
本書的核心內(nèi)容其實(shí)就是針對這幾個核心架構(gòu)要素一一展開。
1. 設(shè)計(jì)『 高性能 』的網(wǎng)站架構(gòu)
對于大型網(wǎng)站,設(shè)計(jì)高性能的架構(gòu)一般從以下幾個方面考慮:
- 優(yōu)化網(wǎng)站響應(yīng)速度
- 優(yōu)化網(wǎng)站處理并發(fā)請求的能力
- 優(yōu)化數(shù)據(jù)存儲的性能
所謂高性能,
從網(wǎng)站的用戶角度來看,無非就是訪問網(wǎng)站的『 響應(yīng)速度要快 』。
從系統(tǒng)角度看,由于同時訪問的用戶數(shù)巨大,因此同時到達(dá)系統(tǒng)服務(wù)器的『 并發(fā)請求數(shù) 』非常大。
從后端數(shù)據(jù)存儲來看,優(yōu)化『 海量數(shù)據(jù)存儲 』的能力,避免后端數(shù)據(jù)存儲性能緩慢而成為系統(tǒng)性能瓶頸。
優(yōu)化網(wǎng)站響應(yīng)速度重要提示:
網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存技術(shù)優(yōu)化性能
優(yōu)化網(wǎng)站響應(yīng)速度的主要手段是使用『 緩存 』,使用緩存是提高網(wǎng)站響應(yīng)速度效果最顯著的辦法。
例如對于前端,可以使用CDN,反向代理,這些都是利用的緩存技術(shù)。對于應(yīng)用服務(wù)器的性能優(yōu)化,一個主要的手段也是使用緩存,在提高響應(yīng)速度的同時,也減輕了對后端數(shù)據(jù)庫的壓力。如果是有海量數(shù)據(jù)的超大型系統(tǒng),甚至需要用到分布式緩存系統(tǒng)。
另外一個優(yōu)化響應(yīng)速度的手段是『 異步消息處理 』。異步消息處理是指,在應(yīng)用服務(wù)器與后端服務(wù)之間使用消息隊(duì)列,應(yīng)用服務(wù)器總是將用戶請求扔進(jìn)消息隊(duì)列,并立即返回用戶,后端服務(wù)異步從消息隊(duì)列中取出請求數(shù)據(jù)進(jìn)行處理。由于請求發(fā)送到消息隊(duì)列后就立即返回了,因此用戶會感知到更快的響應(yīng)速度。
使用消息隊(duì)列還具有削峰的作用,當(dāng)瞬間有大量請求到達(dá)系統(tǒng)后,這些請求數(shù)據(jù)會進(jìn)入消息隊(duì)列,而不會瞬間涌入后端服務(wù)器,從而起到保護(hù)后端服務(wù)的作用。
優(yōu)化網(wǎng)站處理并發(fā)請求的能力除此之外,還要支持巨大的并發(fā)請求數(shù),一般手段是使用『 集群 』。
應(yīng)用服務(wù)器一般需要從單臺服務(wù)器擴(kuò)展為多臺服務(wù)器,構(gòu)成應(yīng)用服務(wù)器集群,然后引入負(fù)載均衡服務(wù)器,將用戶請求分?jǐn)偟讲煌膽?yīng)用服務(wù)器進(jìn)行處理。
集群可以很容易進(jìn)行伸縮(增加或減少服務(wù)器數(shù)量),因此可以有效支持在不同場景下的不同并發(fā)請求量。如秒殺場景下,可以快速增加服務(wù)器到集群中,從而分?jǐn)傆脩粽埱?,減輕其他服務(wù)器的壓力。
優(yōu)化數(shù)據(jù)存儲的性能單從優(yōu)化數(shù)據(jù)存儲性能方面來看,主要的優(yōu)化手段有:
- 使用性能更高的硬盤,如使用固態(tài)硬盤,讀寫速度更快。
- 替換傳統(tǒng)關(guān)系型數(shù)據(jù)庫,使用NoSQL數(shù)據(jù)庫。NoSQL數(shù)據(jù)庫的數(shù)據(jù)讀寫速度一般優(yōu)于傳統(tǒng)關(guān)系型數(shù)據(jù)庫。
- 使用分布式文件系統(tǒng)。分布式文件系統(tǒng)具有并發(fā)讀寫能力,因此可以有效提高數(shù)據(jù)存儲的并發(fā)能力。
2. 設(shè)計(jì)『 高可用 』的網(wǎng)站架構(gòu)
重要提示:
實(shí)現(xiàn)高可用架構(gòu)的主要手段是數(shù)據(jù)和服務(wù)的『 冗余備份 』和『 失效轉(zhuǎn)移 』
所謂高可用,即在任何時刻,應(yīng)該盡量保證系統(tǒng)是可用的。
使用集群實(shí)現(xiàn)數(shù)據(jù)和服務(wù)的冗余備份,當(dāng)集群中某個服務(wù)器宕機(jī)時,失效轉(zhuǎn)移機(jī)制會將用戶請求分發(fā)到集群中其他可用服務(wù)器上,從而可以保證用戶請求被正確處理。
使用集群有個前提條件是,各個服務(wù)器上運(yùn)行的服務(wù)應(yīng)盡量是無狀態(tài)的這樣各個服務(wù)器之間就不會存在差異。但是對于應(yīng)用服務(wù)器,如果保存了用戶Session數(shù)據(jù),那么它們就是有狀態(tài)的。這種情況下需要考慮如何處理Session狀態(tài)數(shù)據(jù)??梢圆捎锚?dú)立的分布式Session服務(wù)器集群來專門緩存用戶Session數(shù)據(jù),從而使應(yīng)用服務(wù)器變成無狀態(tài)的。
冗余備份與失效轉(zhuǎn)移手段適用于網(wǎng)站系統(tǒng)的各個邏輯層,包括應(yīng)用層,服務(wù)層和數(shù)據(jù)層。
3. 設(shè)計(jì)『 可伸縮 』的網(wǎng)站架構(gòu)
系統(tǒng)的可伸縮性,通常容易與可擴(kuò)展性混淆。
可伸縮性意味著當(dāng)網(wǎng)站流量變大時,可以很容易通過增加系統(tǒng)部署實(shí)例來支持。可擴(kuò)展性意味著系統(tǒng)架構(gòu)可以很容易擴(kuò)展,從而支持新業(yè)務(wù)功能系統(tǒng)。
為達(dá)到可伸縮的目的,通常需要將系統(tǒng)進(jìn)行拆分??v向進(jìn)行邏輯分層,如分為應(yīng)用層,服務(wù)層和數(shù)據(jù)層。橫向進(jìn)行業(yè)務(wù)分割,把不同的業(yè)務(wù)功能拆分出來,并且獨(dú)立部署。
對于拆分出來的單一功能,也需要采用集群方式進(jìn)行部署。但是對于不同類型的集群,實(shí)現(xiàn)伸縮的方式不太一樣。
對于應(yīng)用服務(wù)器集群,通常使用『 負(fù)載均衡 』來實(shí)現(xiàn)伸縮。當(dāng)有新服務(wù)器加入集群時,負(fù)載均衡可以自動將用戶請求分發(fā)到新服務(wù)器。
對于分布式緩存集群,當(dāng)有新服務(wù)器加入集群時,為了保證緩存命中率,通常使用『 一致性 』算法,從而使請求能夠絕大部分指向已經(jīng)緩存了所需數(shù)據(jù)的服務(wù)器。
對于數(shù)據(jù)存儲服務(wù)器集群,對傳統(tǒng)關(guān)系數(shù)據(jù)庫來說,通常的手段是進(jìn)行『 主、從數(shù)據(jù)庫復(fù)制 』實(shí)現(xiàn)讀寫分離,或者『 數(shù)據(jù)分庫分片 』等。然而對于NoSQL數(shù)據(jù)庫,很多NoSQL數(shù)據(jù)庫天生就是為可伸縮海量數(shù)據(jù)存儲而設(shè)計(jì)的,如HBase。
4. 設(shè)計(jì)『 可擴(kuò)展 』的網(wǎng)站架構(gòu)
網(wǎng)站系統(tǒng)架構(gòu)應(yīng)該是易于擴(kuò)展的。通常的設(shè)計(jì)手段包括:
- 使用分布式消息隊(duì)列降低系統(tǒng)與系統(tǒng)之間的耦合性。當(dāng)開發(fā)新系統(tǒng)后,只需要訂閱消息隊(duì)列的數(shù)據(jù)即可進(jìn)行整合,而不需要修改已有其他系統(tǒng)。
- 利用分布式服務(wù)抽取可復(fù)用的服務(wù)。對于通用業(yè)務(wù)功能,可以把它們抽取成可復(fù)用的服務(wù)。對于新業(yè)務(wù)需求,通??梢允褂眠@些可復(fù)用的服務(wù),進(jìn)行簡單的組裝即可實(shí)現(xiàn)。
- 使用具有可擴(kuò)展的數(shù)據(jù)庫。如使用支持ColumnFamily結(jié)構(gòu)的NoSQL數(shù)據(jù)庫,可以在現(xiàn)有數(shù)據(jù)表結(jié)構(gòu)之上增刪數(shù)據(jù)列。
- 開放平臺。通過開放平臺接入第三方開發(fā)者開發(fā)的系統(tǒng),擴(kuò)展系統(tǒng)周邊應(yīng)用,形成生態(tài)圈。
5. 設(shè)計(jì)『 安全 』的網(wǎng)站架構(gòu)
系統(tǒng)安全性,對于任何網(wǎng)站系統(tǒng)都是至關(guān)重要的。
對于大型網(wǎng)站,由于用戶分布廣,網(wǎng)絡(luò)安全環(huán)境會更加復(fù)雜和惡劣,設(shè)計(jì)具有良好安全性的網(wǎng)站架構(gòu)會更加具有挑戰(zhàn)性。
一般可以考慮以下幾個方面:
- 防御常見的網(wǎng)站攻擊手段。如XSS,注入攻擊,CSRF攻擊等。
- 信息加密。對在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)進(jìn)行加密后再傳輸。
- 信息過濾。過濾掉垃圾信息,防止垃圾信息進(jìn)入系統(tǒng)內(nèi)部。
思維導(dǎo)圖
以下是我親自整理的思維導(dǎo)圖
如果上面的大圖看著不方便,我也把它放在了Github,訪問我的Github地址
https://github.com/longyg/Study下載,然后用XMind打開輕松看,包括圖里的詳細(xì)標(biāo)注也可以看得到啦。
圖: 網(wǎng)絡(luò)
文: 新碼農(nóng)客棧
排版: 新碼農(nóng)客棧
掃碼關(guān)注公眾號,查看更多內(nèi)容
關(guān)鍵詞:技術(shù),大型,詳細(xì),干貨