image de chargement
Retour au glossaire

gRPC - Framework RPC haute performance pour microservices

Framework RPC open-source développé par Google utilisant Protocol Buffers pour des communications inter-services performantes et typées.

Mis à jour le 5 janvier 2026

gRPC (gRPC Remote Procedure Call) est un framework RPC moderne, open-source et haute performance initialement développé par Google. Basé sur HTTP/2 et Protocol Buffers, il permet aux applications de communiquer entre elles de manière efficace, typée et multiplateforme. gRPC s'est imposé comme standard pour les architectures microservices grâce à sa performance supérieure, son support natif du streaming bidirectionnel et sa génération automatique de code client/serveur.

Fondements techniques

  • Utilise HTTP/2 comme protocole de transport, offrant multiplexage, compression des en-têtes et connexions persistantes
  • Protocol Buffers (protobuf) comme mécanisme de sérialisation par défaut, générant des payloads binaires compacts
  • Définition d'API via fichiers .proto créant un contrat fortement typé entre client et serveur
  • Support natif de 4 modes de communication : unaire, streaming serveur, streaming client, streaming bidirectionnel

Avantages stratégiques

  • Performance exceptionnelle : sérialisation binaire 3-10x plus rapide que JSON, latence réduite grâce à HTTP/2
  • Typage fort et génération de code : élimination des erreurs à l'exécution, autocomplétion IDE native
  • Support polyglotte : bibliothèques officielles pour 11+ langages (Go, Java, Python, C++, C#, Node.js, etc.)
  • Streaming bidirectionnel natif : idéal pour chat, notifications temps réel, transferts de données volumineuses
  • Intégration native d'authentification, load balancing, timeout et retry policies
  • Écosystème mature avec intercepteurs, middleware, observabilité (tracing, métriques) intégrée

Exemple concret de service gRPC

user_service.proto
syntax = "proto3";

package user;

service UserService {
  // Appel unaire simple
  rpc GetUser(GetUserRequest) returns (UserResponse);
  
  // Streaming serveur
  rpc StreamUsers(StreamUsersRequest) returns (stream UserResponse);
  
  // Streaming bidirectionnel
  rpc Chat(stream ChatMessage) returns (stream ChatMessage);
}

message GetUserRequest {
  string user_id = 1;
}

message UserResponse {
  string user_id = 1;
  string name = 2;
  string email = 3;
  int64 created_at = 4;
}

message StreamUsersRequest {
  int32 limit = 1;
}

message ChatMessage {
  string user_id = 1;
  string content = 2;
  int64 timestamp = 3;
}
server.ts
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';

const packageDefinition = protoLoader.loadSync('user_service.proto');
const proto = grpc.loadPackageDefinition(packageDefinition).user;

const users = new Map([
  ['123', { user_id: '123', name: 'Alice', email: 'alice@example.com', created_at: Date.now() }]
]);

const userService = {
  GetUser: (call: any, callback: any) => {
    const user = users.get(call.request.user_id);
    if (user) {
      callback(null, user);
    } else {
      callback({ code: grpc.status.NOT_FOUND, message: 'User not found' });
    }
  },
  
  StreamUsers: (call: any) => {
    users.forEach(user => call.write(user));
    call.end();
  }
};

const server = new grpc.Server();
server.addService((proto as any).UserService.service, userService);
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
  console.log('gRPC server running on port 50051');
});

Mise en œuvre en production

  1. Définir le contrat d'API dans un fichier .proto avec messages et services clairement documentés
  2. Générer le code client et serveur via protoc pour chaque langage cible (protoc --go_out, --js_out, etc.)
  3. Implémenter la logique métier côté serveur en respectant les signatures générées
  4. Configurer les intercepteurs pour logging, authentification (JWT, mTLS), monitoring et gestion d'erreurs
  5. Déployer derrière un load balancer compatible gRPC (Envoy, NGINX, Traefik) avec health checks
  6. Mettre en place la découverte de services (Consul, etcd) pour résolution dynamique d'endpoints
  7. Activer la réflexion gRPC en développement pour l'introspection avec grpcurl ou BloomRPC
  8. Monitorer avec des métriques OpenTelemetry/Prometheus (latence P50/P95/P99, taux d'erreur par méthode)

Conseil Pro

Pour des APIs publiques ou mixtes, envisagez grpc-gateway qui génère automatiquement un proxy REST/JSON depuis vos définitions .proto. Vous obtenez ainsi une API gRPC haute performance pour les microservices internes ET une API REST compatible pour les clients web/mobile, le tout depuis une seule source de vérité.

Outils et écosystème

  • Protocol Buffers Compiler (protoc) : génération de code multilangage depuis fichiers .proto
  • grpcurl : client CLI pour tester services gRPC (équivalent curl pour gRPC)
  • BloomRPC / Postman : clients GUI pour développement et test d'APIs gRPC
  • Envoy Proxy : service mesh avec support gRPC avancé (retries, circuit breaking, observabilité)
  • grpc-gateway : génération automatique de proxies REST/JSON depuis APIs gRPC
  • Buf : gestionnaire moderne de Protocol Buffers avec linting, breaking change detection et registry
  • gRPC Health Checking Protocol : standard pour health checks dans Kubernetes/Docker
  • OpenTelemetry gRPC instrumentation : tracing distribué et métriques automatiques

gRPC représente une évolution majeure dans la communication inter-services, particulièrement adaptée aux architectures microservices exigeant performance, fiabilité et typage fort. Son adoption par Google, Netflix, Square et des milliers d'entreprises témoigne de sa maturité. En combinant la rigueur des contrats Protocol Buffers, la performance d'HTTP/2 et un écosystème riche, gRPC réduit significativement la latence réseau (jusqu'à 70% vs REST/JSON), les bugs d'intégration et le temps de développement grâce à la génération de code. Pour les équipes gérant des systèmes distribués critiques, gRPC n'est plus une option mais un standard de facto.

L'argentestdéjàsurlatable.

En 1 heure, découvrez exactement combien vous perdez et comment le récupérer.