1. 程式人生 > >讀《大型網站技術架構:核心原理與案例分析》

讀《大型網站技術架構:核心原理與案例分析》

引言

這本書講述的是大型網站技術中的常見架構以及從小型網站到大型網站到演變歷程。在這本書裡面能讀到的,除了如何設計一個大型網站,更重要的是在網站架構設計的成長之路上,有哪些需要了解學習的地方。

這本書主要講了兩方面的事情,首先,如何從一個小型網站演變成一個大型網站。其次,如何衡量一個大型網站是否優秀。

網站演化之路

初始——LAMP

簡單網站架構

在這個時候,通常應用程式、資料庫與檔案系統都在同一個物理機器上。

各司其職——應用伺服器與檔案伺服器分離

應用伺服器與檔案伺服器分離

應用伺服器注重程式的處理速度,檔案伺服器側重儲存空間以及檔案讀寫能力,而資料庫則同時需要兩者,不同的需求決定了他們不能在一臺伺服器上永久共存,提高網站效能的簡單做法就是將三者拆分。

二八定律——使用快取迴應80%的請求

使用快取伺服器

大型網站中,常常能應用二八定律,比如說讀和寫的比例,比如說讀熱點資料和讀非熱點資料的比例。為了防止頻繁的讀操作導致資料庫宕機,可以使用快取提高響應速度同時緩解資料庫壓力。

而為了確保快取伺服器的可用性,可以使用叢集對快取伺服器進行部署。想要更高效率的部署快取伺服器叢集,可以使用一致性雜湊演算法,最小化下線快取所帶來的快取命中率降低。

叢集 —— 提高應用伺服器處理效能

應用伺服器叢集

併發量不斷提升的時候而網站單次響應速率無法迅速提升的時候,為了防止應用伺服器資源耗盡,我們採用應用伺服器叢集來處理請求。

二八定律——資料庫讀寫分離

資料庫讀寫分離

CAP定律

中提到,一致性,可用性,分散式,三者只能取其二。毫無疑問,資料庫的可用性是必須具備的,而單機的資料庫又無法處理大規模讀寫事務。因此,我們放棄一致性,選擇分散式。

資料庫的讀寫分離,將最大壓力的讀取資料部分轉移到了從伺服器,主伺服器負責寫事務並且將結果複製到從伺服器中。這樣做可能會出現段時間的主從資料不一致。

前端優化——反向代理及CDN

前端優化——CDN及反向代理

為了讓使用者最快速度地載入網頁,我們選擇將網頁到前端資源部署在各大運營商的骨幹網路中,儘可能地減少網路往返時延同時也降低了自身機房的網路壓力。

最後的絕招——分散式檔案系統及分散式資料庫

分散式檔案及分散式資料庫

在寫效能也不足的情況下,就會採用分散式的檔案系統以及分散式的資料庫。

如何衡量大型網站

作者在書中提出了五個指標,效能可用性伸縮性擴充套件性以及安全性

效能

網站效能是客觀的指標,可以具體體現到響應時間,吞吐量等技術指標。

對於使用者而言,效能就是從他輸入網址,到最後呈現整個網站所消耗的時間。但是對於我們來說,效能可以更加細緻,大的方面就可以劃分到前端,應用伺服器,資料庫,檔案伺服器,然後再根據每個方面再進行細分。

可用性

網站的可用性描述網站可有效訪問的特性。

在我理解,可用性應該從兩個方面去進行保證。一方面是應用內部進行保證,通過叢集來確保有足夠多的例項進行響應和心跳機制將失效例項淘汰。另外一方面則是確保應用外部環境的網路、電等要素可用。

伸縮性

所謂網站的伸縮性是指不需要改變網站的軟硬體設計,僅僅通過改變部署的伺服器數量就可以擴大或者縮小網站的服務處理能力。

擴充套件性

擴充套件性就是指在對現有系統影響最小的情況下,系統功能可持續擴充套件及提升的能力。

在這裡,更多的去減少不同模組之間功能的直接呼叫,改成通過通用的介面進行呼叫,這樣就不會導致模組的內部重構造成的大規模癱瘓。

結語

在這本書中,更多的其實是在講述,如何將大型網站結構從橫向、縱向不斷劃分,使得其能夠承受大規模的訪問。縱向的切割我們能夠看到各種服務的分離,比如應用服務與資料庫服務分離、快取服務的分離。而在橫向則更多的是如何增強單個業務例項的處理能力。

然後我們再去思考,在將不同業務分離之後,不同業務之間如何互動。在我們將應用伺服器叢集化撞擊後,再去思考如何將請求分配給叢集中的具體機器。

這本書很好地總結了業內已有的很多處理方案,給出了一個很成熟的路線圖,讀罷此書,視野更加開闊,然而千里之行,始於足下。

(本文圖片引用自書中)