成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

帶入gRPC:gRPC及相關(guān)介紹

AJie / 2925人閱讀

摘要:帶入及相關(guān)介紹原文地址帶入及相關(guān)介紹項目地址作為開篇章,將會介紹相關(guān)的一些知識。

帶入gRPC:gRPC及相關(guān)介紹

原文地址:帶入gRPC:gRPC及相關(guān)介紹

項目地址:go-grpc-example

作為開篇章,將會介紹 gRPC 相關(guān)的一些知識。簡單來講 gRPC 是一個 基于 HTTP/2 協(xié)議設(shè)計的 RPC 框架,它采用了 Protobuf 作為 IDL

你是否有過疑惑,它們都是些什么?本文將會介紹一些常用的知識和概念,更詳細(xì)的會給出手冊地址去深入

一、RPC 什么是 RPC

RPC 代指遠(yuǎn)程過程調(diào)用(Remote Procedure Call),它的調(diào)用包含了傳輸協(xié)議和編碼(對象序列號)協(xié)議等等。允許運行于一臺計算機(jī)的程序調(diào)用另一臺計算機(jī)的子程序,而開發(fā)人員無需額外地為這個交互作用編程

實際場景:

有兩臺服務(wù)器,分別是A、B。在 A 上的應(yīng)用 C 想要調(diào)用 B 服務(wù)器上的應(yīng)用 D,它們可以直接本地調(diào)用嗎?
答案是不能的,但走 RPC 的話,十分方便。因此常有人稱使用 RPC,就跟本地調(diào)用一個函數(shù)一樣簡單

RPC 框架

我認(rèn)為,一個完整的 RPC 框架,應(yīng)包含負(fù)載均衡、服務(wù)注冊和發(fā)現(xiàn)、服務(wù)治理等功能,并具有可拓展性便于流量監(jiān)控系統(tǒng)等接入
那么它才算完整的,當(dāng)然了。有些較單一的 RPC 框架,通過組合多組件也能達(dá)到這個標(biāo)準(zhǔn)

你認(rèn)為呢?

常見 RPC 框架

gRPC

Thrift

Rpcx

Dubbo

比較一下
跨語言 多 IDL 服務(wù)治理 注冊中心 服務(wù)管理
gRPC × × × ×
Thrift × × × ×
Rpcx ×
Dubbo ×
為什么要 RPC

簡單、通用、安全、效率

RPC 可以基于 HTTP 嗎

RPC 是代指遠(yuǎn)程過程調(diào)用,是可以基于 HTTP 協(xié)議的

肯定會有人說效率優(yōu)勢,我可以告訴你,那是基于 HTTP/1.1 來講的,HTTP/2 優(yōu)化了許多問題(當(dāng)然也存在新的問題),所以你看到了本文的主題 gRPC

二、Protobuf 介紹

Protocol Buffers 是一種與語言、平臺無關(guān),可擴(kuò)展的序列化結(jié)構(gòu)化數(shù)據(jù)的方法,常用于通信協(xié)議,數(shù)據(jù)存儲等等。相較于 JSON、XML,它更小、更快、更簡單,因此也更受開發(fā)人員的青瞇

語法
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 語法。如果不聲明,將默認(rèn)使用 proto2 語法。同時我建議用 v2 還是 v3,都應(yīng)當(dāng)聲明其使用的版本

2、定義 SearchService RPC 服務(wù),其包含 RPC 方法 Search,入?yún)?SearchRequest 消息,出參為 SearchResponse 消息

3、定義 SearchRequestSearchResponse 消息,前者定義了三個字段,每一個字段包含三個屬性:類型、字段名稱、字段編號

4、Protobuf 編譯器會根據(jù)選擇的語言不同,生成相應(yīng)語言的 Service Interface Code 和 Stubs

最后,這里只是簡單的語法介紹,詳細(xì)的請右拐 Language Guide (proto3)

數(shù)據(jù)類型
.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
v2 和 v3 主要區(qū)別

刪除原始值字段的字段存在邏輯

刪除 required 字段

刪除 optional 字段,默認(rèn)就是

刪除 default 字段

刪除擴(kuò)展特性,新增 Any 類型來替代它

刪除 unknown 字段的支持

新增 JSON Mapping

新增 Map 類型的支持

修復(fù) enum 的 unknown 類型

repeated 默認(rèn)使用 packed 編碼

引入了新的語言實現(xiàn)(C#,JavaScript,Ruby,Objective-C)

以上是日常涉及的常見功能,如果還想詳細(xì)了解可閱讀 Protobuf Version 3.0.0

相較 Protobuf,為什么不使用XML?

更簡單

數(shù)據(jù)描述文件只需原來的1/10至1/3

解析速度是原來的20倍至100倍

減少了二義性

生成了更易使用的數(shù)據(jù)訪問類

三、gRPC 介紹

gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設(shè)計

多語言

C++

C#

Dart

Go

Java

Node.js

Objective-C

PHP

Python

Ruby

特點

1、HTTP/2

2、Protobuf

3、客戶端、服務(wù)端基于同一份 IDL

4、移動網(wǎng)絡(luò)的良好支持

5、支持多語言

概覽

講解

1、客戶端(gRPC Sub)調(diào)用 A 方法,發(fā)起 RPC 調(diào)用

2、對請求信息使用 Protobuf 進(jìn)行對象序列化壓縮(IDL)

3、服務(wù)端(gRPC Server)接收到請求后,解碼請求體,進(jìn)行業(yè)務(wù)邏輯處理并返回

4、對響應(yīng)結(jié)果使用 Protobuf 進(jìn)行對象序列化壓縮(IDL)

5、客戶端接受到服務(wù)端響應(yīng),解碼請求體?;卣{(diào)被調(diào)用的 A 方法,喚醒正在等待響應(yīng)(阻塞)的客戶端調(diào)用并返回響應(yīng)結(jié)果

示例

在這一小節(jié),將簡單的給大家展示 gRPC 的客戶端和服務(wù)端的示例代碼,希望大家先有一個基礎(chǔ)的印象,將會在下一章節(jié)詳細(xì)介紹

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29440.html

相關(guān)文章

  • 帶入gRPCgRPC相關(guān)介紹

    摘要:原文地址帶入及相關(guān)介紹項目地址作為開篇章,將會介紹相關(guān)的一些知識。 原文地址:帶入gRPC:gRPC及相關(guān)介紹 項目地址:go-grpc-example 作為開篇章,將會介紹 gRPC 相關(guān)的一些知識。簡單來講 gRPC 是一個 基于 HTTP/2 協(xié)議設(shè)計的 RPC 框架,它采用了 Protobuf 作為 IDL 你是否有過疑惑,它們都是些什么?本文將會介紹一些常用的知識和概念,更詳...

    y1chuan 評論0 收藏0
  • 帶入gRPCgRPC Client and Server

    摘要:帶入原文地址帶入項目地址前言本章節(jié)將使用來編寫和,讓其互相通訊。 帶入gRPC:gRPC Client and Server 原文地址:帶入gRPC:gRPC Client and Server 項目地址:go-grpc-example 前言 本章節(jié)將使用 Go 來編寫 gRPC Server 和 Client,讓其互相通訊。在此之上會使用到如下庫: google.golang.or...

    TZLLOG 評論0 收藏0
  • 帶入gRPCgRPC Client and Server

    摘要:原文地址帶入項目地址前言本章節(jié)將使用來編寫和,讓其互相通訊。 原文地址:帶入gRPC:gRPC Client and Server 項目地址:go-grpc-example 前言 本章節(jié)將使用 Go 來編寫 gRPC Server 和 Client,讓其互相通訊。在此之上會使用到如下庫: google.golang.org/grpc github.com/golang/protobu...

    ivydom 評論0 收藏0
  • 帶入gRPCgRPC Deadlines

    摘要:帶入原文地址帶入項目地址前言在前面的章節(jié)中,已經(jīng)介紹了的基本用法。今天將介紹的用法,這一個必備技巧。第一個形參為父上下文,第二個形參為調(diào)整的截止時間。實際上是對于的封裝返回的具體錯誤碼,若為非法,則直接返回而在端,由于已經(jīng)設(shè)置了截止時間。 帶入gRPC:gRPC Deadlines 原文地址:帶入gRPC:gRPC Deadlines項目地址:https://github.com/ED...

    crossoverJie 評論0 收藏0
  • 帶入gRPCgRPC Streaming, Client and Server

    摘要:帶入原文地址帶入項目地址前言本章節(jié)將介紹的流式,分為三種類型服務(wù)器端流式客戶端流式雙向流式流任何技術(shù),因為有痛點,所以才有了存在的必要性。這一次性涉及的數(shù)據(jù)量確實大在同步完成后,也有人馬上會去查閱數(shù)據(jù),為了新的一天籌備。 帶入gRPC:gRPC Streaming, Client and Server 原文地址:帶入gRPC:gRPC Streaming, Client and Ser...

    wayneli 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<