如何分析基于HTTP/2和protobuf的RPC框架GRPC,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)長(zhǎng)期為上1000家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為豐林企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、做網(wǎng)站,豐林網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
Google 剛剛開(kāi)源了grpc(http://www.grpc.io/ ), 一個(gè)基于HTTP2和 Protobuf 的高性能、開(kāi)源、通用的RPC框架。Protobuf 本身雖然提供了RPC 的定義語(yǔ)法,但是一直以來(lái),Google 只開(kāi)源了Protobuf 序列化反序列化的代碼,而沒(méi)有開(kāi)源RPC 的實(shí)現(xiàn),于是存在著眾多良莠不齊的第三方RPC 實(shí)現(xiàn),不過(guò)我在項(xiàng)目中采用WCF搭配Protobuf是一個(gè)很不錯(cuò)的RPC實(shí)現(xiàn),Google這個(gè)框架是是基于HTTP2的,這是他有特色的地方,帶來(lái)諸如雙向流、流控、頭部壓縮、單TCP連接上的多復(fù)用請(qǐng)求等特性。這些特性使得其在移動(dòng)設(shè)備上表現(xiàn)更好,更省電和節(jié)省空間占用。
從實(shí)現(xiàn)和特性看來(lái),GRPC更多的是考慮移動(dòng)場(chǎng)景情況下客戶(hù)端和服務(wù)端的通信,正如其自稱(chēng)的「generalRPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了連接多路復(fù)用、Body和 Header 壓縮等機(jī)制,grpc 基于此可以提供比較高效的實(shí)現(xiàn)。目前Firefox、Chrome、Safari、Opera、iOS版Safari、Android版Chrome、Windows 8上的IE 11都已經(jīng)支持HTTP/2,Windows 10預(yù)覽版自帶的瀏覽器也支持它。Apache、Windows 10上的IIS和Nginx都已經(jīng)實(shí)現(xiàn)了SPDY 3.1或4(這就是HTTP/2),剩下的工作就是網(wǎng)站管理員們?nèi)ド?jí)服務(wù)器軟件了。
GRPC所使用的依賴(lài)都比較新,如protbuf 需要3.0 版本, c++ 使用了c++11, Java 實(shí)現(xiàn)中的netty 需要5.0 版本, HTTP2 也是剛剛定稿?,F(xiàn)階段官方支持C++、JAVA、Python等三種編程語(yǔ)言,并以c 共享庫(kù)的方式來(lái)支持Node.js, Python, Ruby,Objective-C, PHP 和C# 語(yǔ)言 (由此看來(lái),c++, Java 和golang 在Google 有著一等公民的地位)。其中Java 語(yǔ)言的實(shí)現(xiàn)亦可以用于Android客戶(hù)端,Objective-C 的實(shí)現(xiàn)主要針對(duì)IOS 客戶(hù)端。
重點(diǎn)看了一下C# 的實(shí)現(xiàn)(https://github.com/grpc/grpc/tree/master/src/csharp),目前代碼只能在Mono下運(yùn)行,主要是windows下的GRPC C core庫(kù)的P/Invoke包裝還沒(méi)有完成,這里也可以看出Google的主要開(kāi)發(fā)環(huán)境是Linux/ubuntu,對(duì)Mono的支持還不錯(cuò),這點(diǎn)對(duì)同樣是互聯(lián)網(wǎng)公司國(guó)內(nèi)同行很有借鑒意義。
看完上述內(nèi)容,你們掌握如何分析基于HTTP/2和protobuf的RPC框架GRPC的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!