方案一 簡易前后端分離

前后端分離原則,簡單來講就是前端和后端的代碼分離,也就是技術(shù)上做分離,我們推薦的模式是最好直接采用物理分離的方式部署,進(jìn)一步進(jìn)行更徹底的分離。不要繼續(xù)以前的服務(wù)端模板技術(shù),比如JSP ,把Java JS HTML CSS 都堆到一個(gè)頁面里,稍復(fù)雜的頁面就無法維護(hù)。這種分離模式的方式有幾個(gè)好處:
前后端技術(shù)分離,可以由各自的專家來對(duì)各自的領(lǐng)域進(jìn)行優(yōu)化,這樣前端的用戶體驗(yàn)優(yōu)化效果會(huì)更好。
分離模式下,前后端交互界面更加清晰,就剩下了接口和模型,后端的接口簡潔明了,更容易維護(hù)。
前端多渠道集成場景更容易實(shí)現(xiàn),后端服務(wù)無需變更,采用統(tǒng)一的數(shù)據(jù)和模型,可以支撐前端的web UI和移動(dòng)App等訪問。
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):系統(tǒng)結(jié)構(gòu)簡單,部署方便,開發(fā)速度快。
缺點(diǎn):沒有解決大中型項(xiàng)目的代碼解耦,沒有解決系統(tǒng)安全穩(wěn)定。
方案二 引入BFF層
把方案一的靜態(tài)服務(wù)變成了應(yīng)用服務(wù)器,把交互邏輯設(shè)計(jì)和業(yè)務(wù)邏輯設(shè)計(jì)分開、、。
無線App和內(nèi)部微服務(wù)不耦合,通過引入BFF這層間接,使得兩邊可以獨(dú)立變化:
后端如果發(fā)生變化,通過BFF屏蔽,前端設(shè)備可以做到不受影響。
前端如果發(fā)生變化,通過BFF屏蔽,后端微服務(wù)可以暫不變化。
當(dāng)無線App有新的需求時(shí),通過BFF的屏蔽,可以減少前后端團(tuán)隊(duì)的溝通協(xié)調(diào)開銷,很多需求由前端團(tuán)隊(duì)在BFF上就可以自己搞定。
無線App只需要知道Mobile BFF的地址,并且服務(wù)接口是統(tǒng)一的,不需要知道內(nèi)部復(fù)雜微服務(wù)的地址和細(xì)節(jié)。
聚合裁剪和適配邏輯在Mobile BFF上實(shí)現(xiàn),無線App端可以大大簡化瘦身(比較懶,用了別人的圖)
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):結(jié)構(gòu)清晰,系統(tǒng)易于維護(hù),擴(kuò)展方便。
缺點(diǎn):開發(fā)量大,沒有解決系統(tǒng)安全穩(wěn)定。
方案三 引入BFF,網(wǎng)關(guān)
進(jìn)一步解耦將路由,認(rèn)證,監(jiān)控,限流熔斷,安全防爬等公共邏輯和業(yè)務(wù)邏輯交互邏輯分開,獨(dú)立成網(wǎng)關(guān)層。
BFF按團(tuán)隊(duì)或業(yè)務(wù)線進(jìn)行解耦拆分,拆分成若干個(gè)BFF微服務(wù),每個(gè)業(yè)務(wù)線可以并行開發(fā)和交付各自負(fù)責(zé)的BFF微服務(wù)。
網(wǎng)關(guān)(一般由獨(dú)立框架團(tuán)隊(duì)負(fù)責(zé)運(yùn)維)專注跨橫切面(Cross-Cutting Concerns)的功能,包括:
路由,將來自無線設(shè)備的請(qǐng)求路由到后端的某個(gè)微服務(wù)BFF集群。
認(rèn)證,對(duì)涉及敏感數(shù)據(jù)的API訪問進(jìn)行集中認(rèn)證鑒權(quán)。
監(jiān)控,對(duì)API調(diào)用進(jìn)行性能監(jiān)控。
限流熔斷,當(dāng)出現(xiàn)流量洪峰,或者后端BFF/微服務(wù)出現(xiàn)延遲或故障,網(wǎng)關(guān)能夠主動(dòng)進(jìn)行限流熔斷,保護(hù)后端服務(wù),并保持前端用戶體驗(yàn)可以接受。
安全防爬,收集訪問日志,通過后臺(tái)分析出惡意行為,并阻斷惡意請(qǐng)求。
網(wǎng)關(guān)在無線設(shè)備和BFF之間又引入了一層間接,讓兩邊可以獨(dú)立變化,特別是當(dāng)后臺(tái)BFF在升級(jí)或遷移時(shí),可以做到用戶端應(yīng)用不受影響。
網(wǎng)關(guān)承擔(dān)了重要的角色,它是解耦拆分和后續(xù)升級(jí)遷移的利器。在網(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)。(比較懶,用了別人的圖)
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):結(jié)構(gòu)清晰,系統(tǒng)易于維護(hù),擴(kuò)展方便,較方案二前期開發(fā)量大,后期開發(fā)量減少。
缺點(diǎn):系統(tǒng)復(fù)雜,運(yùn)營成本高,不適合快速創(chuàng)新項(xiàng)目