Sobes.tech
Middle

Wat is gRPC?

sobes.tech AI

Antwoord van AI

gRPC is een high-performance, open source framework voor Remote Procedure Calls (RPC), ontwikkeld door Google, voor het maken van gedistribueerde applicaties en microservices. Het is gebaseerd op het HTTP/2 protocol voor transport en gebruikt Protocol Buffers (Protobuf) als interfacebeschrijftaal en serialisatie-mechanisme.

Belangrijkste kenmerken van gRPC:

  • HTTP/2: Maakt gebruik van de voordelen van HTTP/2, zoals multiplexing van verzoeken, header-compressie en bidirectionele streaming, wat zorgt voor betere prestaties in vergelijking met traditionele client-server protocollen over HTTP/1.1.
  • Protocol Buffers (Protobuf): Een gegevensbeschrijftaal die het mogelijk maakt gegevens te structureren en code te genereren voor serialisatie en deserialisatie in verschillende talen. Protobuf is efficiënt in berichtgrootte en verwerkingssnelheid.
  • Streaming: Ondersteunt vier soorten streaming:
    • Unary: Klassieke RPC (één verzoek - één antwoord).
    • Server-side streaming: De client stuurt een verzoek, de server antwoordt met een stroom van berichten.
    • Client-side streaming: De client stuurt een stroom van berichten, de server antwoordt met één bericht.
    • Bidirectionele streaming: Client en server wisselen gelijktijdig berichtenstromen uit.
  • Meertaligheid: Met Protobuf genereert gRPC client- en servercode voor meerdere programmeertalen.
  • Codegeneratie: Automatisch genereren van code voor client en server op basis van .proto-bestanden, wat handmatig coderen vermindert.
  • Metagegevens: Ondersteuning voor het verzenden van metagegevens (sleutel-waarde paren) samen met verzoeken en antwoorden.
  • Interceptors: Mogelijkheid om verzoeken en antwoorden te onderscheppen voor het uitvoeren van extra logica (bijvoorbeeld logging, authenticatie).

Hoe werkt gRPC:

  1. De API-dienst wordt gedefinieerd met behulp van de Protocol Buffers-taal in een .proto-bestand.
  2. Client- en servercode wordt gegenereerd in de gewenste taal met behulp van de protoc compiler.
  3. De server implementeert de gegenereerde service-interface.
  4. De client gebruikt de gegenereerde code om de service-methoden op de server aan te roepen.

Voorbeeld van een .proto-bestand:

syntax = "proto3";

package greeting;

// Definitie van de service
service Greeter {
  // Unaire RPC-methode
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Server-side streaming-methode
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definitie van berichten
message HelloRequest {
  string name = 1; // Veld met volgnummer 1
}

message HelloReply {
  string message = 1;
}

Vergelijking met REST (dat JSON/XML gebruikt):

Kenmerk gRPC (Protobuf) REST (JSON/XML)
Transportprotocol HTTP/2 HTTP/1.1 of HTTP/2
Gegevensserialisatie Protobuf (binair) JSON, XML (tekst)
Prestaties Hoog (binair formaat, HTTP/2) Lager (tekstformaat, overhead)
API beschrijvingstaal Protocol Buffers (.proto) OpenAPI/Swagger
API-contract Strikt, gebaseerd op Protobuf Minder strikt
Typegegevens Strikt (gedefinieerd in .proto) Zwak (runtime controle)
Codegeneratie Ingebouwd Vereist externe tools
Streaming Ingebouwd Vereist extra mechanismen (bijvoorbeeld WebSockets)
Leesbaarheid Moeilijk zonder .proto te lezen Gemakkelijk voor mensen

gRPC is zeer geschikt voor communicatie tussen services in gedistribueerde systemen, microservices, grote datavolumes, waar prestaties en strikte API-contracten belangrijk zijn.