一冀偶、簡(jiǎn)介
gRPC 是一個(gè)高性能评抚、通用的開(kāi)源 RPC 框架奸披,其由 Google 主要面向移動(dòng)應(yīng)用開(kāi)發(fā)并基于 HTTP/2 協(xié)議標(biāo)準(zhǔn)而設(shè)計(jì)污茵,基于 ProtoBuf(Protocol Buffers) 序列化協(xié)議開(kāi)發(fā),且支持眾多開(kāi)發(fā)語(yǔ)言蝙昙,目前提供 C闪萄、Java 和 Go 語(yǔ)言版本。
二奇颠、gRPC 是什么
在 gRPC 里客戶端應(yīng)用可以像調(diào)用本地對(duì)象一樣直接調(diào)用另一臺(tái)不同的機(jī)器上服務(wù)端應(yīng)用的方法败去,使得您能夠更容易地創(chuàng)建分布式應(yīng)用和服務(wù)。與許多 RPC 系統(tǒng)類(lèi)似烈拒,gRPC 也是基于以下理念:定義一個(gè)服務(wù)圆裕,指定其能夠被遠(yuǎn)程調(diào)用的方法(包含參數(shù)和返回類(lèi)型)。在服務(wù)端實(shí)現(xiàn)這個(gè)接口荆几,并運(yùn)行一個(gè) gRPC 服務(wù)器來(lái)處理客戶端調(diào)用吓妆。在客戶端擁有一個(gè)存根能夠像服務(wù)端一樣的方法。
gRPC 客戶端和服務(wù)端可以在多種環(huán)境中運(yùn)行和交互 - 從 google 內(nèi)部的服務(wù)器到你自己的筆記本吨铸,并且可以用任何 gRPC 支持的語(yǔ)言來(lái)編寫(xiě)行拢。所以,你可以很容易地用 Java 創(chuàng)建一個(gè) gRPC 服務(wù)端诞吱,用 Go舟奠、Python、Ruby 來(lái)創(chuàng)建客戶端房维。此外沼瘫,Google 最新 API 將有 gRPC 版本的接口,使你很容易地將 Google 的功能集成到你的應(yīng)用里咙俩。
三耿戚、gRPC 優(yōu)缺點(diǎn)
gRPC的優(yōu)勢(shì):
高效的內(nèi)部進(jìn)程溝通(inter-process communication)
簡(jiǎn)單、優(yōu)雅的服務(wù)接口和框架定義
強(qiáng)類(lèi)型,支持多種語(yǔ)言溅话,便于約定服務(wù)和消息體
支持雙向流
gRPC的缺點(diǎn):
可能不適合面向外部服務(wù)的場(chǎng)景
gRPC 服務(wù)協(xié)議驅(qū)動(dòng)晓锻、強(qiáng)類(lèi)型的特征可能會(huì)限制對(duì)外服務(wù)的靈活性,同時(shí)會(huì)削弱使用者的控制能力(The contract-driven, strongly typed nature of gRPC services may hinder the flexibility of the services that you expose to the external parties, and consumers get far less control)
當(dāng)有大量的服務(wù)定義被修改時(shí)飞几,需要重新生成客戶端和服務(wù)端的代碼
gRPC 中砚哆,所有的請(qǐng)求都是 HTTP POST 請(qǐng)求,需要在content-type里加上application/grpc前綴屑墨;待調(diào)用的遠(yuǎn)程方法作為一個(gè)單獨(dú)的 HTTP 頭部發(fā)送
proto文件進(jìn)行參數(shù)校驗(yàn)比較麻煩
四躁锁、gRPC 、Dubbo卵史、SpringCloud對(duì)比
dubbo和springcloud有相對(duì)完成整的微服務(wù)框架战转,如注冊(cè)中心、網(wǎng)關(guān)以躯、配置中心槐秧、鏈路監(jiān)控等,而grpc網(wǎng)關(guān)等服務(wù)需自己搭建忧设。
springcloud使用的是http刁标,dubbo使用的tcp協(xié)議,grpc使用的是http2 并基于ProtoBuf(Protocol Buffers) 序列化傳輸相對(duì)于速度更快址晕。