国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

BFF網(wǎng)關(guān)模式開發(fā)指南

這篇具有很好參考價(jià)值的文章主要介紹了BFF網(wǎng)關(guān)模式開發(fā)指南。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

BFF是近些年新衍生出來的一種開發(fā)模式,或者說是一種適配模式的系統(tǒng),BFF全稱為Backend OF Front意為后端的前端,為了適配微服務(wù)模式下前端后端系統(tǒng)接口調(diào)用混亂而出現(xiàn)的。在如今微服務(wù)盛行的趨勢下,大型系統(tǒng)中劃分出了數(shù)十個(gè)服務(wù)模塊,例如商品,門店,運(yùn)費(fèi),紅包,訂單,優(yōu)惠券,CMS,用戶,搜索,推薦,廣告等等系統(tǒng),前端也有小程序,APP,網(wǎng)頁等端。由此產(chǎn)生了很多問題:

痛點(diǎn)

  1. 前端問題:每次需求開發(fā)前端要對接多個(gè)系統(tǒng)來確認(rèn)接口信息,不同的數(shù)據(jù)要找不同的系統(tǒng),各個(gè)接口散落一地,開發(fā)調(diào)試的效率極低。
  2. 后端問題:后端同樣也需要各自包裝數(shù)據(jù)信息來提供前端處理,重心變成如何為前端提供數(shù)據(jù),因?yàn)樾枰鶕?jù)不同的版本、客戶端、用戶、定位等特征來判別,很多時(shí)間浪費(fèi)在展示層,而不能專注于業(yè)務(wù)邏輯處理,每個(gè)后端系統(tǒng)各自為戰(zhàn),都有自己的接口規(guī)則,各種歷史版本問題都不能完全統(tǒng)一,所有系統(tǒng)都嚴(yán)重耦合了版本問題。
  3. 變更不靈活:當(dāng)產(chǎn)品想要更新需求時(shí),更是牽一發(fā)而動(dòng)全身,某一塊的小改動(dòng)需要在各個(gè)系統(tǒng)之間找接口來回溝通,大部分系統(tǒng)都要重新上線一次。

如下面,前后端的溝通鏈路過多。

BFF網(wǎng)關(guān)模式開發(fā)指南,java,網(wǎng)關(guān)

BFF網(wǎng)關(guān)定位

鑒于此痛點(diǎn),需要一個(gè)中間層來適配前后端服務(wù),BBF由此而生,它負(fù)責(zé)將所有下游后端接口進(jìn)行統(tǒng)一調(diào)用,下游接口只需要提供RPC接口供網(wǎng)關(guān)使用,BFF網(wǎng)關(guān)提供WEB接口來讓前端調(diào)用,最后將數(shù)據(jù)進(jìn)行組裝拼接,根據(jù)前端的需求來返回?cái)?shù)據(jù)。

所以BFF的核心定位就是:“統(tǒng)一下游接口,為前端提供服務(wù)”。

只有把握好服務(wù)這個(gè)概念,才能做好BFF網(wǎng)關(guān)系統(tǒng),其他系統(tǒng)可以扯皮甩鍋,但BFF網(wǎng)關(guān)不可以,它與生俱來的使命就是把這兩邊拉扯起來,所有不合理不合適,繁瑣無用的邏輯都需要BFF網(wǎng)關(guān)去處理,后端只要做好業(yè)務(wù)邏輯,前端做好展示,其他的都可以交給BFF網(wǎng)關(guān)。

BFF網(wǎng)關(guān)模式開發(fā)指南,java,網(wǎng)關(guān)

BFF網(wǎng)關(guān)特點(diǎn)

瑣碎

BFF網(wǎng)關(guān)主要為前端進(jìn)行服務(wù),前端不關(guān)心版本、客戶端、定位、用戶身份等情況,只接收渲染數(shù)據(jù)即可,而這些邏輯都需要耦合到BFF網(wǎng)關(guān)中,以版本、客戶端、定位、用戶等特征作為緯度,其中版本最為最復(fù)雜的分支,可能貫徹整個(gè)系統(tǒng)生涯幾十個(gè)版本類型都需要做兼容,由此還需要兼顧不同客戶端的展示要求和用戶特征,所以BFF網(wǎng)關(guān)中必然需要做大量判斷分支,根據(jù)上百種情況組合判斷來生成-唯一版本-唯一端-唯一用戶的數(shù)據(jù)結(jié)構(gòu)。

數(shù)據(jù)瑣碎

BFF不需要數(shù)據(jù)庫,這點(diǎn)會(huì)在下面說明,所以有很多數(shù)據(jù)需要以靜態(tài)變量的形式存放在代碼里,或者是使用配置中心來動(dòng)態(tài)配置,例如圖片地址、各種色值、模塊固定文字、處理標(biāo)識(shí)等,這些瑣碎的數(shù)據(jù)都會(huì)存放在BFF網(wǎng)關(guān)中進(jìn)行維護(hù),如果放在前端,修改時(shí)必須要進(jìn)行發(fā)版,時(shí)間周期太長,而存放在后端的話,又會(huì)打散數(shù)據(jù),不能從一個(gè)地方作為主要數(shù)據(jù)窗口進(jìn)行管理。

邏輯瑣碎

衍生第一點(diǎn)說到的,BFF網(wǎng)關(guān)作為下游接口的聚合,每次流程需要調(diào)用數(shù)十個(gè)后端接口,再根據(jù)版本、端、用戶進(jìn)行邏輯處理,歷史邏輯與新需求雜糅在一起,實(shí)現(xiàn)新功能的同時(shí)要不斷兼顧歷史邏輯,只能是加入大量的分支判斷,最后變成了if大爆炸,或者使用策略模式進(jìn)行優(yōu)化,但無論如何怎么包裝都無法掩蓋瑣碎的邏輯。

性能

BFF網(wǎng)關(guān)的耗時(shí)主要有兩部分

  1. 內(nèi)部處理耗時(shí)
  2. 下游RPC接口耗時(shí)

BFF作為最直接和前端交互的接口,BFF的耗時(shí)將直接影響用戶瀏覽體驗(yàn),所以BFF性能一定要最優(yōu),不斷壓縮耗時(shí)來提高接口響應(yīng)性能,內(nèi)部邏輯優(yōu)化時(shí),首先觀察下游接口耗時(shí)情況,各個(gè)模塊之間難免重復(fù)調(diào)用接口,可以使用編排框架將下游接口調(diào)用進(jìn)行優(yōu)化。然后使用線程池進(jìn)行并發(fā)處理,能夠并發(fā)處理的一定要并發(fā)執(zhí)行,這樣可以極大降低下游接口耗時(shí),提供接口處理能力。

緩存

切勿在BFF網(wǎng)關(guān)中使用緩存

此處指的緩存主要是Redis等中間件緩存,BFF網(wǎng)關(guān)主要數(shù)據(jù)來源都是通過調(diào)用下游接口獲取,這里是最耗時(shí)的,如果想要減少下游接口耗時(shí),應(yīng)該使用并發(fā)或者編排能力,而不可以通過緩存下游接口數(shù)據(jù)來實(shí)現(xiàn)。

  1. 成本問題:下游接口數(shù)據(jù)會(huì)根據(jù)傳入的定位、用戶等信息查詢,當(dāng)系統(tǒng)用戶量大、覆蓋城市多時(shí),需要緩存的數(shù)據(jù)量將劇增,而數(shù)據(jù)緩存后再次訪問概率很低,造成嚴(yán)重的緩存空間浪費(fèi)。
  2. 一致性問題:BFF網(wǎng)關(guān)的引入主要是為了統(tǒng)一后端接口,性能是網(wǎng)關(guān)的一大指標(biāo),但不能為了性能將所有下游接口數(shù)據(jù)進(jìn)行緩存,從而犧牲數(shù)據(jù)一致性,后續(xù)展示時(shí)一旦出現(xiàn)問題,將增加排查難度。

降級

BFF網(wǎng)關(guān)模式開發(fā)指南,java,網(wǎng)關(guān)

任何時(shí)候都不要將錯(cuò)誤直接返回給用戶,不論是下游的錯(cuò)誤還是系統(tǒng)內(nèi)部的錯(cuò)誤,這一點(diǎn)完全可以交給BFF網(wǎng)關(guān)來做,這里降級可以分為兩類型處理。

  1. 下游接口降級:當(dāng)下游接口出現(xiàn)超時(shí)或數(shù)據(jù)異常時(shí),一定要做好降級措施,例如增加接口超時(shí)時(shí)間判斷,及時(shí)中斷調(diào)用,不要因?yàn)槟硞€(gè)下游接口而影響整體性能,當(dāng)下游接口報(bào)錯(cuò)時(shí),也要做好異常捕獲,整體頁面可以直接丟棄這部分?jǐn)?shù)據(jù)不做展示,而不能完全不展示。
  2. 異常整體降級:在BFF網(wǎng)關(guān)內(nèi)部處理邏輯中難免會(huì)有錯(cuò)誤發(fā)生,或者下游核心的定位、商品等接口異常,這里就需要做整體降級,例如模擬一個(gè)友情提示頁面等,提示用戶稍等重新刷新,或者在未開通城市里可以引導(dǎo)用戶切換地址,整體頁面的降級盡量交給BFF網(wǎng)關(guān)來做,而不要分散到不同的前端來做。

BFF網(wǎng)關(guān)劃分

BFF網(wǎng)關(guān)模式開發(fā)指南,java,網(wǎng)關(guān)

