微服務架構技巧篇——接口類設計技巧

目錄

    • 一、微服務架構的特點
    • 二、微服務接口類設計技巧
      • 2.1、BFF(Backend For Frontend)
        • 2.1.1、 服務分布式帶來的第一個挑戰導致的幾個典型問題
        • 2.1.2、什么是 BFF
        • 2.1.3、BFF 應用場景
        • 2.1.4、BFF 落地經驗
          • 2.1.4.1、前端負責 BFF 開發優缺點
          • 2.1.4.2、后端負責 BFF 開發優缺點
        • 2.1.5、什么時候用 BFF 來提供接口,什么時候直接訪問微服務
      • 2.2、GraphQL
        • 2.2.1、GraphQL 的概述
        • 2.2.2、GraphQL 的基本原理
      • 2.3、接口循環調用

本文來源:極客時間vip課程筆記

一、微服務架構的特點

  • 服務分布式

    原本由單體或者 SOA 系統提供的功能,現在由多個微服務來提供,不同微服務提供不同的功能。

  • 數據分布式

    原本由大一統的存儲系統(主要是關系數據庫 RDBMS)存儲的數據,現在分散存儲在多個獨立的存儲系統上,不同微服務可以根據數據特性,采用不同的存儲系統。

二、微服務接口類設計技巧

2.1、BFF(Backend For Frontend)

2.1.1、 服務分布式帶來的第一個挑戰導致的幾個典型問題
  • 服務分布式帶來的第一個挑戰,就是前端(廣義上的前端,含 App/H5/ 桌面客戶端等,下同)原來可能只需要一個接口請求就能完成的功能,現在需要多次請求多個微服務不同的接口,尤其是一些復雜的頁面,需要請求的后端接口會更多。這就導致了幾個典型問題的出現。

  • 第一個是請求性能問題。

    這里的性能問題其實不是單個微服務接口處理的性能,而是前端和服務端來回請求的網絡消耗。當一個頁面需要請求多個接口獲取后端數據的時候,即便能夠并行發送多個請求,由于網絡尤其是移動端網絡的不穩定性,如果其中一個或幾個請求訪問慢的話,整個頁面就可能會加載緩慢,從而影響用戶體驗。

  • 第二個是網絡帶寬問題。

    雖然單個微服務接口請求的數據可能不大,但是由于網絡傳輸協議本身也需要占用不少字節空間(例如 HTTP 請求 header),大量的小請求會導致機房入口帶寬大大增加,從而增加企業網絡帶寬成本。

  • 第三個是前端開發成本問題。

    前端需要理解和對接多個后端微服務,開發工作量、聯調工作量都會增加不少。尤其是后端微服務經過演變,提供了多個版本接口時,多版本接口的選擇和適配會給前端開發人員帶來較大的理解和開發負擔。

2.1.2、什么是 BFF
  • BFF 技術就是應對上述挑戰的接口技術方案,全稱是 Backend For Frontend,中文一般翻譯為“前端專屬后端”或“服務前端的后端”。
    在這里插入圖片描述

  • 結合上圖,接口訪問基本邏輯如下。

    當用戶訪問一個普通不復

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++游戲開發(2)

直接上代碼 1.首先是頭文件編寫 #include <iostream> #include <graphics.h> #include <string> 2,添加畫布 長1280&#xff0c;寬720 initgraph(1280, 720); 3.添加主循環 bool running true; while(runing) { } 4.定義結構體變量msg ExMessge msg; 5.開…

Unity開發2D類銀河惡魔城游戲學習筆記目錄

Unity開發2D類銀河惡魔城游戲學習筆記 Unity教程&#xff08;零&#xff09;Unity和VS的使用相關內容 玩家狀態機 Unity教程&#xff08;一&#xff09;開始學習狀態機 Unity教程&#xff08;二&#xff09;角色移動的實現 Unity教程&#xff08;三&#xff09;角色跳躍的實現…

智慧社區項目開發(三)——基于 Spring Boot 實現動態路由加載:從數據庫到前端菜單的完整方案

在后臺管理系統中&#xff0c;不同用戶角色往往擁有不同的操作權限&#xff0c;對應的菜單展示也需動態調整。動態路由加載正是解決這一問題的核心方案 —— 根據登錄用戶的權限&#xff0c;從數據庫查詢其可訪問的菜單&#xff0c;封裝成前端所需的路由結構并返回。本文將詳細…

Python在自動化與運維領域的核心角色:工具化、平臺化與智能化

&#x1f4dd;個人主頁&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 引言 在 IT 系統日益復雜、運維任務持續增長的今天&#xff0c;自動化已成為企業基礎設施管理的關鍵方向。Python 以其簡潔的語法、強大…

RAG實戰指南 Day 28:RAG系統緩存與性能優化

【RAG實戰指南 Day 28】RAG系統緩存與性能優化 開篇 歡迎來到"RAG實戰指南"系列的第28天&#xff01;今天我們將深入探討RAG系統的緩存機制與性能優化策略。在實際生產環境中&#xff0c;RAG系統往往面臨高并發、低延遲的需求&#xff0c;而合理的緩存設計和性能優…

swanlab實驗優雅起名

init中的參數的作用project&#xff1a;整個實驗的名字&#xff1b;experiment_name&#xff1a;在這個實驗中&#xff0c;你的名字是什么&#xff1b; 比如說現在我們要進行對比實驗&#xff0c;PEAN和Triflownet分別是對比方法的名字&#xff0c;這樣的好處是&#xff0c;她們…

Nestjs框架: NestJS 核心機制解析 —— DI(依賴注入)容器與模塊化工作原理

理解 NestJS 的 DI 管理機制 我們想要了解依賴注入&#xff08;Dependency Injection, DI&#xff09;最核心的工作邏輯NestJS 擁有自己的一套 DI 管理系統&#xff0c;它通過一個稱為 DI 容器 的機制&#xff0c;來統一管理應用中所有類&#xff08;class&#xff09;的依賴關…

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(12):文法+單詞

日語學習-日語知識點小記-構建基礎-JLPT-N3階段&#xff08;12&#xff09;&#xff1a;文法單詞 1、前言&#xff08;1&#xff09;情況說明&#xff08;2&#xff09;工程師的信仰2、知識點&#xff11;ーたぶん 多分&#xff12;ーV&#xff08;て&#xff09;いく ? V&…

【趙渝強老師】OceanBase租戶的資源管理

OceanBase數據庫是多租戶的數據庫系統&#xff0c;一個集群內可包含多個相互獨立的租戶&#xff0c;每個租戶提供獨立的數據庫服務。在OceanBase數據庫中&#xff0c;使用資源配置&#xff08;Unit Config&#xff09;、資源單元&#xff08;Unit&#xff09;和資源池&#xff…

8K、AI、低空智聯,H.266能否撐起下一代視頻通路?

一、&#x1f4c8; 爆發式增長的 AI 與視頻數據&#xff1a;智能時代的“數據燃料革命” 隨著生成式 AI、大模型推理、多模態理解等技術的迅猛發展&#xff0c;視頻數據從“記錄工具”轉變為“感知基礎設施”&#xff0c;其在現代智能系統中的戰略地位日益凸顯。 1?? 視頻數…

保姆級別IDEA關聯數據庫方式、在IDEA中進行數據庫的可視化操作(包含圖解過程)

本文以mysql為例&#xff0c;學會了Mysql&#xff0c;其它的數據庫也是類似的模版~如果您覺得這邊文章對你有幫助&#xff0c;可以收藏防止找不到~如果您覺得這篇文章不錯&#xff0c;也感謝您的點贊對我創作的支持1.1 打開側邊欄的Database2.2 選擇要連接的數據庫&#xff08;…

33.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--財務服務--記賬

這篇文章我們一起把記賬模塊從單體應用遷移到微服務架構中。記賬模塊的功能想必大家都已經了解了&#xff0c;主要是記錄用戶的收入和支出&#xff0c;以及對這些記錄的刪除修改和查詢等操作。具體的功能可以參考單體應用專欄&#xff0c;在這里就不多講了。我們現在一起開始遷…

Cursor結合Playwright MCP Server支持自動化

Cursor結合Playwright MCP Server支持自動化 今天分享一下 playwright MCP Server&#xff0c;其提供了瀏覽器自動化能力&#xff0c;使大型語言模型能夠在真實的瀏覽器環境中與網頁交互&#xff0c; 也可以執行任務&#xff0c;例如運行JavaScript、截屏和導航網頁元素&…

Python 求梯形面積的程序(Program to find area of a Trapezoid)

梯形的定義&#xff1a; 梯形是凸四邊形&#xff0c;至少有一對邊平行。平行邊稱為梯形的底邊&#xff0c;另外兩條不平行的邊稱為梯形的腿。梯形也可以有兩對底邊。在上圖中&#xff0c;CD || AB&#xff0c;它們構成底邊&#xff0c;而另外兩條邊&#xff0c;即AD和BC&#…

C語言 —— 指針(4)

動態內存分配動態內存需要手動申請&#xff0c;手動歸還&#xff0c;其內存是開辟在堆區。申請的函數為&#xff1a;void *malloc(size_t size) &#xff08;需包含頭文件#include<stdlib.h>&#xff09;size&#xff1a;要分配的內存大小&#xff0c;以字節為單位。申請…

常用算法思想及模板

今天繼續整理一些關于算法競賽中C適用的一些模板以及思想。 保留x位小數 保留x位小數在C語言中可以使用printf中的"%.xf"來實現&#xff0c;但是很多C選手由于關閉了同步流&#xff0c;害怕cin、cout與scanf、printf混用容易出錯&#xff0c;所以就給大家介紹一個強…

GitLab 倉庫 — 常用的 git 命令

在公司的 gitlab 公共倉庫中寫代碼做項目時&#xff0c;主要涉及以下常用 git 命令&#xff1a;一、單個命令講解1. 拉取代碼&#xff08;1&#xff09;git clone [倉庫 URL]?克隆遠程倉庫到本地&#xff08;需確保 URL 正確&#xff09; ?&#xff08;?2&#xff09;git pu…

【28】C# WinForm入門到精通 ——多文檔窗體MDI【屬性、方法、實例、源碼】【多窗口重疊、水平平鋪、垂直平鋪、窗體傳值】

文章目錄1多文檔窗體MDI2 基本設置3 實例&#xff1a;多窗口重疊、水平平鋪、垂直平鋪3.1 主窗口屬性設置3.2 主窗口3.3 主窗口窗口添加MenuStrip菜單3.4 添加處理函數3.5 測試效果4 利用窗體參數定義進行傳值4.1 在Form2、Form3添加相關控件4.2 Form3 定義函數public Form3(st…

【計算機科學與應用】基于Session欺騙攻擊的Web應用程序防護

導讀&#xff1a; 本文對Web應用程序開發中的Session欺騙攻擊進行了闡述&#xff0c;詳細講解了防范Session欺騙攻擊的三種傳統方法&#xff0c;并給出了防范代碼&#xff0c;分析了三種傳統防范方法的不足&#xff0c;新設計了一種通過Referer信息驗證來加強對Session欺騙的防…

yolo8+阿里千問圖片理解(華為簡易版小藝看世界)

? 實現目標 按下空格鍵 → 獲取攝像頭當前畫面&#xff1b; 將圖片上傳給 大模型 接口&#xff0c;讓其“看圖說話”&#xff1b; 獲取返回描述后&#xff0c;以字幕形式展示在圖像畫面上&#xff1b; 持續顯示識別結果&#xff0c;直到下次按空格。 &#x1f9e0; 需要準…