微服務(wù)架構(gòu)~BFF和網(wǎng)關(guān)是如何演化出來的

微服務(wù)架構(gòu)~BFF和網(wǎng)關(guān)是如何演化出來的

介紹

BFF(Backend for Frontend)和網(wǎng)關(guān)Gateway是微服務(wù)架構(gòu)中的兩個重要概念,這兩個概念相對比較新,有些開發(fā)人員甚至是架構(gòu)師都不甚理解。

本文用假想的公司案例+圖示的方式,解釋BFF和網(wǎng)關(guān)是什么,它們是怎么演化出來的。希望對架構(gòu)師設(shè)計(jì)和落地微服務(wù)架構(gòu)有所啟發(fā)。

服務(wù)化架構(gòu)V1

我們先把時間推回到大致2011年左右。假設(shè)有一家有一定業(yè)務(wù)體量的電商公司CoolShop,在這個時間點(diǎn)它已經(jīng)完成單塊應(yīng)用的解構(gòu)拆分,內(nèi)部SOA服務(wù)化已經(jīng)初步完成。這個時候它的無線應(yīng)用還沒有起步,前端用戶體驗(yàn)層主要是傳統(tǒng)的服務(wù)端Web應(yīng)用,總體服務(wù)化架構(gòu)V1如下圖所示。

image

服務(wù)化架構(gòu)V2

時間轉(zhuǎn)眼來到2012年初,國內(nèi)的無線應(yīng)用開始起風(fēng),CoolShop公司也緊跟市場趨勢,研發(fā)自己的無線原生App。為了能盡快上線,公司的架構(gòu)師提出如下V2架構(gòu),讓App直接調(diào)用內(nèi)部的服務(wù):

image

這個架構(gòu)有如下問題:

  1. 無線App和內(nèi)部微服務(wù)強(qiáng)耦合,任何一邊的變化都可能對另外一邊造成影響。

  2. 無線App需要知道內(nèi)部服務(wù)的地址等細(xì)節(jié)。

  3. 無線App端需要開發(fā)大量的聚合裁剪和適配邏輯:

  • 聚合:某一個功能需要同時調(diào)用幾個后端API進(jìn)行組合,比如首頁需要顯示分類和產(chǎn)品細(xì)節(jié),就要同時調(diào)用分類API和產(chǎn)品API,不能一次調(diào)用完成。

  • 裁剪:后端服務(wù)返回的Payload一般比較通用,App需要根據(jù)設(shè)備類型進(jìn)行裁剪,比如手機(jī)屏幕小,需要多裁掉一些不必要的內(nèi)容,Pad的屏幕比較大,可以少裁掉一些內(nèi)容。

  • 適配:一種常見的適配場景是格式轉(zhuǎn)換,比如有些后臺服務(wù)比較老,只支持老的SOAP/XML格式,不支持新的JSON格式,則無線App需要適配處理不同數(shù)據(jù)格式。

  1. 隨著設(shè)備類型的增多(iPhone/Android/iPad/WindowsPhone),聚合裁剪和適配邏輯的開發(fā)會造成設(shè)備端的大量重復(fù)勞動。

服務(wù)化架構(gòu)V2.1

V2架構(gòu)問題太多,沒有開發(fā)實(shí)施。為解決上述問題,架構(gòu)師經(jīng)過思考決定在外部設(shè)備和內(nèi)部微服務(wù)之間引入一個新的角色~Mobile BFF。

所謂BFF其實(shí)是Backend for Frontend的簡稱,中文翻譯是為前端而開發(fā)的后端,它主要由前端團(tuán)隊(duì)開發(fā)(后端微服務(wù)一般由后端團(tuán)隊(duì)開發(fā))。BFF可以認(rèn)為是一種適配服務(wù),將后端的微服務(wù)進(jìn)行適配(主要包括聚合裁剪和格式適配等邏輯),向無線端設(shè)備暴露友好和統(tǒng)一的API,方便無線設(shè)備接入訪問后端服務(wù)。

新的V2.1架構(gòu)如下圖所以:

image

這個架構(gòu)的優(yōu)勢是:

  1. 無線App和內(nèi)部微服務(wù)不耦合,通過引入BFF這層間接,使得兩邊可以獨(dú)立變化:
  • 后端如果發(fā)生變化,通過BFF屏蔽,前端設(shè)備可以做到不受影響。

  • 前端如果發(fā)生變化,通過BFF屏蔽,后端微服務(wù)可以暫不變化。

  • 當(dāng)無線App有新的需求時,通過BFF的屏蔽,可以減少前后端團(tuán)隊(duì)的溝通協(xié)調(diào)開銷,很多需求由前端團(tuán)隊(duì)在BFF上就可以自己搞定。

  1. 無線App只需要知道Mobile BFF的地址,并且服務(wù)接口是統(tǒng)一的,不需要知道內(nèi)部復(fù)雜微服務(wù)的地址和細(xì)節(jié)。

  2. 聚合裁剪和適配邏輯在Mobile BFF上實(shí)現(xiàn),無線App端可以大大簡化瘦身。

服務(wù)化架構(gòu)V3

