gRPC
是什麼?我們再來回顧一下
gRPC
是 Google開發的基於HTTP/2
標準設計的一個通用的,高效能的RPC框架,有如下3個最明顯的特點:
- 支援主流的程式語言,
C++,Java,Python,Go,Ruby
等,基於ProtoBuf
生成相應的服務端和客戶端程式碼。 - 基於HTTP/2協議,且提供了更強的應用效能 – 節省頻寬,減少TCP請求連線數
- 基於
ProtoBuf
定義服務,面向介面對服務進行設計
具體的,這篇文章都有介紹到 – gRPC的介紹
HTTP閘道器是什麼?
分享gRPC 的HTTP閘道器之前,先來大致說說 HTTP閘道器是什麼
閘道器是啥?
閘道器(Gateway)就是一個網路連線到另一個網路的
關口
。閘道器他是一個裝置,將兩個使用不同傳輸協議的網路段連線在一起,閘道器一般用作網路的入口和出口點,因為所有資料必須在路由之前通過或與閘道器通訊。
閘道器所有網路都有一個邊界,限制與直接連線到它的裝置的通訊。如果網路想要與該邊界之外的裝置,節點或網路通訊,則它們需要閘道器的功能。閘道器通常被表徵為路由器和調變解調器的組合。
HTTP閘道器那就不難理解,是基於HTTP請求
的網路關口
HTTP閘道器都有哪些嘞?
- HTTP/* ,伺服器端Web閘道器
例如,客戶端在網路上下載資源,客戶端通過http協議訪問到web閘道器,web閘道器識別到請求之後,轉成ftp協議,請求ftp伺服器,進行檔案的上傳和下載
- HTTP/HTTPS ,伺服器端安全閘道器
安全閘道器,應該就能想到加密
閘道器對所有的輸入Web請求加密,以提供額外的隱私和安全性保護。哪怕客戶端可以用普通的HTTP瀏覽Web內容,但閘道器會自動加密使用者的對話,保證安全性
- HTTPS/HTTP客戶端安全加速器閘道器
在HTTP請求前加上HTTPS進行攔截,保障流量的安全
將HTTPS/HTTP閘道器作為安全加速器,這些HTTPS/HTTP閘道器一般是在放Web伺服器之前,通常作為不可見的攔截閘道器或反向代理使用。它們接收安全的HTTPS處理過的流量,對安全流量進行解密,並向Web伺服器傳送普通的HTTP請求
也就是說正常情況下,若流量能到web,說明流量是安全的
- 其他資源閘道器
例如訪問某些應用程式的內部資料,這是通過網路連線客戶端和伺服器的閘道器。
即閘道器就在 應用程式對應的伺服器上,與客戶端通過HTTP / HTTPS進行通訊,並與自身伺服器端的應用程式相連
gRPC-Gateway
Golang開發程式的時候,一般gRPC
對內,用於微服務之間的內部通訊,HTTP
介面暴露出來,提供給前端,或者是客戶端。
我們的微服務中既要有內部通訊的gRPC
,又要寫對外暴露的HTTP
介面,似乎無形中增加了不少工作量,維護兩個版本的服務,這種做法是不是很low。那麼有沒有一種辦法可以將2種方式結合,或者說是簡化呢?
當然是有的,gRPC
為我們提供了一個很方便的gRPC-Gateway
外掛
gRPC-Gateway是什麼?
是protoc
的一個優秀的外掛
gRPC-Gateway
提供了基於proto
檔案中的服務介面定義生成HTTP
的反向代理的能力。對於同一個標準的gRPC
服務定義,除了基本的gRPC客戶端
以外還能生成相應的HTTP JSON
的介面實現程式碼
它可以通過google提供的標準介面google/api/annotations.proto
,我們能夠對原有Protobuf服務,描述成其相應的HTTP介面形式
具體是這樣的結構
gRPC-Gateway有啥優勢呢?
是啊,我們寫微服務,對內用gRPC,對外用HTTP, 一個服務裡面寫2套介面,累是累了點,可是 gRPC-Gateway
僅僅就是寫gRPC
服務同時也可以用於HTTP
介面嗎?
當然不是
使用 gRPC-Gateway的優勢如下:
- 可以保持Restful的簡單性
gRPC-Gateway
工具,讓我們可以很快速的基於proto介面定義,在使用RPC的同時對外提供Restful
使用gRPC
的原有Protobuf服務一樣可以感受到Restful的簡單性,猶如直接寫的HTTP介面,簡單易用
- 同時還可以充分提升應用內部的效能以及可靠性
這是RPC
框架的本身優勢,RPC
專為分散式應用的高效能和高生產率設計而設計的
使用gRPC提供HTTP介面有啥注意事項?
- gRPC提供的HTTP介面是基於
HTTP 2.0
的 - 別太爽就行
總結
- 回顧
gRPC
基本要點 - HTTP閘道器的介紹
- 引出
gRPC-gateway
,以及其基本結構
好了,本次就到這裡,下一次分享gRPC-gateway
的實際環境搭建,案例編碼,除錯技巧,以及效果輸出
技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
我是小魔童哪吒,歡迎點贊關注收藏,下次見~
本作品採用《CC 協議》,轉載必須註明作者和本文連結