gRPC

gRPC Remote Procedure Calls

Architektur von gRPC

Model

Verwendung

Netflix

At Netflix, we heavily use gRPC for the purpose of backend to backend communication.
https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518
— Netflix

Andere

  • Cockroach LABS

  • Cisco

  • Square

Protobuf

Protocol Buffers

Wozu verwendet man Protobuf

Protobuf ist eine binäre Serialisierungssprache, die sprachunabhängig ist.

proto workflow

Typen

Protobuf unterstützt alle primitiven Datentypen.

Zusätzlich können eigene Datentypen (messages) erstellt werden. Innerhalb dieser Typen muss die Position der benutzen Eigenschaften definiert werden.

message MyMessage {
  int32 a = 1;
  string b = 2;
}

Listen

Mit dem repeated Keyword kann man eine Liste von Messages erstellen.

message Person {
  string name = 1;
  int32 id = 2;
  repeated string hobbies = 3;
}

Proto-File Aufbau

Proto-File Aufbau

Syntax

syntax = "proto3";

Als Erstes muss eine Protobuf Version definiert werden, wobei proto3 der Standard ist.

Proto-File Aufbau

Package

syntax = "proto3";

package my_package;

Optional kann ein Package angegeben werden, falls es bei mehreren Files gleiche Message Names gibt.

Proto-File Aufbau

Options

Mit dem option Keyword können compile flags befüllt werden.

syntax = "proto3";

option java_package = "com.example";

Proto-File Aufbau

Services

syntax = "proto3";

option java_package = "com.example";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

Mit einem Service definiert man alle Methoden (Schnittstellen), die man in gRPC verwenden möchte.

Methoden Typen

Methoden Typen

Unary

rpc SayHello(HelloRequest) returns (HelloResponse);

Methoden Typen

Server Side Streaming

rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);

Methoden Typen

Client Side Streaming

rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);

Methoden Typen

Bidirectional Streaming

rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

gRPC-Web

gRPC-Web ist keine gRPC Implementation für Webbrowser. Es ist ein alternatives protokoll was mit einem http wrapper wieder zu gRPC umgewandelt werden muss.