AKF擴展立方體(Scalability Cube)本刽,是《架構(gòu)即未來》一書中提出的可擴展模型钝域,這個立方體有三個軸線,每個軸線描述擴展性的一個維度目木,他們分別是產(chǎn)品、流程和團隊:
X軸 —— 代表無差別的克隆服務(wù)和數(shù)據(jù)懊渡,工作可以很均勻的分散在不同的服務(wù)實例上刽射;
Y軸 —— 關(guān)注應(yīng)用中職責的劃分,比如數(shù)據(jù)類型剃执,交易執(zhí)行類型的劃分誓禁;
Z軸 —— 關(guān)注服務(wù)和數(shù)據(jù)的優(yōu)先級劃分,如分地域劃分肾档。
三個維度擴展的對比
通過這三個維度上的擴展摹恰,可以快速提高產(chǎn)品的擴展能力,適應(yīng)不同場景下產(chǎn)品的快速增長怒见。不同維度上的擴展俗慈,有著不同的優(yōu)缺點:
1.X軸擴展
優(yōu)點:成本最低,實施簡單速种;
缺點:受指令集多少和數(shù)據(jù)集大小的約束姜盈。當單個產(chǎn)品或應(yīng)用過大時,服務(wù)響應(yīng)變慢配阵,無法通過X軸的水平擴展提高速度馏颂;
場景:發(fā)展初期示血,業(yè)務(wù)復(fù)雜度低,需要增加系統(tǒng)容量救拉。
2.Y軸擴展
優(yōu)點:可以解決指令集和數(shù)據(jù)集的約束难审,解決代碼復(fù)雜度問題,可以實現(xiàn)隔離故障亿絮,可以提高響應(yīng)時間告喊,可以使團隊聚焦更利于團隊成長;
缺點:成本相對較高派昧;
場景:業(yè)務(wù)復(fù)雜黔姜,數(shù)據(jù)量大,代碼耦合度高蒂萎,團隊規(guī)模大秆吵。
3.Z軸擴展
優(yōu)點:能解決數(shù)據(jù)集的約束,降低故障風(fēng)險五慈,實現(xiàn)漸進交付纳寂,可以帶來最大的擴展性。
缺點:成本最昂貴泻拦,且不一定能解決指令集的問題毙芜;
場景:用戶指數(shù)級快速增長。
如何將理論付諸實踐争拐?
1.為擴展分割應(yīng)用
X軸:從單體系統(tǒng)或服務(wù)腋粥,水平克隆出許多系統(tǒng),通過負載均衡平均分配請求陆错;
Y軸 :面向服務(wù)分割灯抛,基于功能或者服務(wù)分割,例如電商網(wǎng)站可以將登陸音瓷、搜索对嚼、下單等服務(wù)進行Y軸的拆分,每一組服務(wù)再進行X軸的擴展绳慎;
Z軸 :面向查找分割纵竖,基于用戶、請求或者數(shù)據(jù)分割杏愤,例如可以將不同產(chǎn)品的SKU分到不同的搜索服務(wù)靡砌,可以將用戶哈希到不同的服務(wù)等。
2.為擴展分割數(shù)據(jù)庫?
X軸:從單庫珊楼,水平克隆為多個庫上讀通殃,一個庫寫,通過數(shù)據(jù)庫的自我復(fù)制實現(xiàn)厕宗,要允許一定的讀寫時延画舌;
Y軸 :根據(jù)不同的信息類型堕担,分割為不同的數(shù)據(jù)庫,即分庫曲聂,例如產(chǎn)品庫霹购,用戶庫等;
Z軸 :按照一定算法朋腋,進行分片齐疙,例如將搜索按照MapReduce的原理進行分片,把SKU的數(shù)據(jù)按照不同的哈希值進行分片存儲旭咽,每個分片再進行X軸冗余贞奋。
3.為擴展而緩存
在理想情況下,處理大流量最好的方法是通過高速緩存來避免處理它轻专。從架構(gòu)層面看忆矛,我們能控制的主要有以下三個層次的緩存:
對象緩存:對象緩存用來存儲應(yīng)用的對象以供重復(fù)使用察蹲,一般在系統(tǒng)內(nèi)部请垛,通過使用應(yīng)用緩存可以幫助數(shù)據(jù)庫和應(yīng)用層卸載負載。
應(yīng)用緩存:應(yīng)用緩存包括代理緩存和反向代理緩存洽议,一個在用戶端宗收,一個在服務(wù)端,目標是提高性能或減少資源的使用量亚兄。
內(nèi)容交付網(wǎng)絡(luò)緩存:CDN的總原則是將內(nèi)容推送到盡可能接近用戶終端的地方混稽,通過不同地區(qū)使用不同ISP的網(wǎng)關(guān)緩存,達到更快的響應(yīng)時間和對源服務(wù)的更少請求审胚。
4.位擴展而異步
同步改異步:同步調(diào)用匈勋,由于調(diào)用間的同步依賴關(guān)系,有可能會導(dǎo)致雪崩效應(yīng)膳叨,出現(xiàn)一系列的連鎖故障洽洁,進而導(dǎo)致整個系統(tǒng)出現(xiàn)問題,所以在進行系統(tǒng)設(shè)計時菲嘴,要盡可能的考慮異步調(diào)用方式饿自,郵件系統(tǒng)就是一個非常好的異步調(diào)用例子。
應(yīng)用無狀態(tài):當進行AKF擴展立方體的任何一個軸上的擴展時龄坪,都要首先解決應(yīng)用的狀態(tài)問題昭雌,即會話的管理,可以通過避免健田、集中和分散的方式進行解決烛卧。
AKF擴展立方體是一套通用的擴展性理論,它不僅可以應(yīng)用到系統(tǒng)的架構(gòu)擴展上妓局,也可以應(yīng)用到人員的組織架構(gòu)擴展上甚至其他相關(guān)的工業(yè)領(lǐng)域总放。
當然并不是所有公司都需要同時在XYZ三個方向上進行擴展雳旅,并且每個方向上的擴展都有它的利弊,我們不可避免的要進行適當?shù)臋?quán)衡间聊。最重要的攒盈,我們應(yīng)當首先理解這套理論背后所體現(xiàn)出來的擴展哲學(xué)。