前后端分離

方案一 簡易前后端分離

前后端分離原則,簡單來講就是前端和后端的代碼分離,也就是技術(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)目

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

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:岳沁 學(xué)號(hào):17101223458 轉(zhuǎn)載自:https://juejin.im/entry/5a33290e...
    丘之心閱讀 542評(píng)論 0 1
  • 本文系轉(zhuǎn)載,原作者,普元,敖顯奇 轉(zhuǎn)載本文需保留此處版權(quán)聲明:本文版權(quán)屬于EAII企業(yè)架構(gòu)創(chuàng)新研究院(微信號(hào):ea...
    普元云計(jì)算閱讀 5,183評(píng)論 8 96
  • 本文系轉(zhuǎn)載,原作者,普元,敖顯奇 轉(zhuǎn)載本文需保留此處版權(quán)聲明:本文版權(quán)屬于EAII企業(yè)架構(gòu)創(chuàng)新研究院(微信號(hào):ea...
    RThong閱讀 781評(píng)論 0 9
  • 前言 最近這一段時(shí)間由于Nodejs的逐漸成熟和日趨穩(wěn)定,越來越多的公司中的前端團(tuán)隊(duì)開始嘗試使用Nodejs來練一...
    a3b267eac00f閱讀 3,427評(píng)論 3 26
  • 前后端分離已成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)的業(yè)界標(biāo)準(zhǔn)使用方式,通過nginx+tomcat的方式(也可以中間加一個(gè)nodejs...
    PHP學(xué)習(xí)君閱讀 1,019評(píng)論 0 0

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