想象一下,您需要使用微服務構建電子商務應用程序的場景。您可以為客戶,訂單,產品,購物車等具有微服務。微服務將暴露前端使用API。
但是,通過微獵狼人返回到前端的數據可能不會根據前端需要表示它們的確切方式進行格式化或過濾。
在這種情況下,前端需要自己擁有一些邏輯來重新格式化這些數據。在前端具有此類邏輯將使用更多的瀏覽器資源。
在這樣的情況下,我們可以使用BFF來將一些這個前端邏輯轉移到中間層。中間層是BFF。當前端請求某些數據時,它將調用BFF中的API。
BFF將執行以下操作。
調用相關的微服務API並獲得所需的數據根據前端表示格式化數據將格式化的數據發送到前端
結果,前端將存在最小的邏輯。因此,BFF有助於簡化數據表示,並占用為前端提供富裕的接口的責任。
BFF的作用
正如我們已經探索的那樣,BFF充當前端和微服務之間的簡單界面。理想情況下,前端團隊也將負責管理BFF。
單個BFF專注於單個UI,僅限UI。因此,它將有助於我們通過其后端保持始終簡單地看到數據的統一視圖。
這帶來了下一個問題。我們可以為多個UI有多個BFF嗎?我們將在本文的后一段中回答此問題。繼續閱讀。
這會增加延遲嗎?
現在我們知道,BFF類似於客戶端和其他外部API,服務等之間的代理服務器。如果請求必須通過另一個組件,它肯定會增加延遲。但是,與瀏覽器的高資源使用相比,BFF延遲可以忽略不計,如果需要使用未針對前端優化的多個服務。
構建BFF允許您智能地對其他后端/微服務進行批量調用並一次返回數據,或者通過轉換和格式化數據來返回更方便地表示。
這對於2G或3G網絡上的移動客戶端非常有用,其中可能需要幾秒鍾(或更多)以建立連接。
何時為您的應用程序使用BFF
與許多其他模式一樣,使用應用程序中的BFF取決於您計划遵循的上下文和架構。例如,如果您的應用程序是一個簡單的單片應用程序,則不需要BFF。它不會增加沒有價值。
但是,如果您的應用程序取決於微服務並消耗許多外部API和其他服務,最好使用BFF來簡化數據流並向您的應用引入大量效率。
此外,如果您的應用程序需要為特定前端接口開發優化的后端,或者您的客戶端需要使用在后端中需要大量聚合的數據,BFF是合適的選項。
提示:分布式設計需要不同類型的代碼協作。使用位(github)在可以在Repos共享並獨立開發的各個組件上進行協作。
保持存儲庫可擴展,可維護,始終同步。
我們可以有多個bffs嗎?
我們當然可以!這是擁有BFF的全部點。
傳統方法(沒有BFF的應用程序)將僅為所有客戶端擁有一個API網關。它將如下所示。
> Source
但是,擁有BFF的目的是為您的客戶提供連接的聚焦界面。例如,移動UI的數據消耗可能與瀏覽器的數據消耗不同。在這種情況下,為了更好的數據表示,可以使用兩個BFF。
> Source
正如您所看到的,每個客戶端都在這里有一個bff。它將有助於優化服務的響應(SA,SB … SN)。
擁有BFF的優點
關注的分離 - 前端要求將與后端問題分開。這更容易維護。更容易維護和修改API - 客戶端應用程序將少了解您的APIS結構,這將使其更有彈性更具彈性。前端的更好的錯誤處理 - 服務器錯誤大部分時間都沒有毫無意義。而不是直接返回錯誤服務器發送,而BFF可以映射需要向用戶顯示的錯誤。這將改善用戶體驗。多個設備類型可以並行調用后端 - 雖然瀏覽器正在向瀏覽器BFF提出請求,移動設備可以執行相同的操作。它將有助於更快地獲得服務的回復。更好的安全性 - 可以隱藏某些敏感信息,並且在向前端發送響應時,可以省略對前端的不必要的數據。抽象將使攻擊者更難瞄准應用程序。共享團隊的組件所有權 - 應用程序的不同部分可以很容易地由不同的團隊處理。前端團隊可以享受客戶的所有權及其基礎資源消耗層;導致高開發速度。
在實踐中遵循的最佳實踐
到目前為止,我們看到的是驚人的!但是,BFFS是否有故障?
答案是不!像其他技術或模式一樣,甚至BFF都有陷阱。為了避免這些,我們必須遵循一些最佳實踐。下面說明的一些最佳實踐。
避免使用自包含的全包API實現BFF - 您的自包含API應在微服務層中。大多數開發人員忘記了這一點並開始在BFF中實現服務級API。您應該記住,BFF是客戶和服務之間的翻譯。從服務API返回數據時,它的目的是將其轉換為客戶端應用程序指定的數據類型。避免BFF邏輯復制 - 必須注意,一個BFF應該迎合特定的用戶體驗,而不是設備類型。例如,大多數時候,所有移動設備(iOS,Android等)共享相同的用戶體驗。在這種情況下,所有這些操作系統的一個BFF都足夠了。沒有必要為iOS和另一個用於Android的單獨BFF。避免過度依賴BFFS - BFF僅僅是一個翻譯層。是的,它也為應用程序提供了一定程度的安全性。但是,你不應該比你更依賴它。無論BFF是否存在,您的API層和前端層都應處理所有功能和安全方面。因為BFF應該填充間隙,而不是向應用程序添加任何功能或服務。總結
BFF模式不僅有助於開發,而且還有助於提高用戶體驗。因此,必須考慮數據優化和聚合,同時將BFF集中在其前端。
此外,如果您之前沒有使用BFF模式,則是時候開始了。讓我知道你的經歷和意見。