BFF是(Backends For Frontends)單詞的縮寫,主要是用於服務前端的後臺應用程序,來解決多訪問終端業務耦合問題。前端
最近在公司的微服務架構中遇到了一些多終端訪問接口的問題,不一樣的終端擁有不一樣的接口服務,有不一樣的操做數據的能力,針對這種業務場景作出了調研,咱們是否能夠在不一樣的訪問層進行業務邏輯處理,獲取不一樣的數據內容呢?android
早在微服務出現的初期就已經存在相似的業務需求出現,並且衍生出了一套成熟的解決方案,那就是BFF
,能夠針對不用業務場景來提供對應的服務接口,每一種業務場景之間徹底獨立。ios
在傳統的應用程序中,咱們通常只將接口提供給一種類型的終端使用。
傳統的應用程序內提供的接口是有業務針對性的,這種類型的接口若是獨立出來再提供給別的系統再次使用是一件比較麻煩的事情,設計初期的高耦合
就決定了這一點。web
若是咱們的接口同時提供給web
、移動端
使用,移動端
僅用來採集數據以及數據的展現,而web
端大多數場景是用來管理數據,由於不一樣端點的業務有所不一樣每個端的接口複用度不會過高。segmentfault
針對多端共用服務接口的場景,咱們將基礎的數據服務
與BFF
進行了分離,數據服務
僅提供數據的增刪改查
,並不過多涉及業務的判斷處理,全部業務判斷處理都交給BFF
來把控,遇到的一些業務邏輯異常
也一樣由BFF
格式化處理後展現給訪問端點。架構
這種設計方式一樣存在必定的問題,雖然基礎服務
與BFF
進行了分離,咱們只須要在BFF
層面進行業務判斷處理,可是多個端共用一個BFF
,也會致使代碼編寫複雜度增高
、代碼可閱讀性下降
、多端業務耦合
。app
若是咱們爲每個端點都提供一個BFF
,每一個端點的BFF
處理自身的業務邏輯,須要數據時從基礎服務
內獲取,而後在接口返回以前進行組裝數據用於實例化返回對象。分佈式
這樣基礎服務若是有新功能添加,BFF
幾乎不會受到影響,而咱們若是後期把App
端點進行拆分紅Android
、IOS
時咱們只須要將app-bff
進行拆分爲android-bff
、ios-bff
,基礎服務一樣也不會受到影響微服務
這樣每當新增一個訪問端點時,咱們須要修改的地方也只有網關的轉發
以及添加一個BFF
便可,基礎服務
內提供的服務接口咱們徹底能夠複用,由於基礎服務
提供的接口都是沒有業務針對性的!!!spa
在微服務架構設計中,BFF
起到了一個業務聚合的關鍵做用,能夠 經過openfeign
、restTemplate
調用基礎服務
來獲取數據,將獲取到的數據進行組裝返回結果對象,BFF
解決了業務場景問題,也一樣帶來了一些問題,以下所示: