李智慧老師的大型網(wǎng)站架構(gòu)已經(jīng)買(mǎi)了兩年了,之前大體看過(guò)一次,不過(guò)還未內(nèi)化為自己的本領(lǐng),最近項(xiàng)目空閑,決定盡力掌握這部分的知識(shí),以跟上大師的節(jié)奏。今天是兒童節(jié),祝自己和大家心態(tài)永遠(yuǎn)年輕,即使沒(méi)有年輕的身體,也一定要有純凈的靈魂。
電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

發(fā)展歷程

網(wǎng)站的發(fā)展和生物一樣,都會(huì)經(jīng)歷不同的階段,通過(guò)不斷的成長(zhǎng)而塑造成一個(gè)成熟的個(gè)體。也就是說(shuō)大型網(wǎng)站不是生來(lái)就有的,也是跟隨著公司業(yè)務(wù)的發(fā)展,不斷推進(jìn)的。畢竟網(wǎng)站是公司業(yè)務(wù)的載體,而不是主體,這和純技術(shù)公司有很大的不同。李老師說(shuō)的好,"是業(yè)務(wù)成就了技術(shù),是事業(yè)成就了人"。在實(shí)際的設(shè)計(jì)中,一定謹(jǐn)記溝通的重要性,不能為了技術(shù)而技術(shù),有時(shí)候合理的溝通,通過(guò)業(yè)務(wù)流程合理的改變可以解決很多技術(shù)無(wú)法解決的問(wèn)題,比如12306網(wǎng)站通過(guò)分時(shí)段銷(xiāo)售,排隊(duì)等策略很好的解決了春運(yùn)購(gòu)票高峰的問(wèn)題。接下來(lái),以時(shí)間為序簡(jiǎn)單介紹一下大型網(wǎng)站野蠻生長(zhǎng)的發(fā)展歷程。

  1. 初始階段:比如常見(jiàn)lamp,再Linux環(huán)境中,使用php構(gòu)建網(wǎng)站,mysql數(shù)據(jù)庫(kù),部署在apache上。

  2. 應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離:隨著業(yè)務(wù)的發(fā)展,越來(lái)越多的uv導(dǎo)致性能下降,越來(lái)越多的數(shù)據(jù)導(dǎo)致存儲(chǔ)空間不足,因此需要將系統(tǒng)分為3個(gè)部分,分別是數(shù)據(jù)庫(kù)服務(wù)器(內(nèi)存和硬盤(pán)空間大),應(yīng)用服務(wù)器(更強(qiáng)大CPU),文件服務(wù)器(圖片等靜態(tài)資源,更大的硬盤(pán)容量)。

  3. 使用緩存改善性能:網(wǎng)站訪問(wèn)也遵循”28定律“,比如網(wǎng)上購(gòu)物,大家都會(huì)集中瀏覽成交數(shù)高、評(píng)價(jià)良好的少數(shù)商品。既然業(yè)務(wù)訪問(wèn)集中在小部分?jǐn)?shù)據(jù)上,就可以將這部分?jǐn)?shù)據(jù)緩存起來(lái),減少數(shù)據(jù)庫(kù)的壓力,提高網(wǎng)站性能。以物理上來(lái)劃分,緩存可以分為本地緩存和緩存在分布式緩存服務(wù)器上的遠(yuǎn)程緩存,前者高效但空間小,后者容量理論上可以無(wú)限擴(kuò)展。

  4. 使用應(yīng)用服務(wù)器集群改善網(wǎng)站并發(fā)能力:在使用緩存后,數(shù)據(jù)訪問(wèn)壓力減小,但單一應(yīng)用服務(wù)器能處理的并發(fā)請(qǐng)求仍然有限,因此需要構(gòu)建應(yīng)用服務(wù)器集群,通過(guò)負(fù)載均衡服務(wù)器來(lái)分發(fā)請(qǐng)求。

  5. 數(shù)據(jù)庫(kù)的讀寫(xiě)分離:雖然之前增加了緩存,但部分的讀操作(未命中)和全部的寫(xiě)操作還是要訪問(wèn)數(shù)據(jù)庫(kù),當(dāng)規(guī)模進(jìn)一步增加時(shí),數(shù)據(jù)庫(kù)依然會(huì)成為瓶頸,因此可以通過(guò)數(shù)據(jù)庫(kù)主從熱備的方式來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫(xiě)分離,通過(guò)主數(shù)據(jù)進(jìn)行寫(xiě)操作,從數(shù)據(jù)庫(kù)進(jìn)行讀操作。

  6. 使用反向代理和CDN加速網(wǎng)站響應(yīng):隨著業(yè)務(wù)版圖的進(jìn)一步擴(kuò)展,用戶(hù)分布越來(lái)越廣泛,不同地區(qū)訪問(wèn)網(wǎng)站時(shí)速度差別會(huì)很大。而訪問(wèn)延遲和用戶(hù)流失率正相關(guān),因此需要通過(guò)CDN和反向代理等手段,為用戶(hù)提供更好的服務(wù)。兩者的基礎(chǔ)都是緩存,CDN部署在網(wǎng)絡(luò)提供商的機(jī)房,當(dāng)用戶(hù)訪問(wèn)時(shí)可以從距離最近的機(jī)房獲取數(shù)據(jù),反向代理部署在網(wǎng)站中心機(jī)房,訪問(wèn)首先由反向代理服務(wù)器處理,如果緩存中有客戶(hù)所需數(shù)據(jù),直接返回即可。

  7. 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng):分布式數(shù)據(jù)庫(kù)時(shí)網(wǎng)站數(shù)據(jù)庫(kù)拆分的最后手段,只有在單表數(shù)據(jù)規(guī)模特別大時(shí)才使用,通常應(yīng)該采用業(yè)務(wù)分庫(kù),既簡(jiǎn)單也合理。分布式文件系統(tǒng)比較常見(jiàn),比如Hadoop的基礎(chǔ)HDFS。

  8. 使用NoSQL和搜索引擎:NoSql和搜索引擎技術(shù)具有可伸縮的分布式特性,應(yīng)用服務(wù)器可以通過(guò)統(tǒng)一的數(shù)據(jù)訪問(wèn)磨礦訪問(wèn)各種數(shù)據(jù),減輕應(yīng)用程序管理數(shù)據(jù)源的麻煩。

  9. 業(yè)務(wù)拆分:對(duì)于大型網(wǎng)站,分而治之是最棒的手段,比如電商網(wǎng)站,可以將商鋪、訂單、買(mǎi)家、賣(mài)家、支付等拆分為不同的產(chǎn)品線,歸屬不同業(yè)務(wù)團(tuán)隊(duì)。每個(gè)應(yīng)用獨(dú)立部署維護(hù)(docker),應(yīng)用間通過(guò)鏈接建立關(guān)系,相互間可以通過(guò)消

    網(wǎng)友評(píng)論