翻譯自: http://microservices.io/articles/scalecube.html
轉(zhuǎn)載聲明: 請(qǐng)注明原文地址和該譯文出處厢蒜。
注意: 若有翻譯不當(dāng)之處,請(qǐng)指明脚囊。共同進(jìn)步。
有一本書(shū)桐磁,名字是 《The Art of Scalability》悔耘,其展示了一個(gè)模型(The scale cube, 立方體擴(kuò)展模型)描述了一個(gè)非常有用的 可從三個(gè)維度來(lái)進(jìn)展擴(kuò)展軟件架構(gòu).
在此模型中,把一個(gè)應(yīng)用服務(wù) 部署/克隆 多份 以達(dá)到負(fù)載均衡 這個(gè)稱之為 X軸擴(kuò)展我擂。其它兩種擴(kuò)展方式 為 Y軸擴(kuò)展和Z軸擴(kuò)展衬以。 ?我們所說(shuō)的 微服務(wù)架構(gòu)是基于 Y軸擴(kuò)展方式的固逗。 下面來(lái)詳細(xì)聊下 這三種擴(kuò)展方式令漂。
X軸擴(kuò)展
這種擴(kuò)展方式是由運(yùn)行多個(gè)相同的一個(gè)應(yīng)用以此來(lái)實(shí)現(xiàn)負(fù)載均衡。如果有 N個(gè)相同的應(yīng)用部署,那么每個(gè)單獨(dú)的應(yīng)用只需要處理 ?1/N 份的負(fù)載請(qǐng)求角溃。 這是一種簡(jiǎn)單的蚌本,普遍的一種擴(kuò)展方式囱持。
這種擴(kuò)展方式也有一個(gè)缺點(diǎn)那就是每一個(gè)單獨(dú)的應(yīng)用服務(wù)都有可能訪問(wèn)所有的數(shù)據(jù)冬耿,所以內(nèi)存中不得不緩存更多的數(shù)據(jù)來(lái)高效的響應(yīng)。另外一個(gè)缺點(diǎn)就是 當(dāng)開(kāi)發(fā)需求或是開(kāi)發(fā)所導(dǎo)致的問(wèn)題越來(lái)越多時(shí)或是應(yīng)用本身的復(fù)雜性提高時(shí) 所帶來(lái)的管理及運(yùn)維挑戰(zhàn).
Y軸擴(kuò)展
不同于X軸與Z軸 是由多個(gè)同時(shí)運(yùn)行的相同應(yīng)用服務(wù)組成冯勉。 Y軸擴(kuò)展則是盡可能的拆分一個(gè)單獨(dú)的應(yīng)用 成 多個(gè)不同的服務(wù)澈蚌。每個(gè)不同的服務(wù)則負(fù)責(zé)一個(gè)到多個(gè)相近的功能模塊。
目前有很多種方式來(lái)進(jìn)行拆分一個(gè)應(yīng)用為多個(gè)不同的服務(wù)灼狰。 其中一個(gè)方法就是 基于動(dòng)詞 的拆分方式來(lái)定義服務(wù)是如何實(shí)現(xiàn)一個(gè) 用戶用例宛瞄, 比如在電商網(wǎng)站中 ?“買(mǎi)單” 這樣一個(gè)動(dòng)作可以單獨(dú)開(kāi)發(fā)一個(gè)服務(wù)與之對(duì)應(yīng)。 ?那么理所當(dāng)然還有另外一種拆分的方法就是 ?基于名詞 的交胚。
再比如說(shuō)在電商網(wǎng)站中的 “歷史訂單管理”份汗。
當(dāng)然一個(gè)應(yīng)用本身可能也需要兩種拆分方式組合起來(lái)。
Z軸擴(kuò)展
這種擴(kuò)展方式類似于X軸蝴簇,都是在多個(gè)服務(wù)器上運(yùn)行一段相同的代碼杯活。它們最大的不同是Z軸擴(kuò)展上的每個(gè)服務(wù)器僅僅 擁有/負(fù)責(zé) ?一部分?jǐn)?shù)據(jù)。 一些系統(tǒng)組件可以做到 分發(fā)/路由 每一個(gè)請(qǐng)求到相對(duì)應(yīng)的服務(wù)器數(shù)據(jù)集中熬词。 一個(gè)普遍使用的 分發(fā)/路由 規(guī)則就是基于 包含在請(qǐng)求屬性當(dāng)中的 “對(duì)像的主鍵值”旁钧, 另外一個(gè)則是基于發(fā)送請(qǐng)求的不同的用戶類型。 舉個(gè)栗子荡澎,一個(gè)應(yīng)用服務(wù)可以提供更高的存儲(chǔ)容量給 付費(fèi)用戶均践, 對(duì)免費(fèi)用戶則是相對(duì)應(yīng)的少一些晤锹。
Z軸的拆分通常就是針對(duì)數(shù)據(jù)庫(kù)的擴(kuò)展摩幔。 數(shù)據(jù)根據(jù)一定的特征被分區(qū)在不同的分區(qū)服務(wù)器上。再舉個(gè)栗子鞭铆, 我們可以根據(jù)日期來(lái)拆分相同的數(shù)據(jù)或衡。需要注意的是X軸擴(kuò)展方式下的每個(gè)分區(qū)數(shù)據(jù)可能需要被部署到一個(gè)或多個(gè)復(fù)本服務(wù)器上。
Z軸擴(kuò)展同樣也可以用到對(duì)應(yīng)用程序的拆分上车遂,栗子封断, 一個(gè)搜索服務(wù)可能涉及多個(gè)分區(qū)服務(wù)器上的數(shù)據(jù), 這時(shí)需要有一個(gè)路由程序發(fā)送搜索請(qǐng)求到索引并且存儲(chǔ)相應(yīng)數(shù)據(jù)的相應(yīng)分區(qū)服務(wù)器上舶担。 同時(shí)也需要一個(gè) 查詢聚合器將每個(gè)分區(qū)返回的數(shù)據(jù)合并起來(lái)坡疼。
Z軸擴(kuò)展有幾個(gè)優(yōu)點(diǎn):
1) 每個(gè)分區(qū)服務(wù)器只處理一部分?jǐn)?shù)據(jù)
2) 改善緩存的使用率并減少內(nèi)存使用和IO操作
3) 同時(shí)改善了事務(wù)處理的擴(kuò)展性, 因?yàn)椴煌瑪?shù)據(jù)的請(qǐng)求已經(jīng)被分發(fā)到不同的服務(wù)器上.
4) 同樣也易于故障隔離, 因?yàn)橐粋€(gè)故障只僅僅影響一部分?jǐn)?shù)據(jù)的訪問(wèn), 不是所有.
幾個(gè)缺點(diǎn):
1) 增加了軟件的復(fù)雜度
2) 需要實(shí)現(xiàn)數(shù)據(jù)分區(qū)方案, 特別是某種情況下我們有可能需要對(duì)數(shù)據(jù)進(jìn)行 ?重新分區(qū).
3) 如果軟件的復(fù)雜度提升, Z軸擴(kuò)展方式不能很好的處理. 這時(shí)需要用到的就是Y軸的擴(kuò)展方式.