<EbeneX/>
Architektur Architektur · Updated 11. März 2026

gRPC

Definition

Ein modernes RPC-Framework von Google für effiziente Service-zu-Service-Kommunikation – schneller als REST, mit starker Typisierung und Streaming-Support.

Experte 3 Min. Lesezeit EN: gRPC (gRPC Remote Procedure Calls)

Einfach erklärt

gRPC ist ein Framework für Remote Procedure Calls – du rufst Funktionen auf einem anderen Server auf, als wären sie lokal. Schneller als REST, weil es binäre Daten statt JSON verwendet.

REST vs. gRPC:

AspektRESTgRPC
FormatJSON (Text)Protocol Buffers (Binär)
ProtokollHTTP/1.1 oder 2HTTP/2
TypisierungOptional (OpenAPI)Pflicht (.proto)
StreamingUmständlichNative Unterstützung
PerformanceGutSehr gut
Browser-SupportJaEingeschränkt

Beispiel – User-Service:

// user.proto
syntax = "proto3";

service UserService {
  rpc GetUser(GetUserRequest) returns (User);
  rpc ListUsers(ListUsersRequest) returns (stream User);
}

message GetUserRequest {
  int32 id = 1;
}

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

Aufruf (Python):

response = stub.GetUser(GetUserRequest(id=123))
print(response.name)  # "Max Mustermann"

Technischer Deep Dive

Protocol Buffers

Schema definieren:

syntax = "proto3";

package myapp;

message Product {
  int32 id = 1;
  string name = 2;
  double price = 3;
  repeated string tags = 4;  // Array
  optional string description = 5;
  
  enum Status {
    UNKNOWN = 0;
    ACTIVE = 1;
    DISCONTINUED = 2;
  }
  Status status = 6;
}

Code generieren:

protoc --python_out=. --grpc_python_out=. product.proto

Generiert typsichere Klassen für Python, Go, Java, etc.

Streaming-Patterns

1. Unary (Standard):

rpc GetUser(Request) returns (Response);

Ein Request → Eine Response

2. Server Streaming:

rpc ListUsers(Request) returns (stream User);

Ein Request → Viele Responses

3. Client Streaming:

rpc UploadChunks(stream Chunk) returns (Response);

Viele Requests → Eine Response

4. Bidirectional Streaming:

rpc Chat(stream Message) returns (stream Message);

Viele Requests ↔ Viele Responses (gleichzeitig)

Server-Implementierung (Python)

import grpc
from concurrent import futures
import user_pb2
import user_pb2_grpc

class UserServicer(user_pb2_grpc.UserServiceServicer):
    def GetUser(self, request, context):
        user = db.get_user(request.id)
        if not user:
            context.set_code(grpc.StatusCode.NOT_FOUND)
            context.set_details('User not found')
            return user_pb2.User()
        return user_pb2.User(
            id=user.id,
            name=user.name,
            email=user.email
        )

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    user_pb2_grpc.add_UserServiceServicer_to_server(UserServicer(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

Client-Implementierung

import grpc
import user_pb2
import user_pb2_grpc

channel = grpc.insecure_channel('localhost:50051')
stub = user_pb2_grpc.UserServiceStub(channel)

# Unary Call
response = stub.GetUser(user_pb2.GetUserRequest(id=123))

# Server Streaming
for user in stub.ListUsers(user_pb2.ListUsersRequest()):
    print(user.name)

Error Handling

try:
    response = stub.GetUser(request)
except grpc.RpcError as e:
    if e.code() == grpc.StatusCode.NOT_FOUND:
        print("User not found")
    elif e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
        print("Timeout")
    else:
        print(f"Error: {e.details()}")

gRPC vs. REST – Wann was?

SzenarioEmpfehlung
Öffentliche APIREST
Browser-ClientREST / GraphQL
Interne MicroservicesgRPC
Mobile mit schlechtem NetzgRPC
Real-Time StreaminggRPC
Einfaches CRUDREST
Polyglotte ServicesgRPC

gRPC ist wie ein Direkttelefon zwischen Services: Statt Briefe zu schreiben (REST/JSON), rufst du direkt an – schneller, effizienter, und beide Seiten sprechen dieselbe Sprache (Protocol Buffers).

Binäres Protokoll (Protocol Buffers) statt JSON – kleiner und schneller

Starke Typisierung durch Schema-Definition (.proto-Dateien)

Bidirektionales Streaming für Echtzeit-Kommunikation

Microservices-Kommunikation

Interne Service-zu-Service-Calls mit niedriger Latenz

Mobile Backends

Effiziente Kommunikation bei begrenzter Bandbreite

Real-Time Streaming

Bidirektionale Streams für Chat, Gaming, IoT

Polyglotte Systeme

Services in verschiedenen Sprachen kommunizieren typsicher

Wann gRPC statt REST?

gRPC für: interne Services, Performance-kritisch, Streaming, polyglotte Systeme. REST für: öffentliche APIs, Browser-Clients, einfache CRUD, breite Kompatibilität.

Funktioniert gRPC im Browser?

Nicht direkt (HTTP/2 Einschränkungen). gRPC-Web ist ein Proxy-basierter Workaround. Für Browser-Clients ist REST/GraphQL oft praktischer.

Ist gRPC schwerer zu debuggen?

Ja, binäres Format ist nicht menschenlesbar. Tools wie grpcurl, BloomRPC und Logging helfen. JSON-Transcoding für Debugging möglich.

Wie verhält sich gRPC zu GraphQL?

Unterschiedliche Ziele: gRPC für Service-zu-Service (Performance). GraphQL für Client-zu-Server (Flexibilität). Können koexistieren.

Dein persönliches Share-Bild für Instagram – 1080×1080px, bereit zum Posten.