淘寶系統架構演進
參考:https://baijiahao.baidu.com/s?id=1582105537948510772&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1582194900446787837&wfr=spider&for=pc
淘寶1.0架構
第一個階段:LAMP+資料庫讀寫分離
採用經典的LAMP架構,mySQL採用M-S模式,實現了讀寫分離,如下圖所示:
LAMP架構的優點在於:無需編譯,釋出快速,PHP能做從頁面渲染到資料訪問所有的事情,且開源,免費。
LAMP架構比較適合早期創業公司在產品和商業模式的驗證階段,可以快速實現產品原型,快速部署,比較高效。
注:大部分情況下,第一階段可以先將應用端的壓力(大量的圖片、資料訪問等)轉移到多型伺服器,或者轉移到CDN以及快取上面,來降低資料庫端的壓力, 過了這個階段後,再考慮讀寫分離會好很多。
淘寶2.0架構
第二階段,把mysql替換為oracle,為了使用oracle的連線池,php採用代理連線 sqlreplay
1.0問題:PHP + Apache ,每一個請求都會對產生一個數據庫連線,沒有連線池這種功能(Java 語言有 Servlet 容器,可以存放連線池),造成的資料庫端的瓶頸特別明顯。
方案:Oracle容量大、穩定、安全、效能高、併發能力強,歸功於一個關鍵性設計——連線池,且存放的是長連線,任何一個請求只需要從連線池中取得一個連結即可,用完後釋放,不需要頻繁的建立和斷開連線。
2003年底,把mysql換成了oracle,資料庫連線端使用一個開源的連線池代理服務SQL Relay。如下圖所示:
淘寶3.0架構
第三階段,把php替換為java,業務程式碼重寫,採用多層結構,全部替換為java體系,加入快取、搜尋、分散式儲存。
2.0問題:手動sqlrelay代理服務經常會死鎖;資料庫端的壓力還是比較大。
方案:
參考電信運營商、銀行等的一些企業解決方案,LAMP架構改造為Oracle+IBM小型機的資料庫架構和EMC儲存方式,並使用了非常多的Java開源產品;
採用自己開發的ISearch搜尋引擎(叢集)來取代在Oracle資料庫中進行搜尋,降低資料庫伺服器的壓力。
以下為3.1架構體系,可以看到,該版本已經基本轉換成了java語言,且對服務進行了分層。
後續又主要做了如下調整,出了3.2版本:
Oracle資料庫分庫,商品資訊和使用者資訊分庫存放,由資料庫路由的框架DBRoute統一處理資料的合併、排序、分頁等操作;
控制層用Spring框架替換EJB;
研發基於Berkeley DB的快取系統,把很多不太變動的只讀資訊放了進去;
加入CDN內容分發網路。
3.2版本架構圖如下所示:
淘寶4.0架構
3.0問題:難以支撐高速業務發展難以支撐系統可伸縮性資料庫連線達到上限 (每個Oracle資料庫大約提供5000個連結)
方案:
將系統進行了拆分,按照使用者域、商品域、交易域、店鋪域等業務領域進行拆分,建立了20多個業務中心,如商品中心、使用者中心、交易中心等,拆分的好處有以下幾點:
1.每個系統可以單獨部署,業務簡單,方便擴容;
2.有大量可重用的模組以便於開發新的業務;
3.能夠做到專人專事,讓技術人員更加專注於某一個領域;
HSF框架,保證底層的系統具有超大規模的容量和非常高的可用性,保證上傳服務的正常呼叫
對於大量的非同步呼叫的場景,使用Notify非同步訊息通知件
TBSession解決多平臺的單點登入問題
TFS,以及快取Tari等,解決了大量圖片的儲存問題
TDDL,解決分庫分表需要涉及到對應的SQL路由規則主庫備庫等問題
後記
從2010年開始,淘寶網重點著眼於統一架構體系,從整體系統層面考慮開發效率、運維標準化、高效能、高可擴充套件性、高可用、低成本方面的要求,底層的基礎架構統一採用了阿里雲端計算平臺,使用了SLB、ECS、RDS、OSS、ONS、CDN等阿里雲端計算服務,並通過阿里雲服務提供的高可用特性,實現雙機房容災和異地機房單元化部署,為淘寶業務提供穩定、高效和易於維護的基礎架構支撐。