V2.1架構(gòu)比較成功,實(shí)施落地以后支持了CoolShop公司早期無線業(yè)務(wù)的成長。隨著業(yè)務(wù)量進(jìn)一步增長,投入無線研發(fā)的團(tuán)隊(duì)也不斷增加,V2.1架構(gòu)也逐漸暴露出如下問題:

  1. 剛開始只有一個Mobile BFF,是個單塊,但是無線研發(fā)團(tuán)隊(duì)在不斷增加,分別對應(yīng)多條業(yè)務(wù)線。根據(jù)康威法則,單塊的無線BFF和多團(tuán)隊(duì)之間就出現(xiàn)不匹配問題,團(tuán)隊(duì)之間溝通協(xié)調(diào)成本高,交付效率低下。

  2. Mobile BFF里頭不僅有各個業(yè)務(wù)線的聚合/裁剪/適配和業(yè)務(wù)邏輯,還引入了很多跨橫切面邏輯,比如安全認(rèn)證,日志監(jiān)控,限流熔斷等。隨著時間的推移,代碼變得越來越復(fù)雜,技術(shù)債越堆越多,開發(fā)效率不斷下降,缺陷數(shù)量不斷增加。

  3. Mobile BFF集群是個失敗單點(diǎn)(Single Point of Failure),嚴(yán)重代碼缺陷或者流量洪峰可能引發(fā)集群宕機(jī),所有無線應(yīng)用都不可用。

為了解決上述問題,架構(gòu)師經(jīng)過思考決定在外部設(shè)備和內(nèi)部BFF之間再引入一個新的角色~API Gateway,新的架構(gòu)V3如下圖所示:

image

新的架構(gòu)V3有如下調(diào)整:

  1. BFF按團(tuán)隊(duì)或業(yè)務(wù)線進(jìn)行解耦拆分,拆分成若干個BFF微服務(wù),每個業(yè)務(wù)線可以并行開發(fā)和交付各自負(fù)責(zé)的BFF微服務(wù)。

  2. 網(wǎng)關(guān)(一般由獨(dú)立框架團(tuán)隊(duì)負(fù)責(zé)運(yùn)維)專注跨橫切面(Cross-Cutting Concerns)的功能,包括:

  • 路由,將來自無線設(shè)備的請求路由到后端的某個微服務(wù)BFF集群。

  • 認(rèn)證,對涉及敏感數(shù)據(jù)的API訪問進(jìn)行集中認(rèn)證鑒權(quán)。

  • 監(jiān)控,對API調(diào)用進(jìn)行性能監(jiān)控。

  • 限流熔斷,當(dāng)出現(xiàn)流量洪峰,或者后端BFF/微服務(wù)出現(xiàn)延遲或故障,網(wǎng)關(guān)能夠主動進(jìn)行限流熔斷,保護(hù)后端服務(wù),并保持前端用戶體驗(yàn)可以接受。

  • 安全防爬,收集訪問日志,通過后臺分析出惡意行為,并阻斷惡意請求。

  1. 網(wǎng)關(guān)在無線設(shè)備和BFF之間又引入了一層間接,讓兩邊可以獨(dú)立變化,特別是當(dāng)后臺BFF在升級或遷移時,可以做到用戶端應(yīng)用不受影響。

在新的V3架構(gòu)中,網(wǎng)關(guān)承擔(dān)了重要的角色,它是解耦拆分和后續(xù)升級遷移的利器。在網(wǎng)關(guān)的配合下,單塊BFF實(shí)現(xiàn)了解耦拆分,各業(yè)務(wù)線團(tuán)隊(duì)可以獨(dú)立開發(fā)和交付各自的微服務(wù),研發(fā)效率大大提升。另外,把跨橫切面邏輯從BFF剝離到網(wǎng)關(guān)上去以后,BFF的開發(fā)人員可以更加專注業(yè)務(wù)邏輯交付,實(shí)現(xiàn)了架構(gòu)上的關(guān)注分離(Separation of Concerns)。

服務(wù)化架構(gòu)V4

業(yè)務(wù)在不斷發(fā)展,技術(shù)架構(gòu)也需要不斷的調(diào)整來應(yīng)對需求的變化。近年,CoolShop公司技術(shù)團(tuán)隊(duì)又迎來了新的業(yè)務(wù)和技術(shù)需求,主要是:

  1. 開放內(nèi)部的業(yè)務(wù)能力,建設(shè)CoolShop Open API平臺。借助第三方社區(qū)開發(fā)者的力量,在CoolShop平臺上進(jìn)行創(chuàng)新,進(jìn)一步拓寬CoolShop的應(yīng)用和業(yè)務(wù)形態(tài)。

  2. 廢棄傳統(tǒng)的服務(wù)端Web應(yīng)用模式,引入前后分離架構(gòu),前端采用H5單頁等技術(shù)給用戶提供更好的體驗(yàn)。

為滿足業(yè)務(wù)需求,架構(gòu)師對服務(wù)化架構(gòu)又進(jìn)行了拓展升級,新的V4新架構(gòu)如下圖所示:

image

V4整體思路和V3類似,只是拓展了新的接入渠道:

  1. 引入面向第三方開放API的BFF層和配套的網(wǎng)關(guān),支持第三方開發(fā)者在CoolShop Open API平臺上開發(fā)應(yīng)用。

  2. 引入面向H5應(yīng)用的BFF層和配套的網(wǎng)關(guān),支持前后分離和H5單頁應(yīng)用模式。

V4是一個比較完整的現(xiàn)代微服務(wù)架構(gòu),從外到內(nèi)依次分為:端用戶體驗(yàn)層->網(wǎng)關(guān)層->BFF層->微服務(wù)層。整個架構(gòu)層次清晰,職責(zé)分明,是一種靈活的能夠支持業(yè)務(wù)不斷創(chuàng)新的演化式架構(gòu)。

Memo

本文轉(zhuǎn)載至:https://www.cnblogs.com/dadadechengzi/p/9373069.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容