一、gRPC簡(jiǎn)介
? ? ? gRPC(Remote Produce Call)是google開發(fā)的一個(gè)高性能、開源的通用的RPC框架。
二、gRPC特點(diǎn)
????高性能:
? ??? ??基準(zhǔn)測(cè)試:
????????????????在Java到Java的通信中,使用Protobuf能夠在25毫秒內(nèi)處理5萬個(gè)對(duì)象實(shí)例,而JSON需要150毫秒,性能是6倍(AuthO的基準(zhǔn))
????????????????gRPC速度快了10倍(go基準(zhǔn)測(cè)試)
????????????????gRPC速度快10倍(ASP.NET Core WebAPI基準(zhǔn)測(cè)試)
? ??? ??Protocol buffers
? ? ? ? ????????gRPC默認(rèn)使用Protocol buffers作為接口定義語言,protocol buffers是google用于序列化結(jié)構(gòu)化數(shù)據(jù)的語言中立、平臺(tái)中立、可擴(kuò)展,相比XML,它更小、更快、更簡(jiǎn)單。
? ? ? ? ????????protocol,json.xml對(duì)比

? ??? ??Http/2:
? ? ?????????特點(diǎn):Header壓縮、多路復(fù)用、使用二進(jìn)制格式傳輸(http 1.x文本格式)、服務(wù)器主動(dòng)推送,減少請(qǐng)求的延遲。
? ? ? ? ?????幀:HTTP/2數(shù)據(jù)通信的最小單位消息:指HTTP/2中邏輯上的HTTP消息。例如請(qǐng)求和響應(yīng)等,消息由一個(gè)或多個(gè)幀組成。
? ? ? ????????流:存在于連接中的一個(gè)虛擬通道。流可以承載雙向消息,每個(gè)流都有一個(gè)唯一的整數(shù)ID。
? ? ? ? ? ????http1.1與http2對(duì)比 :Akamai
????開源:
? ? ????gitee:https://gitee.com/mirrors/grpc-framework
? ? ????github:https://github.com/grpc/grpc
? ? ????C#包:https://github.com/grpc/grpc/tree/master/src/csharp
????通用:
? ? ????支持:C,C++,Node.js,Python,Ruby,Objective-C,PHP,C#,go,java
三、API類型
? ? 一元:rpc GetFeature(Point) returns (Feature){}? ?特點(diǎn):傳入一個(gè)對(duì)象,返回一個(gè)對(duì)象
????客戶端流:rpc RecordRoute(stream Point) returns (RouteSummary){}? 特點(diǎn):傳入多個(gè)對(duì)象,返回一個(gè)對(duì)象
????服務(wù)端流:rpc? ListFeatures(Rectangle) returns (stream Feature){}? 特點(diǎn):傳入一個(gè)對(duì)象,返回多個(gè)對(duì)象
????雙向流:rpc RouteChat(stream RouteNote) returns(stream RouteNote){}? 特點(diǎn):傳入多個(gè)對(duì)象,返回多個(gè)對(duì)象
四、RPC架構(gòu)

? ??RPC工作原理
五、gRPC使用場(chǎng)景
? ? 1.低延遲,高可用的分布式系統(tǒng)
? ? 2.移動(dòng)端與云服務(wù)端的通訊
? ? 3.使用protobuf,獨(dú)立語言的協(xié)議,支持多語言之間的通訊
? ? 4.可以分層擴(kuò)展,如:身份驗(yàn)證,負(fù)載均衡,日志記錄,監(jiān)控等
六、Q&A
1.RPC和http的區(qū)別
????最本質(zhì)區(qū)別,RPC主要是基于TCP/IP協(xié)議的,而HTTP服務(wù)主要是基于HTTP協(xié)議的,HTTP協(xié)議是在傳輸協(xié)議TCP之上的。
2.gRPC,Http/2,ProtoBuf三者之間有什么區(qū)別
? ? gRPC是一種通信框架,http/2是通信協(xié)議,gRPC是基于HTTP/2協(xié)議標(biāo)準(zhǔn)而設(shè)計(jì)。ProtoBuf是由Google開發(fā)的一種數(shù)據(jù)序列化協(xié)議(類似xml,json),gRPC使用ProtoBuf來定義服務(wù)。