何為模式?
? ? 模式來自建筑學(xué)拴竹,建筑學(xué)的詞匯這樣定義模式:“每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題及該問題的解決方案的核心。這樣,你就可以一次又一次地使用該方案而不必做重復(fù)工作惨篱。”模式的關(guān)鍵在意模式的可重復(fù)性围俘,問題與場景的可重復(fù)性帶來解決方案的可重復(fù)性砸讳。
? ? 網(wǎng)站架構(gòu)面臨高并發(fā)訪問、海量數(shù)據(jù)存儲界牡、高可靠運行等一系列問題簿寂,在實現(xiàn)網(wǎng)站高可用、易伸縮宿亡、可擴(kuò)展常遂、安全等各項技術(shù)架構(gòu)目標(biāo)的過程中,逐漸形成了大型網(wǎng)站架構(gòu)模式挽荠。
幾個概念
CDN是個什么東東克胳?
????CDN是構(gòu)建在網(wǎng)絡(luò)之上的內(nèi)容分發(fā)網(wǎng)絡(luò),依靠部署在各地的邊緣服務(wù)器圈匆,通過中心平臺的負(fù)載均衡漠另、內(nèi)容分發(fā)、調(diào)度等功能模塊跃赚,使用戶就近獲取所需內(nèi)容笆搓,降低網(wǎng)絡(luò)擁塞,提高用戶訪問響應(yīng)速度和命中率纬傲。CDN的關(guān)鍵技術(shù)主要有內(nèi)容存儲和分發(fā)技術(shù)满败。
????CDN的基本原理是廣泛采用各種緩存服務(wù)器,將這些緩存服務(wù)器分布到用戶訪問相對集中的地區(qū)或網(wǎng)絡(luò)中叹括,在用戶訪問網(wǎng)站時算墨,利用全局負(fù)載技術(shù)將用戶的訪問指向距離最近的工作正常的緩存服務(wù)器上,由緩存服務(wù)器直接響應(yīng)用戶請求领猾。
反向代理又是什么米同?
? ??反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求骇扇,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端面粮,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器少孝。
普通代理服務(wù)器和反向代理服務(wù)器的區(qū)別:
????通常的代理服務(wù)器,只用于代理內(nèi)部網(wǎng)絡(luò)對Internet的連接請求熬苍,客戶機(jī)必須指定代理服務(wù)器,并將本來要直接發(fā)送到Web服務(wù)器上的http請求發(fā)送到代理服務(wù)器中稍走。由于外部網(wǎng)絡(luò)上的主機(jī)并不會配置并使用這個代理服務(wù)器,普通代理服務(wù)器也被設(shè)計為在Internet上搜尋多個不確定的服務(wù)器,而不是針對Internet上多個客戶機(jī)的請求訪問某一個固定的服務(wù)器柴底,因此普通的Web代理服務(wù)器不支持外部對內(nèi)部網(wǎng)絡(luò)的訪問請求婿脸。當(dāng)一個代理服務(wù)器能夠代理外部網(wǎng)絡(luò)上的主機(jī),訪問內(nèi)部網(wǎng)絡(luò)時柄驻,這種代理服務(wù)的方式稱為反向代理服務(wù)狐树。
負(fù)載均衡是什么?
????負(fù)載均衡 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上鸿脓,它提供了一種廉價有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬抑钟、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力野哭、提高網(wǎng)絡(luò)的靈活性和可用性在塔。
????負(fù)載均衡,英文名稱為Load Balance拨黔,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行蛔溃,例如Web服務(wù)器、FTP服務(wù)器篱蝇、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等贺待,從而共同完成工作任務(wù)。
網(wǎng)站架構(gòu)模式
分層
? ? 分層是將企業(yè)應(yīng)用系統(tǒng)在橫向維度上進(jìn)行一個切分态兴,每個部分負(fù)責(zé)一部分相對比較單一的自這狠持,通過上層對下層的依賴和調(diào)用組成一個完整的系統(tǒng)疟位。應(yīng)用系統(tǒng)中的分層類似通信協(xié)議的分層結(jié)構(gòu)瞻润,層層依賴。一般將軟件系統(tǒng)將架構(gòu)分為三層:
? ? 應(yīng)用層:負(fù)責(zé)具體業(yè)務(wù)和視圖展示甜刻,例如網(wǎng)站首頁以及搜索輸入和結(jié)果展示绍撞。
? ? 服務(wù)層:為應(yīng)用層提供服務(wù),如用戶管理服務(wù)得院,發(fā)送短信服務(wù)傻铣,訂單服務(wù)等。
? ? 數(shù)據(jù)層:提供數(shù)據(jù)存儲訪問服務(wù)祥绞,應(yīng)用層的數(shù)據(jù)存儲到數(shù)據(jù)層非洲,應(yīng)用層查詢數(shù)據(jù)時從數(shù)據(jù)層查詢鸭限。例如:數(shù)據(jù)庫、緩存两踏、文件等败京。
? ? 通過分層,應(yīng)用系統(tǒng)實現(xiàn)了解耦合梦染,分層架構(gòu)需要合理規(guī)劃層級邊界和接口赡麦,在開發(fā)過程中禁止跨層調(diào)用,和逆向調(diào)用(數(shù)據(jù)層調(diào)用服務(wù)層帕识,或者服務(wù)層調(diào)用應(yīng)用層)泛粹。
分割
? ? 分層是一種橫向的切分,那么分割就是一種縱向的切分肮疗。網(wǎng)站越大功能模塊越多晶姊,服務(wù)和數(shù)據(jù)處理的種類也越多∥被酰可以根據(jù)不同的功能將服務(wù)分割開帽借,包裝成高內(nèi)聚低耦合的模塊單元。比如將購物超歌,論壇砍艾,搜索分割成不同的應(yīng)用,由不同的圖案噸進(jìn)行開發(fā)巍举。
分布式
? ? 分層和分割的主要目的是為了切分后的模塊便于分布式部署脆荷,將不同的模塊部署在不同的服務(wù)器上,通過遠(yuǎn)程調(diào)用協(xié)同工作懊悯。分布式又有幾種不同的分布式方案:
? ? 分布式應(yīng)用和服務(wù):將分層和分割后的應(yīng)用和服務(wù)模塊分布式部署蜓谋,可以是不同的應(yīng)用復(fù)用相同的服務(wù),便于業(yè)務(wù)功能擴(kuò)展炭分。
? ? 分布式靜態(tài)資源:可以將網(wǎng)站的靜態(tài)資源如JS桃焕、CSS、JS捧毛、圖片等資源獨立分布式部署观堂,這樣可以直接訪問靜態(tài)資源,減少了其他應(yīng)用服務(wù)器的負(fù)載壓力呀忧,同時也加快了靜態(tài)資源的訪問和瀏覽器的加載速度师痕。
? ? 分布式數(shù)據(jù)和存儲:大型網(wǎng)站的數(shù)據(jù)量往往比較大,單臺計算機(jī)往往沒有這么大的存儲空間存儲數(shù)據(jù)而账。此時就需要采用分布式存儲胰坟,除了對傳統(tǒng)的關(guān)系型數(shù)據(jù)庫進(jìn)行分布式部署之外,各種NoSQL產(chǎn)品也都支持分布式泞辐。
? ? 分布式計算:嚴(yán)格來說笔横,應(yīng)用竞滓、服務(wù)、實時數(shù)據(jù)處理都是計算吹缔,后臺數(shù)據(jù)的處理往往是用戶看不到的虽界,這些業(yè)務(wù)計算規(guī)模非常龐大。
? ?此外還有分布式配置涛菠,控制并發(fā)的分布式鎖莉御,以及支持云存儲的分布式文件系統(tǒng)等。
緩存
? ? 緩存就是將數(shù)據(jù)存放在距離計算最近的位置以加速處理速度俗冻,緩存是改善軟件性能的第一手段礁叔。緩存設(shè)計往往從以下幾個方面入手:CDN、反向代理迄薄、本地緩存和分布式緩存琅关。使用緩存有兩個前提條件:
? ? 1、數(shù)據(jù)訪問熱點不均衡讥蔽,某些數(shù)據(jù)會被更頻繁地訪問涣易,這些數(shù)據(jù)應(yīng)該放在緩存中;
? ? 2冶伞、數(shù)據(jù)在某個時間段內(nèi)有效新症,不會很快過期,否則緩存的數(shù)據(jù)就會因失效而產(chǎn)生臟讀响禽。
異步
? ? 系統(tǒng)解耦合除了分層徒爹、分割和分布式之外還有一個重要的手段就是異步,業(yè)務(wù)之間傳遞消息是不同步調(diào)用芋类,而是將一個業(yè)務(wù)操作分成多個階段隆嗅,每個階段通過共享數(shù)據(jù)的方式執(zhí)行操作。實現(xiàn)異步操作的主要方式是通過消息隊列侯繁,消息隊列的架構(gòu)是典型的生產(chǎn)者消費者模式胖喳,兩者不存在直接調(diào)用,只要保證數(shù)據(jù)結(jié)構(gòu)不變贮竟,彼此功能實現(xiàn)可以任意變化而不受影響丽焊。
? ? 使用異步架構(gòu),可以提高系統(tǒng)可用性坝锰,當(dāng)生產(chǎn)者或者消費者其中任意一個服務(wù)器發(fā)生故障的時候粹懒,數(shù)據(jù)會在消息隊列中存儲重付,不會因為服務(wù)器的故障而產(chǎn)生數(shù)據(jù)的丟失顷级;可以加快網(wǎng)站響應(yīng)速度,當(dāng)生產(chǎn)者處理完業(yè)務(wù)請求后确垫,可以將數(shù)據(jù)存放到消息隊列立即返回響應(yīng)弓颈,而不需要等消費者處理完數(shù)據(jù)之后再返回處理結(jié)果帽芽;可以消除并發(fā)訪問高峰,當(dāng)用戶訪問比較集中的時候翔冀,服務(wù)器負(fù)載比較重导街,往往會造成服務(wù)器響應(yīng)延遲,嚴(yán)重時會出現(xiàn)服務(wù)器宕機(jī)的情況纤子。使用消息隊列搬瑰,當(dāng)消息隊列中突然增加訪問請求數(shù)據(jù)放入隊列時,并不會對整個網(wǎng)站負(fù)載造成很大壓力控硼。
冗余
? ? 網(wǎng)站要保證7X24小時連續(xù)運行泽论,但是服務(wù)器可能會出現(xiàn)故障,要保證服務(wù)器在宕機(jī)的情況下服務(wù)能夠正常運行卡乾,就需要一定程度的服務(wù)器冗余運行翼悴,數(shù)據(jù)冗余備份,這樣當(dāng)這臺服務(wù)器宕機(jī)是可以切換到其他服務(wù)器上幔妨。
自動化
? ? 目前大型網(wǎng)站的自動化架構(gòu)設(shè)計主要集中在發(fā)布運維方面鹦赎,主要有以下幾個方面:
? ? 發(fā)布過程自動化,較少人為干預(yù)误堡,減少故障古话。
? ? 自動化代碼管理,代碼版本控制锁施,代碼分支創(chuàng)建合并等過程自動化煞额,開發(fā)人員只需要提交自己開發(fā)的代碼。
? ? 自動化測試沾谜,開發(fā)完成提交測試后膊毁,系統(tǒng)自動將代碼部署到測試環(huán)境。????
? ? 自動化安全檢測基跑,安全檢測工具對代碼進(jìn)行靜態(tài)掃描婚温,及測試環(huán)境的安全攻擊測試。????
? ? 自動化部署媳否,將工程代碼自動化部署到線上生產(chǎn)環(huán)境栅螟。
本節(jié)思維導(dǎo)圖下載地址:大型網(wǎng)站架構(gòu)模式思維導(dǎo)圖