接口粒度

如上圖,BFF網(wǎng)關(guān)的下游接口較多,如何聚合下游接口進(jìn)行劃分是一個(gè)需要考慮的問題,這里提供的建議是按照頁面來劃分,例如在首頁可以提供首頁接口返回整體展示效果,購物車頁面提供購物車接口,以頁面為單位劃分可以方便前后端的統(tǒng)一處理,當(dāng)然如果頁面內(nèi)容太多時(shí),BFF網(wǎng)關(guān)接口可能耗時(shí)較多,可以同頁面拆分開來,讓前端并行加載接口,這樣既能降低整體頁面加載時(shí)間,也能讓BFF網(wǎng)關(guān)減少下游接口調(diào)用。

數(shù)據(jù)安全

BFF網(wǎng)關(guān)雖然也叫網(wǎng)關(guān),但數(shù)據(jù)安全方面例如安全攻防等主要還是外層去做,BFF只負(fù)責(zé)數(shù)據(jù)的調(diào)用組裝,不要再賦予其他太多功能,但BFF網(wǎng)關(guān)一定要有限流邏輯,可以采用Sentinel等框架實(shí)現(xiàn),防止某個(gè)前端異常進(jìn)行大量請求,打垮BFF網(wǎng)關(guān)導(dǎo)致所有前端異常。

上線注意

BFF網(wǎng)關(guān)較為單薄,沒有依賴的數(shù)據(jù)庫等大型中間件,可能只是用到比較輕量的配置中心和消息隊(duì)列,所以上線時(shí)初始化參數(shù)較少,但因?yàn)锽FF網(wǎng)關(guān)需要做版本、定位、客戶端等特征的數(shù)據(jù)處理,所以一定要做好灰度上線,防止新功能影響到歷史版本、不同定位下的用戶瀏覽。

優(yōu)勢總結(jié)

BFF網(wǎng)關(guān)的引入:文章來源地址http://www.zghlxwxcb.cn/news/detail-543028.html

  1. 降低后端開發(fā)聯(lián)調(diào)成本:直接提供RPC接口將基礎(chǔ)數(shù)據(jù)返回即可
  2. 降低前端開發(fā)聯(lián)調(diào)成本:直接對接一兩個(gè)接口就可以拿到全部數(shù)據(jù),并且可以將很多前端寫死的邏輯交給BFF網(wǎng)關(guān)做下發(fā),提高前端展示的靈活性。
  3. 方便需求迭代升級:當(dāng)大量前端邏輯移植到BFF網(wǎng)關(guān),很多需求的上線不再依賴前后端發(fā)版,直接讓BFF快速上線更新即可。
  4. 提高用戶體驗(yàn):BFF網(wǎng)關(guān)可以較低成本的做異常降級處理,為前后端包裝錯(cuò)誤提示,統(tǒng)一異常捕獲類型。
  5. 提高系統(tǒng)性能:雖然引入BFF網(wǎng)關(guān)相當(dāng)于多加了一層,但BFF網(wǎng)關(guān)可以通過并發(fā)調(diào)用下游接口,或者線程池的形式提高接口處理性能,而不需要像之前前端去逐個(gè)調(diào)用接口,規(guī)范了整體接口調(diào)用執(zhí)行邏輯。

到了這里,關(guān)于BFF網(wǎng)關(guān)模式開發(fā)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java技術(shù)專題】「Guava開發(fā)指南」手把手教你如何進(jìn)行使用Guava工具箱進(jìn)行開發(fā)系統(tǒng)實(shí)戰(zhàn)指南(基礎(chǔ)編程篇)

    Preconditions(前置條件):讓方法調(diào)用的前置條件判斷更簡單 。 Guava在Preconditions 類中提供了若干前置條件判斷的實(shí)用方法,我們強(qiáng)烈建議在 Eclipse 中靜態(tài)導(dǎo)入這些方法。每個(gè)方法都有三個(gè)變種: 當(dāng)方法沒有額外參數(shù)時(shí),拋出的異常中不包含錯(cuò)誤消息,這會(huì)使得調(diào)用方很難確

    2024年02月07日
    瀏覽(95)
  • 「Java開發(fā)指南」如何利用MyEclipse啟用Spring DSL?(一)

    「Java開發(fā)指南」如何利用MyEclipse啟用Spring DSL?(一)

    本教程將引導(dǎo)您通過啟用Spring DSL和使用Service Spring DSL抽象來引導(dǎo)Spring和Spring代碼生成項(xiàng)目,本教程中學(xué)習(xí)的技能也可以很容易地應(yīng)用于其他抽象。在本教程中,您將學(xué)習(xí)如何: 為Spring DSL初始化一個(gè)項(xiàng)目 創(chuàng)建一個(gè)模型包 創(chuàng)建一個(gè)服務(wù)和操作 實(shí)現(xiàn)一個(gè)服務(wù)方法 啟用JAX-WS和DW

    2024年04月13日
    瀏覽(17)
  • ????Java開發(fā)者的Python快速進(jìn)修指南:文件操作

    Python提供的文件操作相對于Java來說,確實(shí)簡單方便許多。不僅操作簡單,代碼可讀性也相對較高。然而,我們需要注意的不僅僅是文件操作的簡單性,還有文件操作的各種模式。在Java中,我們并不經(jīng)常使用像Python中那樣的操作模式。 另外,我們還需要注意文件指針的移動(dòng)。

    2024年02月05日
    瀏覽(103)
  • Java開發(fā)者的Python快速進(jìn)修指南:異常捕獲

    在之前的學(xué)習(xí)中,我們已經(jīng)講解了函數(shù)和控制流等基本概念。然而,在接觸實(shí)際業(yè)務(wù)時(shí),你會(huì)發(fā)現(xiàn)異常捕獲也是必不可少的一部分,因?yàn)樵贘ava編程中,異常處理是不可或缺的。Python的異常捕獲與Java的異常捕獲原理是相同的,只是在寫法上有一些區(qū)別。它們的目的都是為了處

    2024年02月05日
    瀏覽(24)
  • ????Java開發(fā)者的Python快速進(jìn)修指南:函數(shù)進(jìn)階

    在上一篇文章中,我們講解了函數(shù)最基礎(chǔ)常見的用法,今天我想在這里簡單地談一下函數(shù)的其他用法。盡管這些用法可能不是非常常見,但我認(rèn)為它們?nèi)匀恢档媒榻B。因此,我將單獨(dú)為它們開設(shè)一個(gè)章節(jié),并探討匿名函數(shù)和裝飾器函數(shù)這兩種特殊的用法。 在Python中,匿名函數(shù)

    2024年02月05日
    瀏覽(30)
  • ????Java開發(fā)者的Python快速進(jìn)修指南:函數(shù)基礎(chǔ)

    話不多說,今天我們要介紹的是函數(shù)。本系列文章追求短而精,今天我們將重點(diǎn)討論函數(shù)以及與Java方法的區(qū)別。與Java方法不同,函數(shù)不需要像Java方法一樣講究修飾符等其他特性,它只需要使用\\\"def\\\"進(jìn)行聲明。另外,函數(shù)的參數(shù)也與Java方法有所不同,Java方法中不存在默

    2024年02月05日
    瀏覽(20)
  • ????Java開發(fā)者的Python快速進(jìn)修指南:面向?qū)ο蠡A(chǔ)

    當(dāng)我深入學(xué)習(xí)了面向?qū)ο缶幊讨?,我首先感受到的是代碼編寫的自由度大幅提升。不同于Java中嚴(yán)格的結(jié)構(gòu)和約束,Python在面向?qū)ο蟮膶?shí)現(xiàn)中展現(xiàn)出更加靈活和自由的特性。它使用了一些獨(dú)特的,如self和cls,這些不僅增強(qiáng)了代碼的可讀性,還提供了對類和實(shí)例的明確

    2024年02月05日
    瀏覽(34)
  • 熱門Java開發(fā)工具IDEA入門指南——插件安裝方式

    熱門Java開發(fā)工具IDEA入門指南——插件安裝方式

    IntelliJ IDEA,是java編程語言開發(fā)的集成環(huán)境。IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具,尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能是非常強(qiáng)大的。 本文給大家講解在使用IntelliJ I

    2024年02月09日
    瀏覽(90)
  • Java開發(fā)者必備:支付寶沙箱環(huán)境支付遠(yuǎn)程調(diào)試指南

    Java開發(fā)者必備:支付寶沙箱環(huán)境支付遠(yuǎn)程調(diào)試指南

    ?? 博客主頁 : 小羊失眠啦. ?? 系列專欄 : C語言 、 Linux 、 Cpolar ?? 感謝大家點(diǎn)贊??收藏?評論?? 前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。 在沙箱環(huán)境調(diào)試支付SDK的時(shí)候,往往沙箱環(huán)境部署在本地

    2024年02月08日
    瀏覽(25)
  • ????Java開發(fā)者的Python快速進(jìn)修指南:面向?qū)ο筮M(jìn)階

    在上一期中,我們對Python中的對象聲明進(jìn)行了初步介紹。這一期,我們將深入探討對象繼承、組合以及多態(tài)這三個(gè)核心概念。不過,這里不打算贅述太多理論,因?yàn)槲覀兌贾?,Python與Java在這些方面的主要區(qū)別主要體現(xiàn)在語法上。例如,Python支持多重繼承,這意味著一個(gè)類可

    2024年02月05日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包