- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
(一)、架構(gòu)拆分方式
我們談架構(gòu),架構(gòu)分為:服務(wù)和數(shù)據(jù)兩部分(DB、Cache、ES等等)。架構(gòu)設(shè)計要適度,要能否滿足企業(yè)未來6-24個月的業(yè)務(wù)需求增長,避免過度設(shè)計。
接下來,我們先看單體應(yīng)用。單體應(yīng)用遵循MVC結(jié)構(gòu)。典型的單體應(yīng)用組網(wǎng)拓撲如下所示:
在單體應(yīng)用中,有三個模塊,每個模塊都有各自的MVC層。同樣,在數(shù)據(jù)庫中,針對三個模塊,也會有三個表。如果單體應(yīng)用能做到無狀態(tài)化,也能做到橫向擴展。
但是上面的應(yīng)用將是一個“巨無霸”,我們無法對其中一個功能組件單獨升級。而且,如果想給單體應(yīng)用增加新的功能模塊,需要重新開發(fā),整體替換。因為,要對這個單體應(yīng)用進行解耦。那么,單體應(yīng)用如何解耦?
按照領(lǐng)域,對數(shù)據(jù)庫進行縱向切分,也就是分庫,如下圖所示:
隨著用戶數(shù)量化的增加,單一數(shù)據(jù)庫表已經(jīng)不成了,需要分表。拆表的時候,以常用的列作為主鍵,例如UID,然后將表拆分,也就是數(shù)據(jù)庫水平拆分:
當(dāng)然,我們可以使用NewSQL,屏蔽數(shù)據(jù)庫分庫分表的操作。
隨著業(yè)務(wù)訪量的繼續(xù)增加,需要拆分應(yīng)用。
首先根據(jù)業(yè)務(wù)領(lǐng)域?qū)?yīng)用進行垂直拆分,即把一個大的單體應(yīng)用,拆成三個小的單體應(yīng)用:
接下來,按照功能對小的單體應(yīng)用按照功能進行水平拆分:
拆分后的應(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連接。
1.SOA
SOA的缺點是:僅按照垂直方向拆分業(yè)務(wù),每個服務(wù)還是單體的。ESB實現(xiàn)服務(wù)間的異步調(diào)用。
那么,ESB與MQ有什么區(qū)別呢?
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/>
需要注意的是,并不是所有的請求場景都適合異步,具體可以參照下圖:
我們將同步請求和異步請求用畫筆標識流量路徑
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP