【gRPC】HTTP/2協議,HTTP/1.x中線頭阻塞問題由來,及HTTP/2中的解決方案,RPC、Protobuf、HTTP/2 的關系及核心知識點匯總

HTTP/2協議特點

gRPC基于HTTP/2協議,原因:

  • 多路復用:允許在同一個TCP連接上并行傳輸多個請求和響應,即多個gRPC調用可以通過同一個連接同時進行,避免了HTTP/1.x中常見的線頭阻塞問題,減少了連接建立和關閉的開銷,提高了性能和連接利用率。
  • 二進制分幀:HTTP/2將數據分割二進制幀,每個幀都有自己的類型、標志和內容。gRPC利用這種機制可以更高效地傳輸數據,使數據的傳輸更加有序可靠,并且能夠在應用層對數據進行更細粒度的管理
  • 流控制:HTTP/2提供了流控制機制,允許客戶端和服務器控制數據流的速率,以防止發送方發送過快導致接收方緩沖區溢出。gRPC借助這一機制來管理數據的傳輸速率,確保通信的穩定性和可靠性。
  • 頭部壓縮:HTTP/2使用HPACK算法等對頭部進行壓縮,減少了頭部信息的傳輸大小,提高了傳輸效率。對于gRPC來說,這有助于減少元數據的傳輸開銷,特別是在頻繁進行RPC調用時,可以顯著降低網絡帶寬占用。

菜鳥教程總結版

多路復用:HTTP/2 允許同時發送多個請求和響應,而不是像 HTTP/1.1 一樣只能一個一個地處理。
這樣可以減少延遲,提高效率,提高網絡吞吐量。二進制傳輸:HTTP/2 使用二進制協議,與 HTTP/1.1 使用的文本協議不同。
二進制協議可以更快地解析,更有效地傳輸數據,減少了傳輸過程中的開銷和延遲。頭部壓縮:HTTP/2 使用 HPACK 算法對 HTTP 頭部進行壓縮,減少了頭部傳輸的數據量,從而減少了網絡延遲。服務器推送:HTTP/2 支持服務器推送,允許服務器在客戶端請求之前推送資源,以提高性能。改進的安全性:HTTP/2 默認使用 TLS(Transport Layer Security)加密傳輸數據,提高了安全性。兼容 HTTP/1.1:HTTP/2 可以與 HTTP/1.1 共存,服務器可以同時支持 HTTP/1.1 和 HTTP/2。
如果客戶端不支持 HTTP/2,服務器可以回退到 HTTP/1.1。

HTTP/1.x中線頭阻塞在HTTP/2中被解決

產生原因
  • 同一個 TCP 連接上的請求必須按順序發送,服務器也會按順序處理請求并返回響應。
  • HTTP/1.1 雖引入 長連接,允許復用 TCP 連接,但瀏覽器默認對同一域名僅建立 6-8 個并發連接(不同瀏覽器策略不同)
  • 當頁面需要加載大量資源(如圖片、CSS、JS 等)時,大量請求會被分配到有限的連接中,導致每個連接上的請求隊列過長,加劇阻塞問題。

所以解決思路大致有兩條線:1. 改變接收硬性順序規定,實現并行;2. 壓縮數據大小

HTTP/2解決方案
  • 引入 多路復用

    • 同一 TCP 連接中并行處理多個請求,響應
    • 請求和響應被拆分為獨立的 二進制幀,并且由于這里二進制分幀都含有自己的標識,可以實現混亂傳輸,最后到達時重新組裝

gRPC、Protobuf、HTTP/2 的關系及核心知識點匯總表:

技術維度Protobuf (Protocol Buffers)HTTP/2gRPC
定義語言無關的數據序列化協議(Google 開發)HTTP 協議高性能開源 RPC 框架(Google 開發)
核心功能結構化數據的高效序列化/反序列化(生成二進制消息二進制分幀、多路復用、頭部壓縮、流控制遠程過程調用(定義服務接口 & 自動生成代碼)
數據格式二進制格式(體積小、解析快)二進制協議(幀結構)基于 Protobuf 消息(默認)或其他格式
傳輸協議不依賴特定傳輸層(可與任何協議結合)基于 TCP,支持 TLS 加密強制基于 HTTP/2(利用其所有特性)
主要用途跨語言數據交換、存儲(如微服務間通信)通用 Web 通信(替代 HTTP/1.x)構建高性能分布式系統(API、微服務)
關鍵優勢1. 序列化效率極高(比 JSON/XML 快 3-10 倍)
2. 自動生成強類型代碼
3. 向后兼容(支持字段增刪)
1. 多路復用(徹底解決線頭阻塞
2. 頭部壓縮(HPACK
3. 二進制分幀
4. 流控制
1. 基于 HTTP/2 的高性能傳輸
2. 自動生成客戶端/服務器代碼
3. 支持流式通信
4. 豐富的攔截器機制
典型應用場景1. 微服務間數據交換
2. 移動應用與后端通信
3. 緩存數據存儲
1. 現代 Web 應用(如 SPA)
2. API 網關
3. 推送通知系統
1. 跨語言微服務通信
2. 邊緣計算(低延遲需求)
3. 設備與云端通信
關系gRPC 默認使用 Protobuf 定義服務接口消息格式HTTP/2 是 gRPC 的底層傳輸協議gRPC = Protobuf(接口定義 + 消息序列化) + HTTP/2(網絡傳輸)

總結邏輯

  1. Protobuf 是數據格式層,負責高效序列化。
  2. HTTP/2 是傳輸協議層,提供高性能通信能力。
  3. gRPC 是應用框架層,整合兩者并提供完整 RPC 解決方案。

https://github.com/0voice

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

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

相關文章

PCIe Switch 問題點

系列文章目錄 文章目錄 系列文章目錄完善PCIe Retimer Overview Document OutlineSwitch 維度BroadComMicroChipAsmedia 祥碩Cyan其他 完善 Functional block diagram,功能框圖Key Features and Benefits,主要功能和優點Fabric 鏈路Multi-root PCIe Re…

vue復雜數據類型多層嵌套的監聽

vue復雜數據類型多層嵌套的監聽 本來看前輩的做法是watch的嵌套,遇到這種復雜的數據結構還是不多,分享一下前輩的做法 let stopChildWatchList [] // 用于存放每個子監聽器watch(() > data,(val) > {// 清除舊監聽stopChildWatchList.forEach(…

來一個復古的技術FTP

背景 10年前的老代碼,需要升級springboot框架,在升級過程中,測試業務流程里,有FTP的下載業務,不管測試環境如何測試,都沒有成功,最后只能自己搭建一個FTP服務器,寫一個ftp-demo來測試…

MyBatis-Flex配置Druid(德魯伊數據庫連接池):Spring Boot 3 集成 MyBatis-Flex 配置 Druid 連接池指南

Spring Boot 3 集成 MyBatis-Flex 配置 Druid 連接池指南 前言 本文詳細講解在 Spring Boot 3 項目中集成 MyBatis-Flex 框架后,如何正確配置 Druid 數據庫連接池。針對開發者常見的配置缺失導致啟動失敗的場景,提供完整的解決方案和原理分析。 前置知識…

安全生產調度管理系統的核心功能模塊

安全生產調度管理系統是運用現代信息技術構建的智能化管理平臺,旨在實現生產安全風險的全面管控和應急資源的優化調度。該系統通過整合物聯網、大數據、人工智能等前沿技術,建立起覆蓋風險監測、預警預測、指揮調度、決策支持的全鏈條安全管理體系。 一…

桃芯ingchips——windows HID鍵盤例程無法同時連接兩個,但是安卓手機可以的問題

目錄 環境 現象 原理及解決辦法 環境 PC:windows11 安卓:Android14 例程使用的是HID Keyboard,板子使用的是91870CQ的開發板,DB870CC1A 現象 連接安卓手機時并不會出現該現象,兩個開發板都可以當做鍵盤給手機發按…

JavaScript - JavaScript 運算符之圓括號運算符與方括號運算符(圓括號運算符概述、圓括號運算符用法、方括號運算符概述、方括號運算符用法)

一、圓括號運算符概述 圓括號運算符(())主要用于函數調用、表達式分組、多種語法結構登 二、圓括號運算符用法 調用函數 function greet() {console.log("Hello!"); }greet();# 輸出結果Hello!當箭頭函數有多個參數或零個參數時需要括號 c…

AG-UI 協議:重構多模態交互,開啟智能應用新紀元

一、協議誕生的時代背景:填補 AI 生態最后一塊拼圖 在人工智能技術飛速發展的今天,AI 代理(Agent)作為能夠主動執行復雜任務的智能實體,正從實驗室走向生產環境,重塑各個行業的工作流程。然而,…

嵌入式學習的第二十天-數據結構-調試+鏈表的一般操作

一、調試 1.一般調試 2.找段錯誤 二、鏈表的一般操作 1.單鏈表的修改 int ModifyLinkList(LinkList*ll,char*name,DATATYPE*data) {DATATYPE * tmp FindLinkList(ll, name);if(NULL tmp){return 1;}memcpy(tmp,data,sizeof(DATATYPE));return 0; } 2.單鏈表的銷毀 int D…

如何同時管理不同平臺的多個賬號?

在當今數字營銷、電商運營、跨境貿易盛行的時代,同時管理多個平臺的賬號幾乎成了從業者的標配。無論是做社媒營銷的廣告主,還是操作亞馬遜、eBay、Shopee 等平臺的跨境賣家,多賬號運營都是提升曝光、分散風險、擴大收益的重要方式。 然而&am…

STM32外設AD/DA-基礎及CubeMX配置

STM32外設AD/DA-基礎及CubeMX配置 一,什么是AD/DA二,基礎概念1,模擬 vs 數字2,AD轉換1,分辨率 (Resolution)2,參考電壓 (Reference Voltage, Vref)3,采樣率 (Sampling Rate) 3,DA轉換…

【軟考 霍夫曼編碼的文檔壓縮比】

霍夫曼編碼的文檔壓縮比計算基于字符頻率的最優編碼分配,以下是詳細步驟及相關案例: 一、壓縮比計算公式 [ \text{壓縮比} \frac{\text{壓縮前總比特數}}{\text{壓縮后總比特數 編碼表存儲開銷}} ] 通常以 比率(如 3:1) 或 百分…

關閉VSCode 自動更新

參考:關閉VSCode 自動更新_vscode關閉自動更新-CSDN博客 vscode的設置 Update: Mode Update: Enable Windows Background Updates Extensions: Auto Check Updates Extensions: Auto Update

Flask框架搭建

1、安裝Flask 打開終端運行以下命令: pip install Flask 2、創建項目目錄 在Windows上: venv\Scripts\activate 執行 3、創建 app.py 文件 可以在windows終端上創建app.py文件 (1)終端中創建 使用echo命令 echo "fr…

5G-A和未來6G技術下的操作系統與移動設備變革:云端化與輕量化的發展趨勢

目錄 5G技術帶來的革命性變革 云端化操作系統的實現路徑 完全云端化模式 過渡性解決方案 未來操作系統的發展方向 功能架構演進 安全機制強化 移動設備的形態變革 終端設備輕量化 物聯網設備簡化 實施挑戰與應對策略 技術挑戰 商業模式創新 總結與展望 5G技術作為…

【漫話機器學習系列】261.工具變量(Instrumental Variables)

工具變量(Instrumental Variables)通俗圖解:破解內生性困境的利器 在數據建模與因果推斷過程中,我們經常遇到一個棘手問題:內生性(Endogeneity)。它會導致模型估計產生偏差,進而誤導…

CSS:顏色的三種表示方式

文章目錄 一、rgb和rgba方式二、HEX和HEXA方式(推薦)三、hsl和hsla方式四、顏色名方式 一、rgb和rgba方式 10進制表示方法 二、HEX和HEXA方式(推薦) 就是16進制表示法 三、hsl和hsla方式 語法:hsl(hue, satura…

支付寶授權登錄

支付寶授權登錄 一、場景 支付寶小程序登錄,獲取用戶userId 二、注冊支付寶開發者賬號 1、支付寶開放平臺 2、點擊右上角–控制臺,創建小程序 3、按照步驟完善信息,生成密鑰時會用到的工具 4、生成的密鑰,要保管好&#xff…

涂色不踩雷:如何優雅解決 LeetCode 柵欄涂色問題

文章目錄 摘要描述例子: 題解答案(Swift)題解代碼分析動態規劃核心思路初始條件 示例測試及結果示例 1:示例 2:示例 3: 時間復雜度空間復雜度總結實際場景聯系 摘要 在用戶體驗和界面設計中,顏…

GEE計算 RSEI(遙感生態指數)

🛰? 什么是 RSEI?為什么要用它評估生態環境? RSEI(遙感生態指數,Remote Sensing Ecological Index) 是一種通過遙感數據計算得到的、綜合反映區域生態環境質量的指標體系。 它的設計初衷是用最少的變量&…