[TOC]前端
gRPC
是什麼?咱們再來回顧一下web
gRPC
是 Google開發的基於HTTP/2
標準設計的一個通用的,高性能的RPC框架,有以下3個最明顯的特色:編程
C++,Java,Python,Go,Ruby
等,基於ProtoBuf
生成相應的服務端和客戶端代碼。ProtoBuf
定義服務,面向接口對服務進行設計具體的,這篇文章都有介紹到 -- gRPC的介紹api
分享gRPC 的HTTP網關以前,先來大體說說 HTTP網關是什麼安全
網關是啥?服務器
網關(Gateway)就是一個網絡鏈接到另外一個網絡的
關口
。網絡網關他是一個設備,將兩個使用不一樣傳輸協議的網絡段鏈接在一塊兒,網關通常用做網絡的入口和出口點,由於全部數據必須在路由以前經過或與網關通訊。框架
網關全部網絡都有一個邊界,限制與直接鏈接到它的設備的通訊。若是網絡想要與該邊界以外的設備,節點或網絡通訊,則它們須要網關的功能。網關一般被表徵爲路由器和調制解調器的組合。編程語言
HTTP網關那就不難理解,是基於HTTP請求
的網絡關口分佈式
例如,客戶端在網絡上下載資源,客戶端經過http協議訪問到web網關,web網關識別到請求以後,轉成ftp協議,請求ftp服務器,進行文件的上傳和下載
安全網關,應該就能想到加密
網關對全部的輸入Web請求加密,以提供額外的隱私和安全性保護。哪怕客戶端能夠用普通的HTTP瀏覽Web內容,但網關會自動加密用戶的對話,保證安全性
在HTTP請求前加上HTTPS進行攔截,保障流量的安全
將HTTPS/HTTP網關做爲安全加速器,這些HTTPS/HTTP網關通常是在放Web服務器以前,一般做爲不可見的攔截網關或反向代理使用。它們接收安全的HTTPS處理過的流量,對安全流量進行解密,並向Web服務器發送普通的HTTP請求
也就是說正常狀況下,若流量能到web,說明流量是安全的
例如訪問某些應用程序的內部數據,這是經過網絡鏈接客戶端和服務器的網關。
即網關就在 應用程序對應的服務器上,與客戶端經過HTTP / HTTPS進行通訊,並與自身服務器端的應用程序相連
Golang開發程序的時候,通常gRPC
對內,用於微服務之間的內部通訊,HTTP
接口暴露出來,提供給前端,或者是客戶端。
咱們的微服務中既要有內部通訊的gRPC
,又要寫對外暴露的HTTP
接口,彷佛無形中增長了很多工做量,維護兩個版本的服務,這種作法是否是很low。那麼有沒有一種辦法能夠將2種方式結合,或者說是簡化呢?
固然是有的,gRPC
爲咱們提供了一個很方便的gRPC-Gateway
插件
是protoc
的一個優秀的插件
gRPC-Gateway
提供了基於proto
文件中的服務接口定義生成HTTP
的反向代理的能力。對於同一個標準的gRPC
服務定義,除了基本的gRPC客戶端
之外還能生成相應的HTTP JSON
的接口實現代碼
它能夠經過google提供的標準接口google/api/annotations.proto
,咱們可以對原有Protobuf服務,描述成其相應的HTTP接口形式
具體是這樣的結構
是啊,咱們寫微服務,對內用gRPC,對外用HTTP, 一個服務裏面寫2套接口,累是累了點,但是 gRPC-Gateway
僅僅就是寫gRPC
服務同時也能夠用於HTTP
接口嗎?
固然不是
使用 gRPC-Gateway的優點以下:
gRPC-Gateway
工具,讓咱們能夠很快速的基於proto接口定義,在使用RPC的同時對外提供Restful
使用gRPC
的原有Protobuf服務同樣能夠感覺到Restful的簡單性,猶如直接寫的HTTP接口,簡單易用
這是RPC
框架的自己優點,RPC
專爲分佈式應用的高性能和高生產率設計而設計的
HTTP 2.0
的gRPC
基本要點gRPC-gateway
,以及其基本結構好了,本次就到這裏,下一次分享gRPC-gateway
的實際環境搭建,案例編碼,調試技巧,以及效果輸出
技術是開放的,咱們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
我是小魔童哪吒,歡迎點贊關注收藏,下次見~