我也要談談大型網站架構之系列(1)——縱觀歷史演變(上)

一線碼農發表於2014-04-23

 

  我們知道一個網站都是隨著業務的發展,逐漸演變成幾萬伺服器,幾億使用者數的大型網站,經歷了若干年,甚至上十年的

發展成為大型網站,然而真正親身經歷這個發展過程的人已經不多了,這種人也是拿著公司股票,趕都趕不走的人,所以正因

為很多人沒有親身經歷過,所以對架構的演變沒有深刻的瞭解,包括我自己在內,不過沒吃過豬肉,也看過豬跑。。。

 

一:第一代架構

  這年頭創業大多都是從窮屌絲開始的,奔著 “快好省”的原則建立網站,將“應用程式”,“檔案”,“資料庫”通通放在一臺服務

器上,匆匆的就走上了網站架構之路。

我們知道業務的發展對技術會有更高的要求,業務的創新會觸動技術的創新,當業務逐漸發展起來的時候,最容易出現的問題就是

”儲存空間“和通用的”效能低下“,這個時候就需要做到”應用程式“和”資料“的分離。

 

二:第二代架構

   隨著業務規模的擴大,需要將”應用程式“,”檔案“,”資料庫“進行分離,用更強大的cpu處理伺服器來承載應用程式,記得在上一

家用的cpu就是16核,”檔案“的話則需要更大的磁碟空間的伺服器,”資料庫“的話需要更大的磁碟和超大記憶體的伺服器,我們知道

sqlserver還是很吃記憶體的,記得用過最大的是120g的記憶體。

隨著業務規模不斷擴大,訪問人數逐漸增多,我們也開心了,起碼掙到錢了,然後我們會發現資料庫開始出現瓶頸了,大量的讀寫操作讓

資料庫出現訪問延遲以及死鎖現象的發生,繼而影響使用者體驗。

 

三:第三代架構

     既然大量的讀寫操作讓資料庫出現瓶頸了,這個時候就要從兩個方面優化讀寫操作

1. 讀操作

 

    我們知道任何東西都是遵守二八原則,也就是網站上經常訪問的東西也就那麼多,對於這種命中率非常高的東西就需要用快取來處理,

  減少讀的次數,在攜程裡面的memcache就做了“資料熱度”的操作,對於熱度低的資料會自動從快取中踢掉。

 

2. 寫操作

    這個有分及時寫和非及時寫,對於非及時寫的資料,我們可以採用 “訊息佇列”來對寫操作節流,從而緩解資料庫寫入時的瞬時壓力。

這時候資料庫的讀寫操作得到了很大的緩解,隨著業務規模的繼續擴大,使用者人數的再次暴增,我們會發現”應用程式伺服器“的CPU

經常高燒不退,被玩爆的次數越來越多。

 

四:第四代架構

      既然被爆表了,這時候必須再拉一個應用程式伺服器來分攤前端訪問帶來的壓力,做了叢集之後,需要再配一臺”負載均衡排程器“,

不過屌絲公司用的比較多的還是nginx,高大上的公司都是動輒幾十萬的硬體負載均衡,比如攜程用的就是A10,還有市場上幾十萬F5

等等產品。

 

好了,先大概這麼說了,睡覺時間到了,明天繼續往下扯。

 

相關文章