摘要:原文地址帶入及相關介紹項目地址作為開篇章,將會介紹相關的一些知識。
原文地址:帶入gRPC:gRPC及相關介紹
項目地址:go-grpc-example
作為開篇章,將會介紹 gRPC 相關的一些知識。簡單來講 gRPC 是一個 基于 HTTP/2 協議設計的 RPC 框架,它采用了 Protobuf 作為 IDL
你是否有過疑惑,它們都是些什么?本文將會介紹一些常用的知識和概念,更詳細的會給出手冊地址去深入
一、RPC 什么是 RPCRPC 代指遠程過程調用(Remote Procedure Call),它的調用包含了傳輸協議和編碼(對象序列號)協議等等。允許運行于一臺計算機的程序調用另一臺計算機的子程序,而開發人員無需額外地為這個交互作用編程
實際場景:有兩臺服務器,分別是A、B。在 A 上的應用 C 想要調用 B 服務器上的應用 D,它們可以直接本地調用嗎?
答案是不能的,但走 RPC 的話,十分方便。因此常有人稱使用 RPC,就跟本地調用一個函數一樣簡單
我認為,一個完整的 RPC 框架,應包含負載均衡、服務注冊和發現、服務治理等功能,并具有可拓展性便于流量監控系統等接入
那么它才算完整的,當然了。有些較單一的 RPC 框架,通過組合多組件也能達到這個標準
你認為呢?
常見 RPC 框架gRPC
Thrift
Rpcx
Dubbo
比較一下跨語言 | 多 IDL | 服務治理 | 注冊中心 | 服務管理 | |
---|---|---|---|---|---|
gRPC | √ | × | × | × | × |
Thrift | √ | × | × | × | × |
Rpcx | × | √ | √ | √ | √ |
Dubbo | × | √ | √ | √ | √ |
簡單、通用、安全、效率
RPC 可以基于 HTTP 嗎RPC 是代指遠程過程調用,是可以基于 HTTP 協議的
肯定會有人說效率優勢,我可以告訴你,那是基于 HTTP/1.1 來講的,HTTP/2 優化了許多問題(當然也存在新的問題),所以你看到了本文的主題 gRPC
二、Protobuf 介紹Protocol Buffers 是一種與語言、平臺無關,可擴展的序列化結構化數據的方法,常用于通信協議,數據存儲等等。相較于 JSON、XML,它更小、更快、更簡單,因此也更受開發人員的青瞇
語法syntax = "proto3"; service SearchService { rpc Search (SearchRequest) returns (SearchResponse); } message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } message SearchResponse { ... }
1、第一行(非空的非注釋行)聲明使用 proto3 語法。如果不聲明,將默認使用 proto2 語法。同時我建議用 v2 還是 v3,都應當聲明其使用的版本
2、定義 SearchService RPC 服務,其包含 RPC 方法 Search,入參為 SearchRequest 消息,出參為 SearchResponse 消息
3、定義 SearchRequest、SearchResponse 消息,前者定義了三個字段,每一個字段包含三個屬性:類型、字段名稱、字段編號
4、Protobuf 編譯器會根據選擇的語言不同,生成相應語言的 Service Interface Code 和 Stubs
最后,這里只是簡單的語法介紹,詳細的請右拐 Language Guide (proto3)
數據類型.proto Type | C++ Type | Java Type | Go Type | PHP Type |
---|---|---|---|---|
double | double | double | float64 | float |
float | float | float | float32 | float |
int32 | int32 | int | int32 | integer |
int64 | int64 | long | int64 | integer/string |
uint32 | uint32 | int | uint32 | integer |
uint64 | uint64 | long | uint64 | integer/string |
sint32 | int32 | int | int32 | integer |
sint64 | int64 | long | int64 | integer/string |
fixed32 | uint32 | int | uint32 | integer |
fixed64 | uint64 | long | uint64 | integer/string |
sfixed32 | int32 | int | int32 | integer |
sfixed64 | int64 | long | int64 | integer/string |
bool | bool | boolean | bool | boolean |
string | string | String | string | string |
bytes | string | ByteString | []byte | string |
刪除原始值字段的字段存在邏輯
刪除 required 字段
刪除 optional 字段,默認就是
刪除 default 字段
刪除擴展特性,新增 Any 類型來替代它
刪除 unknown 字段的支持
新增 JSON Mapping
新增 Map 類型的支持
修復 enum 的 unknown 類型
repeated 默認使用 packed 編碼
引入了新的語言實現(C#,JavaScript,Ruby,Objective-C)
以上是日常涉及的常見功能,如果還想詳細了解可閱讀 Protobuf Version 3.0.0
相較 Protobuf,為什么不使用XML?更簡單
數據描述文件只需原來的1/10至1/3
解析速度是原來的20倍至100倍
減少了二義性
生成了更易使用的數據訪問類
三、gRPC 介紹gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計
多語言C++
C#
Dart
Go
Java
Node.js
Objective-C
PHP
Python
Ruby
特點1、HTTP/2
2、Protobuf
3、客戶端、服務端基于同一份 IDL
4、移動網絡的良好支持
5、支持多語言
概覽 講解1、客戶端(gRPC Sub)調用 A 方法,發起 RPC 調用
2、對請求信息使用 Protobuf 進行對象序列化壓縮(IDL)
3、服務端(gRPC Server)接收到請求后,解碼請求體,進行業務邏輯處理并返回
4、對響應結果使用 Protobuf 進行對象序列化壓縮(IDL)
5、客戶端接受到服務端響應,解碼請求體。回調被調用的 A 方法,喚醒正在等待響應(阻塞)的客戶端調用并返回響應結果
示例在這一小節,將簡單的給大家展示 gRPC 的客戶端和服務端的示例代碼,希望大家先有一個基礎的印象,將會在下一章節詳細介紹
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108548.html
摘要:帶入及相關介紹原文地址帶入及相關介紹項目地址作為開篇章,將會介紹相關的一些知識。 帶入gRPC:gRPC及相關介紹 原文地址:帶入gRPC:gRPC及相關介紹 項目地址:go-grpc-example 作為開篇章,將會介紹 gRPC 相關的一些知識。簡單來講 gRPC 是一個 基于 HTTP/2 協議設計的 RPC 框架,它采用了 Protobuf 作為 IDL 你是否有過疑惑,它們都...
摘要:帶入原文地址帶入項目地址前言本章節將使用來編寫和,讓其互相通訊。 帶入gRPC:gRPC Client and Server 原文地址:帶入gRPC:gRPC Client and Server 項目地址:go-grpc-example 前言 本章節將使用 Go 來編寫 gRPC Server 和 Client,讓其互相通訊。在此之上會使用到如下庫: google.golang.or...
摘要:原文地址帶入項目地址前言本章節將使用來編寫和,讓其互相通訊。 原文地址:帶入gRPC:gRPC Client and Server 項目地址:go-grpc-example 前言 本章節將使用 Go 來編寫 gRPC Server 和 Client,讓其互相通訊。在此之上會使用到如下庫: google.golang.org/grpc github.com/golang/protobu...
摘要:帶入原文地址帶入項目地址前言在前面的章節中,已經介紹了的基本用法。今天將介紹的用法,這一個必備技巧。第一個形參為父上下文,第二個形參為調整的截止時間。實際上是對于的封裝返回的具體錯誤碼,若為非法,則直接返回而在端,由于已經設置了截止時間。 帶入gRPC:gRPC Deadlines 原文地址:帶入gRPC:gRPC Deadlines項目地址:https://github.com/ED...
摘要:帶入原文地址帶入項目地址前言本章節將介紹的流式,分為三種類型服務器端流式客戶端流式雙向流式流任何技術,因為有痛點,所以才有了存在的必要性。這一次性涉及的數據量確實大在同步完成后,也有人馬上會去查閱數據,為了新的一天籌備。 帶入gRPC:gRPC Streaming, Client and Server 原文地址:帶入gRPC:gRPC Streaming, Client and Ser...
閱讀 2212·2021-09-30 09:47
閱讀 960·2021-08-27 13:01
閱讀 2959·2019-08-30 15:54
閱讀 3685·2019-08-30 15:53
閱讀 825·2019-08-29 14:07
閱讀 711·2019-08-28 18:16
閱讀 795·2019-08-26 18:37
閱讀 1406·2019-08-26 13:27