思考gRPC 為什麼是HTTP 2

2021-08-21 14:22:03 字數 2003 閱讀 2700

grpc是google開源的高效能跨語言的rpc方案。grpc的設計目標是在任何環境下執行,支援可插拔的負載均衡,跟蹤,執行狀況檢查和身份驗證。它不僅支援資料中心內部和跨資料中心的服務呼叫,它也適用於分布式計算的最後一公里,將裝置,移動應用程式和瀏覽器連線到後端服務。

在正式討論grpc為什麼選擇http/2之前,我們先來簡單了解下http/2。

來自:可以看到:

在chrome瀏覽器裡,開啟chrome://net-internals/#http2,可以看到http2鏈結的資訊。

目前很多**都已經跑在http/2上了,包括alibaba。

準確來說grpc設計上是分層的,底層支援不同的協議,目前grpc支援:

但是大多數情況下,討論都是基於grpc over http2。

下面從乙個真實的grpcsayhello請求,檢視它在http/2上是怎樣實現的。用wireshark抓包:

可以看到下面這些header:

然後請求的引數在data frame裡:

簡而言之,ggrpc把元資料放到http/2 headers裡,請求引數序列化之後放到 data frame裡。

http/2 是乙個公開的標準

google本身把這個事情想清楚了,它並沒有把內部的stubby開源,而是選擇重新做。現在技術越來越開放,私有協議的空間越來越小。

http/2 是乙個經過實踐檢驗的標準

http/2是先有實踐再有標準,這個很重要。很多不成功的標準都是先有一大堆廠商討論出標準後有實現,導致混亂而不可用,比如corba。http/2的前身是google的spdy,沒有google的實踐和推動,可能都不會有http/2。

http/2 天然支援物聯網、手機、瀏覽器

實際上先用上http/2的也是手機和手機瀏覽器。移動網際網路推動了http/2的發展和普及。

只討論協議本身的實現,不考慮序列化。

http/2支援stream和流控

在業界,有很多支援stream的方案,比如基於websocket的,或者rsocket。但是這些方案都不是通用的。

http/2裡的stream還可以設定優先順序,儘管在rpc裡可能用的比較少,但是一些複雜的場景可能會用到。

基於http/2 在gateway/proxy很容易支援

http/2 安全性***

http/2 鑑權成熟

比如傳統的rpc dubbo,需要寫乙個dubbo filter,還要考慮把鑑權相關的資訊通過thread local傳遞進去。rpc協議本身也需要支援。總之,非常複雜。實際上絕大部分公司裡的rpc都是沒有鑑權的,可以隨便調。

grpc選擇基於http/2,那麼它的效能肯定不會是最頂尖的。但是對於rpc來說中庸的qps可以接受,通用和相容性才是最重要的事情。

近10年來,google制定標準的能力越來越強。下面列舉一些標準:

當然google也並不都會成功,很多事情它想推也失敗了,比如chrome的native client。

grpc目前是k8s生態裡的事實標準。 grpc是否會成為更多地方,更大領域的rpc標準?

準確來說為什麼會出現基於http/2的rpc?

個人認為乙個重要的原因是,在cloud native的潮流下,開放互通的需求必然會產生基於http/2的rpc。即使沒有grpc,也會有其它基於http/2的rpc。

grpc在google的內部也是先用在google cloud platform和公開的api上:

儘管grpc它可能替換不了內部的rpc實現,但是在開放互通的時代,不止在k8s上,grpc會有越來越多的舞台可以施展。

微服務 gRPC 為什麼是HTTP 2

grpc是google開源的高效能跨語言的rpc方案。grpc的設計目標是在任何環境下執行,支援可插拔的負載均衡,跟蹤,執行狀況檢查和身份驗證。它不僅支援資料中心內部和跨資料中心的服務呼叫,它也適用於分布式計算的最後一公里,將裝置,移動應用程式和瀏覽器連線到後端服務。在正式討論grpc為什麼選擇ht...

gRPC為什麼用HTTP2作為傳輸協議

基於http 2 的缺點 rpc的元資料的傳輸不夠高效 儘管hpac可以壓縮http header,但是對於rpc來說,確定乙個函式呼叫,可以簡化為乙個int,只要兩端去協商過一次,後面直接查表就可以了,不需要像hpac那樣編碼解碼。可以考慮專門對grpc做乙個優化過的http 2解析器,減少一些通...

2月為什麼是28天?

早上刷牙的時候想到乙個問題 一年有365天是因為地球繞太陽轉一圈是365天,那麼每月是多少天究竟有什麼規律呢?為什麼有的月份是28天,有的是30天,還有的是31天呢?如果說中國的農曆還有點道理,因為正好是按照月圓月缺來的變化來的,而公曆並沒有按照這樣的規律,公曆裡面每個月有幾天究竟是誰說了算了?憑啥...