- 深入分布式緩存:從原理到實(shí)踐
- 于君澤
- 1031字
- 2019-01-03 15:38:02
1.3 從網(wǎng)站的架構(gòu)發(fā)展看緩存
最初的網(wǎng)站可能就是一臺(tái)物理主機(jī),放在IDC或者租用的是云服務(wù)器,上面只運(yùn)行著應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù),LAMP(Linux Apache MySQL PHP)就是這樣流行起來(lái)的。由于網(wǎng)站具備了一定的特色,吸引了部分用戶的訪問(wèn),逐漸會(huì)發(fā)現(xiàn)系統(tǒng)的壓力越來(lái)越大,響應(yīng)速度越來(lái)越慢,而這個(gè)時(shí)候比較明顯的往往是數(shù)據(jù)庫(kù)與應(yīng)用的互相影響,于是將應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器從物理上分離開(kāi)來(lái),變成了兩臺(tái)機(jī)器,這個(gè)時(shí)候技術(shù)上沒(méi)有什么新的要求,系統(tǒng)又恢復(fù)到以前的響應(yīng)速度了,支撐住了更高的流量,并且不會(huì)讓數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器互相影響。這時(shí)網(wǎng)站后臺(tái)的簡(jiǎn)單架構(gòu)一般如圖1-2所示。

圖1-2 簡(jiǎn)單的網(wǎng)站架構(gòu)示意圖
隨著訪問(wèn)網(wǎng)站的人數(shù)越來(lái)越多,響應(yīng)速度又開(kāi)始變慢了,可能是訪問(wèn)數(shù)據(jù)庫(kù)的操作太多,導(dǎo)致數(shù)據(jù)連接競(jìng)爭(zhēng)激烈,因此緩存開(kāi)始登場(chǎng)。若想通過(guò)緩存機(jī)制來(lái)減少數(shù)據(jù)庫(kù)連接資源的競(jìng)爭(zhēng)和對(duì)數(shù)據(jù)庫(kù)讀的壓力,那么可以選擇采用靜態(tài)頁(yè)面緩存,這樣程序上可以不做修改,就能夠很好地減少對(duì)Web服務(wù)器的壓力以及減少對(duì)數(shù)據(jù)庫(kù)連接資源的競(jìng)爭(zhēng)。隨后,動(dòng)態(tài)緩存登場(chǎng),將動(dòng)態(tài)頁(yè)面里相對(duì)靜態(tài)的部分也緩存起來(lái),因此考慮采用類似的頁(yè)面片段緩存策略。
隨著訪問(wèn)量的持續(xù)增加,系統(tǒng)又開(kāi)始變慢,怎么辦?數(shù)據(jù)緩存來(lái)了,將系統(tǒng)中重復(fù)獲取的數(shù)據(jù)信息從數(shù)據(jù)庫(kù)加載到本地,同時(shí)降低了數(shù)據(jù)庫(kù)的負(fù)載。
隨著系統(tǒng)訪問(wèn)量的再度增加,應(yīng)用服務(wù)器又扛不住了,開(kāi)始增加Web服務(wù)器。那如何保持應(yīng)用服務(wù)器中數(shù)據(jù)緩存信息的同步呢?例如之前緩存的用戶數(shù)據(jù)等,這個(gè)時(shí)候通常會(huì)開(kāi)始使用緩存同步機(jī)制以及共享文件系統(tǒng)或共享存儲(chǔ)等。
在享受了一段時(shí)間的訪問(wèn)量高速增長(zhǎng)后,系統(tǒng)再次變慢。開(kāi)始數(shù)據(jù)庫(kù)調(diào)優(yōu),優(yōu)化數(shù)據(jù)庫(kù)自身的緩存,接下來(lái)是采用數(shù)據(jù)庫(kù)集群以及分庫(kù)分表的策略。分庫(kù)分表的規(guī)則是有些復(fù)雜的,考慮增加一個(gè)通用的框架來(lái)實(shí)現(xiàn)分庫(kù)分表的數(shù)據(jù)訪問(wèn),這個(gè)就是數(shù)據(jù)訪問(wèn)層(Data Access Layer, DAL)。同時(shí),在這個(gè)階段可能會(huì)發(fā)現(xiàn)的之前的緩存同步方案會(huì)出現(xiàn)問(wèn)題,因?yàn)閿?shù)據(jù)量太大,導(dǎo)致現(xiàn)在不太可能將緩存存儲(chǔ)在本地后再同步,于是分布式緩存終于來(lái)了,將大量的數(shù)據(jù)緩存轉(zhuǎn)移到分布式緩存上。
至此,系統(tǒng)進(jìn)入了無(wú)級(jí)縮放的大型網(wǎng)站階段,當(dāng)網(wǎng)站流量增加時(shí),應(yīng)對(duì)的解決方案就是不斷添加Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、以及緩存服務(wù)器了。此時(shí),大型網(wǎng)站的系統(tǒng)架構(gòu)演變?yōu)閳D1-3所示。

圖1-3 大型網(wǎng)站的架構(gòu)示意圖
縱觀網(wǎng)站架構(gòu)的發(fā)展歷程,業(yè)務(wù)量的增長(zhǎng)是幸福的,但也有成長(zhǎng)的煩惱,而緩存技術(shù)就是解除煩惱的靈丹妙藥,這再次證明了什么是緩存為王。
現(xiàn)在,可以從緩存在系統(tǒng)中的位置來(lái)看這一王者在系統(tǒng)中各個(gè)層面的應(yīng)用了。
- Practical Data Analysis Cookbook
- 自然語(yǔ)言處理實(shí)戰(zhàn):預(yù)訓(xùn)練模型應(yīng)用及其產(chǎn)品化
- Python爬蟲(chóng)開(kāi)發(fā):從入門到實(shí)戰(zhàn)(微課版)
- 深入淺出Spring Boot 2.x
- 數(shù)據(jù)庫(kù)系統(tǒng)原理及MySQL應(yīng)用教程
- Selenium Design Patterns and Best Practices
- Processing互動(dòng)編程藝術(shù)
- Windows內(nèi)核編程
- Kotlin開(kāi)發(fā)教程(全2冊(cè))
- TypeScript 2.x By Example
- 工業(yè)機(jī)器人離線編程
- Yii2 By Example
- Python高性能編程(第2版)
- 詩(shī)意的邊緣
- CISSP in 21 Days(Second Edition)