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

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

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

2021-04-19 20:29:06 1386

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

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


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


接下來(lái),我們先看單體應(yīng)用。單體應(yīng)用遵循MVC結(jié)構(gòu)。典型的單體應(yīng)用組網(wǎng)拓?fù)淙缦滤荆?br/>


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


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


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


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

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


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


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


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


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

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

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


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


接下來(lái),按照功能對(duì)小的單體應(yīng)用按照功能進(jìn)行水平拆分:


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


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

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

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


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


1.SOA

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

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


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


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

(1).請(qǐng)求鑒權(quán)

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

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

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

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

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

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

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

(1)、批量的CRUD接口

(2)、ORM

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

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

(三)、微服務(wù)架構(gòu)的異步實(shí)現(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ù)邏輯實(shí)現(xiàn)也異步調(diào)用。這樣雖然增加了業(yè)務(wù)請(qǐng)求的延時(shí),但大幅提升了吞吐量(即把同步方式對(duì)數(shù)據(jù)庫(kù)的隨機(jī)寫(xiě),變成異步方式的對(duì)MQ的順序?qū)懀?br/>


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


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

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


我們將同步請(qǐng)求和異步請(qǐng)求用畫(huà)筆標(biāo)識(shí)流量路徑


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

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

這條文檔是否有幫助解決問(wèn)題?

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

在文檔使用中是否遇到以下問(wèn)題: