[Go,Python]gRPC体験
gRPCとは?
gRPCはグーグルが開発したリモートプロシージャ呼び出し(RPC)システムである.
gRPCはHTP/2を用いてデータ転送を行い、IDL(インタフェース記述言語)をProtocal Bufferとして使用する.さらに、認証、双方向ストリーム管理、ブロック、非ブロックバインドなど多くの機能を提供します.
RPC(Remote procedure call)
分散システムでは、1つのプログラムが実行中に別のアドレス空間(別のプロセス、別のコンピュータ...)を有する.実行されるプロセス(サブルーチン)をRPCと呼ぶ.
RPCはrequest-responseプロトコルを使用します.元のプログラムはrequstを別のアドレス空間に送信し、この要求を受信したサーバはプロセスを実行し、結果を元のプログラム(応答)に再送信します.
これらRPCの実施.
HTTP/2
HTTP/1.1の欠点では、プロトコルの性能を向上させた伝送プロトコルがある.既存のHTTP/2は以下の改善点を有する.
これは、
protocol buffers
protocolbuffersはグーグルが公開したプラットフォーム間フォーマットで、IDLの一種です.構造化データを言語、プラットフォーム(データを格納可能な形式に変換する)に中立的にシーケンス化する方法を制限します.
簡単です。proto作成例
syntax = "proto3"; // proto3, proto2 중에 사용할 버전 명시
package proto_test; // package 이름 명시
service RpcService { // RPC service 이름 정의(CamelCase with an initial capital)
rpc 함수명 (입력Message) returns (출력Message);
}
message 입력Message {
string name = 1;
}
message 출력Message {
string code = 1;
string name = 2;
string symbol = 3;
}
IDL(Interface Definition Language)
IDLは、異なるソフトウェアコンポーネント間のデータ構造およびインタフェースを記述する記述言語である.
IDLは、いずれの言語にも限定されない中立的な方法でインタフェースを表現し、同じ言語を使用しないソフトウェアコンポーネント間の通信を可能にする.
gRPC構成
gRPCは、gRPCサーバとgRPCクライアント(stub)から構成される.
gRPCサーバ
サービスの関数はサーバの言語で定義されているため、stubが要求を受信すると実行されます.
gRPCクライアント(stub)
定義されたprotoファイルと一致する変換関数があります.サービス内の関数を呼び出す場合は、stub言語を使用して生成されたデータをシーケンス化し、gRPCサーバに送信し、結果値を逆シーケンス化します.
gRPC compile
異なる言語のgRPCコンパイラを通じて.protoファイルは、各言語に適したファイルに変換できます.まず.protoファイルを作成すると、共通のファイルが作成されます.protoファイルを使用して、サーバとクライアントでそれぞれコンパイルします.
1) .protoファイルの作成
syntax = "proto3";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
2) server compile
> protoc --proto_path=<.proto파일의 dir경로> \
--go_out=plugins=grpc:<정의한 package이름> \
.proto파일
3) client compile
> python -m grpc_tools.protoc \
--proto_path <.proto파일의 dir경로> \
--python_out=<출력 .py파일 경로> \
--grpc_python_out=<출력 .py파일 경로> \
<.proto파일경로>
gRPC life cycle
Uray(一方向)RPC
これは最も簡単なRPCです.Cilentはリクエストを発行し,サーバがリクエストを受信すると結果値を返す構造である.
Server streaming RPC
Urayと似ていますが、サーバがストリーミングメッセージを応答として送信する点が異なります.streamingメッセージがすべて転送されると、サーバはサーバのstatusまたは他のmetaデータを追加的に転送します.
Client streaming RPC
Urayと似ていますが、Cilentはstreamingメッセージを要求することによって異なります.streamingメッセージがすべて受信されると、サーバは応答(必須x)を送信します.
Bidirectional streaming RPC
クライアントは特定の関数を呼び出し、Sercerがクライアントメタデータ、メソッド名、および締め切り日を受信すると起動します.サーバとクライアントは、ストリームデータを同時に交換できます.この2つのストリームは独立しています.
Example
Reference
Reference
この問題について([Go,Python]gRPC体験), 我々は、より多くの情報をここで見つけました https://velog.io/@curiosity806/Golang-gRPC-맛보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol