大型網(wǎng)站架構(gòu)模式
每一個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題以及該問(wèn)題解決方案的核心,從而減少重復(fù)工作。
網(wǎng)站架構(gòu)模式
- 分層
參考計(jì)算機(jī)網(wǎng)絡(luò)7層協(xié)議句狼、計(jì)算機(jī)硬件操作系統(tǒng)以及軟件的的分層調(diào)用
分層 | 職責(zé) |
---|---|
應(yīng)用層 | 負(fù)責(zé)具體業(yè)務(wù)和視圖的展示笋熬,如網(wǎng)站首頁(yè)和搜索展示頁(yè)面 |
服務(wù)層 | 為應(yīng)用層提供服務(wù)支持,如用戶管理腻菇、商品管理等 |
數(shù)據(jù)層 | 提供數(shù)據(jù)存儲(chǔ)和訪問(wèn)服務(wù)胳螟,如數(shù)據(jù)庫(kù)、緩存筹吐、文件和搜索等 |
分層的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1.1 便于開發(fā)和分工糖耸,后期便于維護(hù)
1.2 各層之間獨(dú)立,可以根據(jù)不同的層進(jìn)行演進(jìn)和升級(jí)丘薛,甚至不同的層可以部署在不同機(jī)器上
缺點(diǎn):
1.1 需要合理規(guī)劃層次和邊界嘉竟,增加了工作量
1.2 跨層調(diào)用和逆向調(diào)用會(huì)產(chǎn)生問(wèn)題
- 分割
分層是在軟件橫向方向進(jìn)行切割,分割是在縱向進(jìn)行切分洋侨,比如將購(gòu)物和支付舍扰、廣告等業(yè)務(wù)進(jìn)行分割,設(shè)置成不同的微服務(wù)
隨著網(wǎng)站功能越來(lái)越大希坚,功能會(huì)越來(lái)越復(fù)雜边苹,需要將不同的功能和服務(wù)分割開來(lái),包裝成高內(nèi)聚和低耦合的模塊單元裁僧,有豬油軟件的開發(fā)和維護(hù)
也便于分布式部署个束,提高網(wǎng)站的并發(fā)能力和功能擴(kuò)展能力。
- 分布式
對(duì)于大型網(wǎng)站聊疲,分層和分割都是為了切分后的模塊便于分布式部署茬底,通過(guò)遠(yuǎn)程調(diào)用協(xié)同工作。分布式可以是用更多的計(jì)算機(jī)
完成同樣的功能获洲,通過(guò)對(duì)硬件上的擴(kuò)展桩警,提高網(wǎng)站的計(jì)算能力。
但是分布式意味著服務(wù)必須通過(guò)網(wǎng)絡(luò)進(jìn)行調(diào)用昌妹,可能會(huì)因?yàn)橐慌_(tái)服務(wù)的宕機(jī)導(dǎo)致其他服務(wù)不可用捶枢,降低網(wǎng)站的可用性,同時(shí)數(shù)據(jù)在不同服務(wù)器上的數(shù)據(jù)一致性也不好保證
飞崖,這對(duì)業(yè)務(wù)的正確性和流程有一定的影響烂叔,使得維護(hù)起來(lái)較為復(fù)雜。
常見的分布式解決方案有:
分布式服務(wù) | 特點(diǎn) |
---|---|
分布式應(yīng)用和服務(wù) | 將分層和分割后的應(yīng)用和服務(wù)模塊分布式部署固歪,改善網(wǎng)站性能和并發(fā)性蒜鸡、加快開發(fā)和部署速度胯努、減少數(shù)據(jù)庫(kù)連接消耗,增強(qiáng)復(fù)用性逢防,便于業(yè)務(wù)擴(kuò)展 |
分布式靜態(tài)資源 | 網(wǎng)站靜態(tài)圖片部署叶沛,采用獨(dú)立的域名,減輕服務(wù)器壓力忘朝,使用獨(dú)立的域名對(duì)瀏覽器進(jìn)行緩存灰署,加快訪問(wèn)速度,便于維護(hù)和擴(kuò)展 |
分布式數(shù)據(jù)和存儲(chǔ) | 海量數(shù)據(jù)進(jìn)行分布式存儲(chǔ)局嘁,除了對(duì)傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)進(jìn)行分布式部署以外溉箕,一些NoSQL產(chǎn)品也是分布式的 |
分布式計(jì)算 | 應(yīng)用、服務(wù)悦昵、實(shí)時(shí)數(shù)據(jù)計(jì)算都是計(jì)算肴茄,一些業(yè)務(wù)后臺(tái)處理、網(wǎng)站和搜索引擎的構(gòu)建但指、數(shù)據(jù)分析和統(tǒng)計(jì)大多采用Hadoop和MapReduce分布式計(jì)算框架進(jìn)行批處理計(jì)算 |
服務(wù)器實(shí)時(shí)更新的分布式配置寡痰,分布式環(huán)境下實(shí)現(xiàn)并發(fā)和協(xié)同的分布式鎖,支持云存儲(chǔ)的分布式文件系統(tǒng)等棋凳。
- 集群
分布式將分層和分割的應(yīng)用獨(dú)立部署氓癌,但是用戶集中訪問(wèn)的模塊需要將獨(dú)立部署的服務(wù)器集群化,即多臺(tái)服務(wù)器部署相同應(yīng)用構(gòu)成一個(gè)集群贫橙,通過(guò)負(fù)載均衡對(duì)外提供服務(wù)贪婉。
集群是為了更好的提供并發(fā)性,用戶增多時(shí)卢肃,加入新的機(jī)器疲迂,某臺(tái)機(jī)器故障時(shí)轉(zhuǎn)移請(qǐng)求到其他服務(wù)器,提高可用性莫湘。
- 緩存
緩存是為了將數(shù)據(jù)放在距離計(jì)算更近的位置上以加快處理速度尤蒿。改善軟件性能的一種手段,比如CPU計(jì)算的cache緩存幅垮,頁(yè)面調(diào)度中的緩存
常見的緩存 | 特點(diǎn) |
---|---|
CDN | 內(nèi)容分發(fā)網(wǎng)絡(luò)腰池,部署在距離終端用戶最近的網(wǎng)絡(luò)服務(wù)商,用戶請(qǐng)求先到達(dá)網(wǎng)絡(luò)服務(wù)商忙芒,以最快的速度發(fā)揮靜態(tài)資源 |
反向代理 | 屬于網(wǎng)站前端的一部分示弓,當(dāng)請(qǐng)求到達(dá)網(wǎng)站的數(shù)據(jù)中心時(shí),最先訪問(wèn)的就是反向代理服務(wù)器呵萨,這里緩存網(wǎng)站的靜態(tài)資源奏属,無(wú)需將請(qǐng)求繼續(xù)轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器就能返回給用戶 |
本地緩存 | 應(yīng)用服務(wù)器本地緩存熱點(diǎn)數(shù)據(jù),可以直接通過(guò)內(nèi)存訪問(wèn)潮峦,無(wú)需訪問(wèn)數(shù)據(jù)庫(kù) |
分布式緩存 | 當(dāng)網(wǎng)站龐大時(shí)囱皿,需要對(duì)本地緩存進(jìn)行擴(kuò)展勇婴,將數(shù)據(jù)緩存在一個(gè)專門的分布式集群中,通過(guò)網(wǎng)絡(luò)通信進(jìn)行訪問(wèn) |
使用緩存的條件:
5.1 數(shù)據(jù)訪問(wèn)熱點(diǎn)不均衡嘱腥,某些數(shù)據(jù)被頻繁訪問(wèn)耕渴,數(shù)據(jù)應(yīng)該放在緩存中
5.2 某個(gè)時(shí)間段內(nèi)有效的數(shù)據(jù),不會(huì)很快過(guò)期齿兔,否則會(huì)造成臟讀
緩存可以加快訪問(wèn)速度橱脸,減少后端壓力和存儲(chǔ)壓力,需要按照數(shù)據(jù)的訪問(wèn)頻率合理設(shè)計(jì)愧驱。
- 異步
業(yè)務(wù)之間的消息傳遞不是同步進(jìn)行的慰技,而是將業(yè)務(wù)分成多個(gè)階段椭盏,每個(gè)階段通過(guò)共享數(shù)據(jù)的方式異步執(zhí)行组砚。
單一服務(wù)器可以通過(guò)多線程共享內(nèi)存隊(duì)列的方式實(shí)現(xiàn)異步,分布式系統(tǒng)中通過(guò)分布式消息隊(duì)列實(shí)現(xiàn)異步掏颊。
異步架構(gòu)是生產(chǎn)者消費(fèi)者模式糟红,二者不直接調(diào)用,從而進(jìn)行解耦乌叶,功能可以隨意變化不受影響盆偿,易于擴(kuò)展。
特點(diǎn):
6.1 提高系統(tǒng)的可用性
消費(fèi)者服務(wù)器異常后准浴,消息會(huì)隊(duì)列中堆積事扭,等回復(fù)之后再去消費(fèi)
6.2 加快網(wǎng)站的響應(yīng)速度
業(yè)務(wù)寫入消息隊(duì)列后不通過(guò)消費(fèi)者服務(wù)器即可返回結(jié)果,延遲小
6.3 消除并發(fā)訪問(wèn)高峰
出現(xiàn)突發(fā)事件或者促銷活動(dòng)時(shí)乐横,可以放入消息隊(duì)列中求橄,等到消費(fèi)者服務(wù)器依次處理
- 冗余
數(shù)據(jù)冗余備份,當(dāng)服務(wù)器宕機(jī)時(shí)葡公,可以快速切換罐农,實(shí)現(xiàn)高可用
數(shù)據(jù)庫(kù)定期備份,實(shí)現(xiàn)冷備份催什,為了保證在線的高可用涵亏,實(shí)現(xiàn)主從分離實(shí)現(xiàn)熱備份
為了抵御不可抗據(jù)力對(duì)機(jī)房的破壞,需要設(shè)置災(zāi)難備份的數(shù)據(jù)中心
- 自動(dòng)化
發(fā)布自動(dòng)化管理:自動(dòng)化代碼管理蒲凶、自動(dòng)化測(cè)試气筋、自動(dòng)化安全檢測(cè)、自動(dòng)化部署
監(jiān)控自動(dòng)化:自動(dòng)化監(jiān)控旋圆、自動(dòng)化報(bào)警裆悄、自動(dòng)化失效轉(zhuǎn)移、自動(dòng)化失效恢復(fù)臂聋、自動(dòng)化降級(jí)光稼、自動(dòng)化分配資源
- 安全性
密碼和手機(jī)校驗(yàn)碼進(jìn)行身份認(rèn)證或南,交易信息進(jìn)行加密,使用驗(yàn)證碼防止機(jī)器人攻擊艾君,對(duì)于SQL注入等進(jìn)行編碼轉(zhuǎn)換處理采够,對(duì)于垃圾信息進(jìn)行過(guò)濾,對(duì)交易模式和交易信息進(jìn)行風(fēng)險(xiǎn)控制
架構(gòu)模式的應(yīng)用
微博的系統(tǒng)架構(gòu)如下:
分為三個(gè)層次:
基礎(chǔ)服務(wù)層: 提供數(shù)據(jù)庫(kù)冰垄、緩存蹬癌、存儲(chǔ)、搜索等數(shù)據(jù)服務(wù)
中間層: 平臺(tái)服務(wù)和應(yīng)用服務(wù)層虹茶、將核心服務(wù)分割為獨(dú)立模塊逝薪,通過(guò)依賴調(diào)用共享數(shù)據(jù)
業(yè)務(wù)層API:通過(guò)各種客戶端(Web,APP)和第三方應(yīng)用構(gòu)成一個(gè)完整的生態(tài)系統(tǒng)
分割后的服務(wù)和技術(shù)模塊進(jìn)行分布式部署,每個(gè)模塊部署在獨(dú)立的集群上蝴罪,通過(guò)遠(yuǎn)程調(diào)用進(jìn)行訪問(wèn)董济。
早期架構(gòu)中,采用同步推模式要门,用戶發(fā)表微博之后虏肾,將這條微博插入數(shù)據(jù)庫(kù)所有粉絲的訂閱列表,后期采用推拉結(jié)合的模式欢搜,用戶寫入消息隊(duì)列后立即返回封豪,將當(dāng)前在線用戶進(jìn)行迅速推送,非在線用戶登錄后根據(jù)關(guān)注列表進(jìn)行拉取
由于微博頻繁刷新炒瘟,采用多級(jí)緩存策略吹埠,熱門微博緩存在所有服務(wù)器上,提高訪問(wèn)性能
為了保證整體性能疮装,采用多個(gè)數(shù)據(jù)中心缘琅,用戶就近訪問(wèn),加快訪問(wèn)速度斩个,同時(shí)也是數(shù)據(jù)冗余備份的一種方式胯杭,提高了可用性。
自動(dòng)化工具提高了系統(tǒng)的開發(fā)效率受啥,安全審核策略對(duì)垃圾內(nèi)容和僵尸粉進(jìn)行過(guò)濾做个。