目錄
????????編輯
單元化
邏輯單元
單元化
多地多機房部署,是互聯網系統的必然發展方向,一個系統要走到這一步,也就必然要解決上面提到的問題:流量調配、數據拆分、延時等。業界有很多技術方案可以用來解決這些問題,而承載這些方案的,是一個部署架構。盡管可采用的部署架構不止一個,但不論是純理論研究,還是一些先行系統的架構實踐,都把“單元化部署”推崇為最佳方案。
單元(即單元化應用服務產品層的部署單元),是指一個能完成所有業務操作的自包含集合,在這個集合中包含了所有業務所需的所有服務,以及分配給這個單元的數據。單元化架構就是將單元作為部署的基本單位,在全站所有機房中部署多個單元,每個機房內單元數目不固定,任一單元均部署系統所需的全部應用,數據則是全量數據按照某種維度劃分后的一部分。
傳統意義上的 SOA 化(服務化)架構,服務是分層的,每層的節點數量不盡相同,上層調用下層時,隨機選擇節點。
單元化架構下,服務仍然是分層的,不同的是每一層中的任意一個節點都屬于且僅屬于某一個單元,上層調用下層時,僅會選擇本單元內的節點。
一個單元,是一個五臟俱全的縮小版整站,它是全能的,因為部署了所有應用;但它不是全量的,因為只能操作一部分數據。能夠單元化的系統,很容易在多機房中部署,因為可以輕松將多個單元部署在一個機房內,而將另外幾個單元部署在其他機房內。通過在業務入口處設置一個流量調配器,可以調整業務流量在單元之間的比例。
從上述對單元的定義和特性描述中,可以推導出單元化架構要求系統必須具備的一項能力:數據分區,實際上正是數據分區決定了各個單元可承擔的業務流量比例。數據分區(shard),即是將全局數據按照某一個維度水平劃分開來,每個分區的數據內容互不重疊,這也就是數據庫水平拆分所做的事情。
僅把數據分區了還不夠,單元化的另外一個必要條件是,全站所有業務數據分區所用的拆分維度和拆分規則都必須一樣。若是以用戶分區數據,那交易、收單、微貸、支付、賬務等全鏈路業務都應該基于用戶維度拆分數據,并且采用一樣的規則拆分出同樣的分區數。比如,以用戶 id 末 2 位作為標識,將每個業務的全量數據都劃分為 100 個分區(00-99)。
有了以上兩個基礎,單元化才可能成為現實。把一個或幾個數據分區,部署在某個單元內,這些數據分區占總量數據的比例,就是這個單元能夠承擔的業務流量比例。 執行數據分區時一個很重要的問題是分區維度的選擇,一個好的維度,應該:
-
粒度合適:粒度過大,會喪失流量調配的靈活性和精細度;粒度過小,會給數據的支撐資源,訪問邏輯帶來負擔。
-
足夠平均:按這個分區維度劃分后,每個部署單元的數據量應該是幾乎一致的。
以用戶為服務主體的系統(很多面向用戶的系統,比如支付寶)通常可以按用戶維度對數據分區,這是一個最佳實踐。
邏輯單元
邏輯單元是單元化架構的基礎,一個單元被稱為一個 Zone。根據業務特點不同,您可以將系統部署在不同類型的邏輯單元中。更多信息,請參考?創建邏輯單元。
參考:
什么是單元化原理,如何實現單元化_金融分布式架構(SOFAStack)-阿里云幫助中心
支付寶資深技術專家尹博學:新一代金融核心突破之全分布式單元化技術架構-阿里云開發者社區