国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  行業(yè)資訊 >  架構(gòu) >  構(gòu)架設(shè)計與拆分的哲學(xué)

構(gòu)架設(shè)計與拆分的哲學(xué)

2021-04-19 20:29:06 1385

(一)、架構(gòu)拆分方式

我們談架構(gòu),架構(gòu)分為:服務(wù)和數(shù)據(jù)兩部分(DB、Cache、ES等等)。架構(gòu)設(shè)計要適度,要能否滿足企業(yè)未來6-24個月的業(yè)務(wù)需求增長,避免過度設(shè)計。


架構(gòu)設(shè)計與拆分的哲學(xué)1.webp_副本.jpg


接下來,我們先看單體應(yīng)用。單體應(yīng)用遵循MVC結(jié)構(gòu)。典型的單體應(yīng)用組網(wǎng)拓撲如下所示:


架構(gòu)設(shè)計與拆分的哲學(xué)2.webp_副本.jpg


在單體應(yīng)用中,有三個模塊,每個模塊都有各自的MVC層。同樣,在數(shù)據(jù)庫中,針對三個模塊,也會有三個表。如果單體應(yīng)用能做到無狀態(tài)化,也能做到橫向擴展。


架構(gòu)設(shè)計與拆分的哲學(xué)3.webp_副本.jpg


但是上面的應(yīng)用將是一個“巨無霸”,我們無法對其中一個功能組件單獨升級。而且,如果想給單體應(yīng)用增加新的功能模塊,需要重新開發(fā),整體替換。因為,要對這個單體應(yīng)用進行解耦。那么,單體應(yīng)用如何解耦?

按照領(lǐng)域,對數(shù)據(jù)庫進行縱向切分,也就是分庫,如下圖所示:


架構(gòu)設(shè)計與拆分的哲學(xué)4.webp_副本.jpg


隨著用戶數(shù)量化的增加,單一數(shù)據(jù)庫表已經(jīng)不成了,需要分表。拆表的時候,以常用的列作為主鍵,例如UID,然后將表拆分,也就是數(shù)據(jù)庫水平拆分:


架構(gòu)設(shè)計與拆分的哲學(xué)5.webp_副本.jpg


當(dāng)然,我們可以使用NewSQL,屏蔽數(shù)據(jù)庫分庫分表的操作。

隨著業(yè)務(wù)訪量的繼續(xù)增加,需要拆分應(yīng)用。

首先根據(jù)業(yè)務(wù)領(lǐng)域?qū)?yīng)用進行垂直拆分,即把一個大的單體應(yīng)用,拆成三個小的單體應(yīng)用:


架構(gòu)設(shè)計與拆分的哲學(xué)6.webp_副本.jpg


接下來,按照功能對小的單體應(yīng)用按照功能進行水平拆分:


架構(gòu)設(shè)計與拆分的哲學(xué)7.webp_副本.jpg


拆分后的應(yīng)用變成了微服務(wù)架構(gòu)。這時網(wǎng)關(guān)包含兩部分內(nèi)容:網(wǎng)關(guān)業(yè)務(wù)邏輯、通信部分(限流、熔斷等)。而Service Mesh,相當(dāng)于對微服務(wù)進行進一步拆分,將業(yè)務(wù)邏輯層和通訊部分拆開。

(二)、SOA的架構(gòu)落地

1.多個單體服務(wù) 2、多個單體服務(wù)之前用ESB連接。


架構(gòu)設(shè)計與拆分的哲學(xué)8.webp_副本.jpg


1.SOA

SOA的缺點是:僅按照垂直方向拆分業(yè)務(wù),每個服務(wù)還是單體的。ESB實現(xiàn)服務(wù)間的異步調(diào)用。

那么,ESB與MQ有什么區(qū)別呢?


架構(gòu)設(shè)計與拆分的哲學(xué)9.webp_副本.jpg


2.在微服務(wù)架構(gòu)中,API網(wǎng)關(guān)都做什么事情?

(1).請求鑒權(quán)

(2).即通用參數(shù)檢查(只看參數(shù)填沒填)。

App到網(wǎng)關(guān)的通信協(xié)議是https、傳輸協(xié)議是Json。Json是放在Http body中的。傳輸數(shù)據(jù)包=定長header(占24個字節(jié)uid、cmd、sessionid、body length)+變長body(k1v1;k2v2)。
其中邊長body時候具體的語義,不需要API做檢查。定長header會被網(wǎng)關(guān)檢查,即通用參數(shù)檢查。

(3). 協(xié)議轉(zhuǎn)換:將文本協(xié)議Json轉(zhuǎn)化為二進制協(xié)議,如PG,Mgmpak,hashmap(string,object)等。擴展性更好。

(4).通信協(xié)議轉(zhuǎn)換:App到網(wǎng)關(guān)的http請求是一個短鏈接。網(wǎng)關(guān)將其轉(zhuǎn)化為TCP(如RPC)。

(5).路由轉(zhuǎn)發(fā)

(6).微服務(wù)治理(熔斷限流等)

3.數(shù)據(jù)訪問層的作用:

(1)、批量的CRUD接口

(2)、ORM

(3)、Sharding的工作(分布分表)。這步最難,如果用NewSQL就可以規(guī)避。

(4)、屏蔽底層DB差異性

(三)、微服務(wù)架構(gòu)的異步實現(xiàn)

此外,如果我們要提升微服務(wù)的性能,可以在API網(wǎng)關(guān)和業(yè)務(wù)邏輯層之間增加MQ。這樣,雖然網(wǎng)關(guān)到MQ是同步調(diào)用、MQ到業(yè)務(wù)邏輯層是同步調(diào)用,但網(wǎng)關(guān)到業(yè)務(wù)邏輯實現(xiàn)也異步調(diào)用。這樣雖然增加了業(yè)務(wù)請求的延時,但大幅提升了吞吐量(即把同步方式對數(shù)據(jù)庫的隨機寫,變成異步方式的對MQ的順序?qū)懀?br/>


架構(gòu)設(shè)計與拆分的哲學(xué)10.webp_副本.jpg


需要注意的是,并不是所有的請求場景都適合異步,具體可以參照下圖:

架構(gòu)設(shè)計與拆分的哲學(xué)11.webp_副本.jpg


我們將同步請求和異步請求用畫筆標識流量路徑


架構(gòu)設(shè)計與拆分的哲學(xué)12.webp_副本.jpg

提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: