分散式系統架構實踐

五彩石專案並沒有以淘寶網或者淘寶商城的架構為基礎進行演化式的改進,而是進行了比較徹底的重構,是一次全新的架構升級, 是分散式技術跨時代之進步。

分散式系統架構實踐

在做系統整合之前,整個架構和非網際網路的軟體廠商架構是一樣的,基礎架構基於商業資料庫、小型機、高階儲存裝置,業務系統架構是端到端的煙囪式架構。

簡單來說,每個業務版塊都是一個獨立系統,公共的資料都是訪問資料庫的,沒有形成公共的服務層。端到端的架構優勢是小規模團隊作戰,速度會很快,各種複雜的需要一般都只需在一個系統即可完成,而且研發同學對整個系統都很熟悉,系統運維都比較簡單,同時系統的穩定性也比較高。

隨著業務複雜度的提升,系統規模的不斷擴充套件,這種架構也開始出現問題。包括如下挑戰:

業務研發效率比較低

業務研發效率也導致了業務的擴充套件性受限,做一個新的市場也必須重新開始建設,而不能重用一些業務模組。

系統擴充套件性較弱

因為資料庫連線的關係。應用伺服器的擴充套件規模受限制,別外資料庫本身的容量也會因為小型機的計算能力而受限。

技術升級受限

比如要對資料庫進行擴充套件或者修改,需要修改多個系統,然後再對多個系統進行迴歸測試,同樣對熱點資料增加快取,也需要對多個系統進行修改。

通過抽象和梳理,本質上我們需要解決的第一個問題,就是業務的擴充套件性問題,然後需要解決因為這個問題帶來的技術擴充套件性問題。

  1、業務擴充套件性問題之解決

為了解決業務擴充套件性問題,首先需要建立共享服務層。把公共的業務元素抽離出來形成共享的服務。

比如、、等應用,這些都需要用到會員服務,那麼就把會員服務作為共享服務抽取出來,任何系統需要獲取會員資訊時只需通過呼叫會員服務的API就可以,而不需要每個業務方自己再開發一套會員系統。

同樣思路,把電商業務公共的服務,如商品服務、交易服務、營銷服務、店鋪服務、推薦服務、庫存、物流等從各個業務抽離出來建設成共享服務,後續新建的業務市場均基於這些公共的電商元素來構建。

共享服務層的建立很好地對橫向業務提供了統一的資料和服務收口,例如手機淘寶、安全、商家服務這三個橫向的業務就非常依賴共享服務。

如下列表:

手機淘寶通過共享服務得到了業務輸出的一致性和統一性

安全上,比如對商品資料做統一治理

商家服務則使用了共享服務開發TOP平臺,來對接外部商家的工具包

各個共享服務之間形成了比較的隔離,保障各個共享服務獨立的發展空間,每個共享服務之間有互相關聯,又互相獨立。

在系統建設上,把交易和商品兩個服務中心完全獨立的團隊和獨立的系統去建設。

商品服務中心和交易服務中心是完全獨立的兩套共享服務,所以在業務發展層面比較獨立,系統間又不互相影響。

這使得商品相關的業務全部封閉在商品服務中心裡,交易相關的業務全部封閉在交易服務中心裡,架構的域之間形成低耦合、高內聚。由於隔離做得比較好,沒有業務之間的複雜交錯,所以各個業務領域發展創新不受限制。

值得一提的案例就是早期支付業務慢慢成為支付寶,物流業務發展為菜鳥物流,而TOP從給商家提供API演化為服務商家的聚石塔。

  2、技術擴充套件性問題的解決

第二個問題就提技術擴充套件性。『房子千奇百怪,但是磚頭都是一樣的』。

利用共享服務解決了業務擴充套件性的問題,它的.好處是新構建一個業務市場變得非常容易和快捷,同時任何資料結構的變化只需在一個地方改變。

帶來的挑戰是系統分散式後對於研發來說,要關注分散式本身。這是我們不希望的,我們希望開發人員仍然像之前開發單機版的軟體一樣開發軟體,把分散式的控制在一些通用的元件裡面。

這就需要引入解決分散式問題的中介軟體技術。

當時並沒有商業軟體可以使用,也沒有合適的開源產品可以選。五彩石專案第一次大規模使用了中介軟體。系統分散式後,需要有一套統一的元件來解決分散式引發的共性技術問題。比如提供服務的發現機制、提供服務的分組路由機制、同機房優先機制等。我們將其沉澱在一個框架裡,這個框架被稱為HSF。

為了解決單庫效能瓶頸問題,使用分庫分表的技術,這個技術被沉澱在TDDL框架上面。

為了解決分散式事務的效能問題,把原本一個事務的工作拆成了非同步執行,同時必須要保證最終資料的一致性,我們採用了訊息釋出訂閱的方式來解決,這個訊息框架就是Notify。

有了HSF、TDDL、Notify這『三大件』,有效地解決了應用分散式後引發的技術擴充套件性問題,同時讓整個系統的技術架構變得依舊如當七年級樣的簡。

如果系統計算能力不夠,基本上能做到只需要增加伺服器即可。共享服務層和分散式中介軟體使頻繁的業務變化封閉在了一個適合的系統層,同時技術的變化也隔離在了一個合適的範圍。如下圖所示:

  小結

為了解決業務擴充套件性問題,通過抽取共享服務層,在非常低的試錯成本下湧現出來大量新的業務市場,推動了阿里電商業務的快速發展,同時共享服務本身也隨著業務發展起到了越重要的作用。比如庫存中心服務的抽取,使得和商家對接的供應鏈領域得到了快速發展。

為了解決技術擴充套件性問題,引入了分佈中介軟體技術。擴充套件伺服器的儲存和計算能力變得只需要增加伺服器就可以輕鬆解決,研發過程不需要關注分散式帶來的的理解上的困難。分散式中介軟體的本質是讓多臺廉價的PC伺服器可以組成一臺超級計算機

通過五彩石專案,阿里技術完成了一次偉大的技術變革,為後續的持續架構演進打下了堅實基礎。沉澱了一套『共享服務化』的架構理念,以及一套與該架構理念相對應的分散式中介軟體技術。

這個架構理念和這套分散式中介軟體技術在後續阿里的業務和技術發展上被大範圍使用,同時也被業界很多網際網路公司所借鑑。