scale cube,scale是擴展或者伸縮的意思,cube就是一個立方體。接下來簡單介紹一下這個cube的意思。本文主要參考了akf scale-cube。
Q: 什么是scale cube?
A:可以翻譯為伸縮立方,或者擴展立方。它總結(jié)了應(yīng)用進(jìn)行擴展/伸縮的三個方向,每個方向是立方體的一個軸。如圖:

其中XYZ軸分別表示:
- X軸,水平擴展,即將服務(wù)和數(shù)據(jù)復(fù)制多份
- Y軸,根據(jù)功能對應(yīng)用進(jìn)行拆分(比如微服務(wù))
- Z軸,根據(jù)服務(wù)或者數(shù)據(jù)進(jìn)行分區(qū)
Y軸是根據(jù)"Disimilar Things"進(jìn)行拆分,即不相似的東西,拆成獨立的服務(wù);Z軸是根據(jù)"Similar Things",即將相似的東西放到一起。比如根據(jù)用戶的來源地進(jìn)行拆分,來自于中國北方的訪問一個副本,來自于南方的訪問另一個副本。
如圖:

Q: scale cude中的X軸怎么理解?
A: 簡單來說,就是將應(yīng)用變?yōu)閹讉€副本,前面加上一個負(fù)載均衡器,使用一些負(fù)載均衡策略將流量導(dǎo)到各個副本上,以實現(xiàn)對更多流量的響應(yīng)。
好處:
- 實現(xiàn)起來簡單容易、快速
- 事務(wù)支持良好
壞處:
- 存儲。如果每個副本擁有自己的存儲,那么占用的存儲空間就會增大。
- 緩存。并沒有處理緩存問題。
- 如果應(yīng)用本身是有狀態(tài)的,比如具有session,或者要求session被存儲起來,那么多副本伸縮就較難處理。
如圖:

其中:
- Web層,表示對Web Servers(Web服務(wù)器)進(jìn)行復(fù)制,并且做負(fù)載均衡。如果是一個web應(yīng)用,放到了tomcat里面,那么web層的X軸擴展就是多個tomcat實例。
- App層,將session存儲在瀏覽器或者獨立的緩存中,這樣才能復(fù)制出多個副本。這些副本或者使用瀏覽器中的session,或者使用同一個地方對session進(jìn)行緩存。
- DB層。使用讀寫分離。讀副本為只讀業(yè)務(wù)場景服務(wù),如報告、搜索等業(yè)務(wù)場景,就使用讀副本。
一般來說,數(shù)據(jù)庫的多副本和應(yīng)用層的多副本處理方式是不一樣的。常見的就是多個副本使用同一個數(shù)據(jù)庫,數(shù)據(jù)庫進(jìn)行讀寫分離。
Q: scale cube中的Y軸怎么理解?
A: 簡單來說,就是將一個大的應(yīng)用分割為多個小的服務(wù)。分割的標(biāo)準(zhǔn)是不相似度(dissimilar)。這個跟大應(yīng)用中的模塊有些類似,模塊與模塊之間往往是不相似的。只是模塊運行在同一個進(jìn)程中,現(xiàn)在是將模塊運行在不同的進(jìn)程中。比如訂單管理、顧客管理就可以分為不同的小的服務(wù),共同組成電商應(yīng)用。
優(yōu)點:
- 對事務(wù)的擴展良好(呃...不太明白這點)
- 每個服務(wù)可以自由進(jìn)行擴展
- 組織機構(gòu)可以進(jìn)行擴展
- 緩存命中率提升。因為各個服務(wù)可以自行設(shè)計數(shù)據(jù)庫和緩存策略了嘛
- 可以通過故障隔離來增加可用性。以前是一個單體的話,某個地方出錯了,整個單體進(jìn)程就掛了。如果是微服務(wù),某個服務(wù)出錯了,其他服務(wù)依然可以繼續(xù)運行。
缺點:
- 架構(gòu)需要更多的時間
- 帶來了更多的服務(wù),造成了更高的復(fù)雜度
如圖:

這個方向就跟微服務(wù)是一樣的了。將單個應(yīng)用拆分為多個微服務(wù),也就符合微服務(wù)架構(gòu)的優(yōu)點和缺點了。
Q: scale cube中的Z軸怎么理解?
A: z軸更像是根據(jù)相似的東西進(jìn)行切分。這里舉兩個例子就比較容易理解了:
- 根據(jù)客戶(customer)的id,進(jìn)行區(qū)分。比如10000號之前的客戶的流量導(dǎo)入到副本A,10000號之后的導(dǎo)入到副本B
- 根據(jù)商品的sku,進(jìn)行區(qū)分。某些sku由副本A進(jìn)行處理,其他的由副本B處理。
優(yōu)點:
- 對事務(wù)的擴展良好(呃...不太明白這點)
- 減少了響應(yīng)時間。比如按地域進(jìn)行分割,湖南的請求到達(dá)的就是湖南的服務(wù)器
- 增加了緩存命中率。緩存的數(shù)據(jù)量減少了,自然命中率就上升了。比如數(shù)據(jù)從所有的customer,變成了10000號以內(nèi)的customer,自然數(shù)據(jù)量就減少了。
- 可以有故障隔離了。比如副本A出問題了,影響的只是10000號以內(nèi)的customer,其余的不影響。
缺點:
- 架構(gòu)需要花更多時間
- 復(fù)雜度增加
如圖:

Q: 為什么是個立方呢?
A: cube,立方的意思就是。這三個維度并不是完全獨立的,他們可以同時進(jìn)行,以達(dá)到擴展的目的。
考慮立方中的某個點,就是既有X軸上的值,又有Y軸上的值,又有Z軸上的值。也就是說,一個系統(tǒng)里面,可能是微服務(wù)的,可能針對某個服務(wù)做了多副本及負(fù)載均衡的,同時針對customer id進(jìn)行了分區(qū)的。
Q: scale cube和微服務(wù)是什么關(guān)系?
A: 很明顯,scale cube中的Y軸就是通過dissimilar things,將應(yīng)用劃分為多個微服務(wù)。所以微服務(wù)是scale cube的一個方向。至于scale cube能不能用于微服務(wù)拆分,這里可取的就是dissimilar了。也就是說,要判斷業(yè)務(wù)模塊之間的相似性,區(qū)分其不同,相似的放一塊,不同的就拆分為多個微服務(wù)。