1. 程式人生 > >淘寶系統架構演進

淘寶系統架構演進

參考: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等阿里雲端計算服務,並通過阿里雲服務提供的高可用特性,實現雙機房容災和異地機房單元化部署,為淘寶業務提供穩定、高效和易於維護的基礎架構支撐。