gRPC- HTTP閘道器 I

小魔童哪吒發表於2021-06-02
[TOC]

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 協議》,轉載必須註明作者和本文連結

相關文章