自2003年創立以來的,淘寶業務發展很是迅速,幾乎是每一年以100%的速度在成長。創立之初,爲了快速上線,搶佔市場,選擇了當時流行的LAMP架構,用PHP做爲網站開發語言, Linux做爲操做系統,Apache做爲Web服務器,MySQL爲數據庫,用了三個月不到的時間淘寶就上線了。當時整個網站應用服務器大概10臺左右,MySQL數據庫採用了讀寫分離、一主兩備的部署方式。數據庫
2004年在淘寶業務發展的推進下,咱們參考電信運營商、銀行等的一些企業解決方案,將LAMP架構改造爲Oracle+IBM小型機的數據庫架構和EMC存儲方式(圖2)。雖然方案成本昂貴,但性能很是好。同時,隨着網站流量的增長,系統顯得有些不堪重負。當時最擔憂的問題是網站流量若是持續增長,交易量持續增長,網站的系統架構怎麼設計?如何選擇數據庫?如何選擇緩存?如何構建業務系統?……後來參考eBay的互聯網設計架構,設計了一個Java的技術方案,並使用了很是多的Java開源產品。例如,選擇當時比較流行的JBoss,做爲應用服務器;選擇一個開源的IOC容器Spring,來管理業務類;封裝了一個數據庫訪問工具IBatis,做爲數據庫和Java類的Object-Reletionship映射工具。另外,對於商品搜索功能,採用本身開發的ISearch搜索引擎來取代在Oracle數據庫中進行搜索,下降數據庫服務器的壓力。作法比較簡單,天天晚上全量將Oracle小型機的數據dump出來,Build成ISearch的索引,當時商品量也不大,一臺普通配置的服務器,基本上能夠將全部的索引都放進去,沒作切分,直接作了一個對等集羣。瀏覽器
從2006年開始,淘寶爲了改善用戶體驗,開始創建本身的CDN站點,因爲淘寶的主要流量來源於各類商品圖片、商品描述等靜態數據,自建CDN可使這些資源離用戶更近,提高用戶訪問速度,改善用戶瀏覽網站的體驗。緩存
2007年,淘寶整年的交易額超過400億元,平均近1億多一天,天天有100多萬筆交易被建立。當時面對的幾個主要問題是:一些系統的流量很是大,如商品詳情等,若是直接訪問數據庫,會致使數據庫壓力很是大;如用戶信息,訪問一個頁面,都須要查詢買家信息、賣家信息、顯示出買家的信用、賣家的服務星級等。此時,淘寶採用分佈式緩存TDBM(Tair的前身)將這些熱點靜態數據緩存在內存中,提升訪問性能。另外,將本身研發的分佈式文件系統TFS部署在多臺x86服務器上,取代商業的NAS存儲設備來存儲淘寶的各類文件信息,如商品圖片、商品描述信息、交易快照信息,來達到下降成本和提升總體系統的容量和性能的目的,同時能夠實現更靈活的擴展性。第一期上線大概200臺TFS服務器。另外,將ISearch搜索引擎改成分佈式架構,支持水平擴展,部署了48個節點。圖3展現了這一架構思路。服務器
2008年初,爲了解決Oracle數據庫集中式架構的瓶頸問題(鏈接數限制、I/O性能),將系統進行了拆分,按照用戶域、商品域、交易域、店鋪域等業務領域進行拆分,創建了20多個業務中心,如商品中心、用戶中心、交易中心等。全部有用戶訪問需求的系統,必須使用業務中心提供的遠程接口來訪問,不可以直接訪問底層的MySQL數據庫,經過HSF這種遠程通訊方式來調用業務中心的服務接口,業務系統之間則經過Notify消息中間件異步方式完成調用。圖4是淘寶的分佈式架構圖。網絡
從2010年開始,淘寶網重點着眼於統一架構體系,從總體系統層面考慮開發效率、運維標準化、高性能、高可擴展性、高可用、低成本方面的要求,底層的基礎架構統一採用了阿里雲計算平臺(圖5),使用了SLB、ECS、RDS、OSS、ONS、CDN等阿里雲計算服務,並經過阿里雲服務提供的高可用特性,實現雙機房容災和異地機房單元化部署,爲淘寶業務提供穩定、高效和易於維護的基礎架構支撐。架構
在從IOE架構最終向雲計算平臺技術架構轉移的過程當中,主要面臨如下幾個技術挑戰。併發
■ 可用性:脫離小型機和高端存儲的高冗餘機制,採用基於PC服務器的分佈式架構的雲計算平臺可否作到高可用。運維
■ 一致性:Oracle基於RAC和共享存儲實現的物理級別一致性,基於RDS for MySQL可否達到一樣的效果。異步
■ 高性能:高端存儲的I/O能力很強,基於PC服務器的RDS可否提供一樣甚至更高的I/O處理能力,MySQL和Oracle對SQL的處理性能是否相同。分佈式
■ 擴展性:業務邏輯如何拆分,如何服務化,數據分多少庫分多少表,什麼維度分,後期二次拆分如何更方便等。
基於阿里雲計算平臺,經過採用合適的技術策略和最佳實踐,包括:應用無狀態,有效使用緩存(瀏覽器緩存、反向代理緩存、頁面緩存、局部頁面緩存、對象緩存和讀寫分離),服務原子化,數據庫分割,異步解決性能問題,最小化事物單元,適當放棄一致性。以及自動化監控/運維手段包括監控預警、配置統一管理,基礎服務器監控,URL監控,網絡監控,模塊間調用監控,智能分析監控,綜合故障管理平臺,容量管理。能夠很好地解決以上問題,從而達到總體系統的高可擴展性、更低的成本、更高的性能和可用性的實現效果。
淘寶的技術架構是一個伴隨業務逐漸發展而逐步演進的過程,中間沉澱了不少寶貴的架構最佳實踐。對於大部分企業級客戶來講,能夠結合本身的業務場景選擇合適的技術架構來實現總體IT系統的互聯網化設計。不一樣應用場景下的遷雲架構,包括文件存儲、應用服務、OLTP數據庫、OLAP數據庫。
對於文件存儲方式,能夠直接用OSS取代EMC存儲實現海量數據文件的存儲,OSS存儲最大容量能夠達40PB,同時因爲OSS是分佈式存儲方式,能夠經過多個節點的並行讀寫顯著提升數據訪問性能。對於大文件,還能夠經過Multipart Upload的方式,將大文件分塊並行傳輸與存儲,實現高性能。
對於應用服務,可經過SLB+多臺ECS實例組合取代IBM小型機(圖6),也能夠根據不一樣應用類型,直接基於ACE、ONS、OpenSearch等阿里雲中間件雲服務部署。
OLTP應用的遷移相對複雜。目前阿里雲的RDS實例最高是48GB內存,14000IOPS,1TB的存儲容量(SSD存儲),支持MySQL和SQL Server。這個配置做爲單數據庫服務器來使用能夠知足不少場景的數據庫應用需求,可直接取代大部分場景下的IBM小型機+Oracle數據庫+EMC存儲。
對於性能要求更高的應用,可考慮引入開放緩存服務OCS,將部分查詢數據加載至分佈式緩存中,減小RDS的數據查詢次數,提高系統的數據查詢併發效率和下降響應時間,如圖7所示。
對於讀的請求遠大於寫請求的場景,能夠考慮用多個RDS數據庫,採用分佈式方式實現讀寫分離,寫交易主要發生在主庫,讀請求訪問備庫,能夠根據需求對讀庫進行擴展,以實現總體請求性能的提高。
對於數據規模較大的數據庫表,能夠經過水平切分的方式,將數據分佈在多個RDS實例上,經過並行的分佈式數據庫操做來實現性能和容量的提高。
總的來講,經過遷移到RDS、引入數據緩存、分庫分表、讀寫分離等多種方式能夠用Scale-Out方式取代原有的IOE架構,而且得到更好的性能和擴展性。
對於OLAP應用,可採用ODPS+OTS+RDS/ADS的解決方案取代小型機+Oracle DB+OLAP+RAC+EMC存儲解決方案,如圖11所示。整體來看,遷雲的通用架構方案如圖12所示,針對具體業務系統的遷雲方案還須要根據實際狀況進行分析和合理選擇。