一個成熟的大型網站(如淘寶、京東等)的系統架構需要考慮諸多復雜的因素,因為像淘寶這種大型網站數據量比一般的網站要大的多,所以在設計架構方面也要復雜的多,既要考慮成本因素也要考慮訪問速度安全性等。這里我簡單的對淘寶的網站系統架構進行一個簡單的分析。
淘寶作為一個大型購物網站,其數據量是很大的,所以不像一般網站,淘寶需要用各種方法來保證服務器的正常運行以及用戶購買時的良好體驗。主要由以下方式:1.應用、數據、文件分離 2.利用緩存改善網站性能 3.使用CDN和反向代理提高訪問速度 4.使用分布式文件系統
5.將應用服務器進行業務拆分
首先隨着作為大型購物網站,一台服務器已經肯定滿足性能需求,所以將應用程序、數據庫、文件各自部署在獨立的服務器上,並且根據服務器的用途配置不同的硬件,達到最佳的性能效果。在硬件優化性能的同時,同時也通過軟件進行性能優化,在大部分的網站系統中,都會利用緩存技術改善系統的性能,使用緩存主要源於熱點數據的存在,大部分網站訪問都遵循28原則(即80%的訪問請求,最終落在20%的數據上),所以我們可以對熱點數據進行緩存,減少這些數據的訪問路徑,提高用戶體驗。
由於功能復雜,用戶訪問路徑長,淘寶選擇對這些數據進行緩存以提高用戶的訪問速度。緩存實現常見的方式是本地緩存、分布式緩存。本地緩存,顧名思義是將數據緩存在應用服務器本地,可以存在內存中,也可以存在文件,本地緩存的特點是速度快,但因為本地空間有限所以緩存數據量也有限。分布式緩存的特點是,可以緩存海量的數據,並且擴展非常容易,在門戶類網站中常常被使用,速度按理沒有本地緩存快。同時提供均衡負載服務器來分擔主要服務器的壓力。
使用CDN和反向代理提高網站性能。由於淘寶的服務器不能分布在國內的每個地方,所以不同地區的用戶訪問需要通過互聯路由器經過不同長度的路徑來訪問服務器,返回路徑也一樣,所以數據傳輸時間比較長。對於這種情況,常常使用CDN解決,CDN將數據內容緩存到運營商的機房,用戶訪問時先從最近的運營商獲取數據,這樣大大減少了網絡訪問的路徑。
在這里簡單介紹一下CDN的原理。CDN的全稱Content Delivery Network,即內容分發網絡。CDN是一個經策略性部署的整體系統,從技術上全面解決由於網絡帶寬小、用戶訪問量大、網點分布不均而產生的用戶訪問網站響應速度慢的根本原因。CDN目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發布到最接近用戶的網絡“邊緣”,使用戶可以就近取得所需的內容,解決 Internet 網絡擁塞狀況,提高用戶訪問網站的響應速度。CDN是一種組合技術,其中包括源站、緩存服務器、智能DNS幾個重要部分。
源站
緩存服務器
智能DNS
隨着業務進一步擴展,這時我們需要將應用程序進行業務拆分。每個業務應用負責相對獨立的業務運作(所以需要開辟多個服務對不同業務進行划分)。業務之間通過消息進行通信或者同享數據庫來實現。所以在負載服務器上鏈接一個B業務服務器在對其業務進行分布式划分(如用戶,訂單,支付等),然后B級業務服務器通過消息隊列服務器來與A業務服務區進行實時通信已經共享數據。 諸如此類的A,B服務器有許多,相互之間都可以進行共享數據。
下面簡單介紹一下淘寶的數據庫架構。對於淘寶來說,最重要的就是數據庫的架構。
按照數據的流向來划分,我們把淘寶數據產品的技術架構分為五層(如上圖所示),分別是數據源、計算層、存儲層、查詢層和產品層。位於架構頂端的是我們的數據來源層,這里有淘寶主站的用戶、店鋪、商品和交易等數據庫,還有用戶的瀏覽、搜索等行為日志等。在數據源層實時產生的數據,通過淘寶自主研發的數據傳輸組件准實時地傳輸到一個Hadoop集群上,這個集群稱之為“雲梯”,是計算層的主要組成部分。不得不提的是,一些對實效性要求很高的數據,例如針對搜索詞的統計數據,我們希望能盡快推送到數據產品前端。這種需求再采用“雲梯”來計算效率將是比較低的。為此我們做了流式數據的實時計算平台,稱之為“銀河”。“銀河”也是一個分布式系統,它接收來自前端的實時消息,在內存中做實時計算,並把計算結果在盡可能短的時間內刷新到NoSQL存儲設備中,供前端產品調用。
我們針對前端產品設計了專門的存儲層。在這一層,我們有基於MySQL的分布式關系型數據庫集群MyFOX和基於HBase的NoSQL存儲集群Prom。存儲層異構模塊的增多,對前端產品的使用帶來了挑戰。為此,我們設計了通用的數據中間層glider來屏蔽這個影響。glider以HTTP協議對外提供restful方式的接口。數據產品可以通過一個唯一的URL獲取到它想要的數據。
總體來說淘寶網站的架構十分復雜,因為淘寶這種大型購物網站的數據量比一般網站要大的多,而且涉及到巨額的財產交易,所以網絡的安全性,穩定性自然是必須要保證的。而且盡量要降低運行成本,提高用戶體驗。如此多的要求對於一個團隊來說確實十分困難,但是淘寶的技術團隊通過各種技術手段很好的解決了這些問題。總體來說無論是淘寶的網站架構還是它的數據庫架構都是同行業的標桿。