大型网站架构 - 1.架构的演变过程
1. 第一階段:單服務(wù)器架構(gòu)
這一階段是我們的起步階段,比如我們創(chuàng)業(yè)的時(shí)候剛購買了一臺云主機(jī)。
在這一階段,為了節(jié)約成本,我們將所有的應(yīng)用程序,數(shù)據(jù)庫,文件全部放在這臺服務(wù)器上。
然后,CPU或者內(nèi)存的成本在開發(fā)階段也使用最小能接受的成本,然后開始我們的服務(wù)器開發(fā)之路。
?
2. 第二階段:應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離
隨著網(wǎng)站的第一次上線,我們的網(wǎng)站如果運(yùn)營得不錯的話,在這之后應(yīng)該會逐漸積累人氣,業(yè)務(wù)
也會隨著人氣的發(fā)展而進(jìn)一步發(fā)展。
這個時(shí)候,1臺服務(wù)器顯然不能滿足需求了,越來越多的用戶訪問導(dǎo)致性能變差,與此同時(shí),數(shù)據(jù)也逐漸
變多,我們考慮增加硬盤。
這個時(shí)候,首先想到的就是:將應(yīng)用和數(shù)據(jù)分離
于是,網(wǎng)站架構(gòu)變成3臺服務(wù)器:應(yīng)用服務(wù)器(Web Server), 文件服務(wù)器(Resource Server), 數(shù)據(jù)庫服務(wù)器(Database Server)
對于3臺服務(wù)器的配置要求不太一樣:
Web Server: 需要處理大量的業(yè)務(wù),需要更快的CPU。
Database Server: 需要快速檢索數(shù)據(jù)和存放更多的數(shù)據(jù),需要更大更快的硬盤,硬盤最好也是固態(tài)硬盤為主。
Resource Server: 需要存放用戶上傳的文件,如照片,視頻等等,需要更大的硬盤,硬盤大一點(diǎn),但是普通硬盤即可。
?
3. 第三階段:使用緩存改善網(wǎng)站性能
網(wǎng)站業(yè)務(wù)遵循二八原則,80%的業(yè)務(wù)集中在20%的數(shù)據(jù)上。
因此,如果把這一小部分?jǐn)?shù)據(jù)緩存起來,就可以i暗哨數(shù)據(jù)庫訪問的壓力。
在初始階段可以使用一些本地服務(wù)器的內(nèi)存緩存,隨著業(yè)務(wù)的擴(kuò)展,
可以增加遠(yuǎn)程分布式的緩存服務(wù)器,應(yīng)用一些成熟的框架,如: Redis
?
4. 第四階段:應(yīng)用服務(wù)器集群增加并發(fā)處理能力
集群已經(jīng)顯然成為現(xiàn)代網(wǎng)站處理高并發(fā),海量數(shù)據(jù)的常規(guī)手段。
當(dāng)1臺服務(wù)器性能不足時(shí),我們首先考慮的不應(yīng)當(dāng)是更換強(qiáng)大的服務(wù)器,而是應(yīng)該增加服務(wù)器。
這個時(shí)候,我們的架構(gòu)中應(yīng)該引入負(fù)載均衡調(diào)度服務(wù)器,然后請求經(jīng)過負(fù)載均衡服務(wù)器,分發(fā)到位于集群上的各個
應(yīng)用服務(wù)器。
?
5. 第五階段:數(shù)據(jù)庫讀寫分離
緩存并不能解決所有的數(shù)據(jù)庫問題,仍有很大一部分?jǐn)?shù)據(jù)由于某些原因(緩存不命中,緩存過期)需要訪問數(shù)據(jù)庫。
通過設(shè)置數(shù)據(jù)庫的主從備份結(jié)構(gòu),可以將主數(shù)據(jù)庫的數(shù)據(jù)同步更新到另外的數(shù)據(jù)庫上。
從而架構(gòu)改為,將數(shù)據(jù)寫入主數(shù)據(jù)庫,而從數(shù)據(jù)庫負(fù)責(zé)讀取數(shù)據(jù)。
?
6. 第六階段:使用反向代理和CDN加速網(wǎng)站響應(yīng)
CDN和反向代理的基本原理都是緩存。
區(qū)別:
CDN部署在網(wǎng)絡(luò)提供商的機(jī)房,用戶可以從距離自己最近的網(wǎng)絡(luò)提供商機(jī)房獲取數(shù)據(jù)。
反向代理部署在網(wǎng)站的中心機(jī)房。
?
7. 第七階段:使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫
數(shù)據(jù)庫需要進(jìn)行拆分,拆分一般根據(jù)業(yè)務(wù)進(jìn)行拆分,
將不同的數(shù)據(jù)庫部署在不同的物理服務(wù)器上。
再進(jìn)一步,我們可以引入NoSql和搜索引擎。
?
總結(jié)
以上是生活随笔為你收集整理的大型网站架构 - 1.架构的演变过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Visual Studio中使用用例图
- 下一篇: Extjs.FormPanel