gRPC adoption has grown steadily since Google open-sourced it in 2015. In 2022 it is common in microservices architectures for internal service communication. The production realities differ from the getting-started tutorial.
Why gRPC over REST for internal services
gRPC uses Protocol Buffers for serialisation (faster than JSON, smaller wire format) and HTTP/2 for transport (multiplexed connections, bidirectional streaming). For high-frequency internal service communication, the combination produces measurably lower latency and higher throughput than REST/JSON. The strongly typed contract from the .proto definition reduces integration errors.
The browser compatibility limitation
gRPC requires HTTP/2 at the transport layer in a way that browser-based clients cannot use directly (browsers cannot access HTTP/2 trailers needed for gRPC). The solution is gRPC-Web, a protocol that works in browsers via a proxy, or gRPC transcoding that translates between gRPC and HTTP/JSON. For internal microservice communication, this is not a constraint. For public APIs, REST remains the practical choice for browser clients.
Streaming patterns
gRPC's streaming capabilities enable patterns that are awkward in REST: server streaming for pushing updates to clients without polling, client streaming for uploading data in chunks, and bidirectional streaming for real-time data exchange. These patterns are powerful but require careful design: managing backpressure, handling connection drops gracefully, and implementing client-side reconnection logic add complexity over request-response patterns.
Observability with gRPC
Standard HTTP observability tools do not work with gRPC out of the box. gRPC-specific observability requires: interceptors on both client and server to record call duration and status codes, propagation of trace context through gRPC metadata, and tools that understand protobuf-serialised payloads. OpenTelemetry's gRPC instrumentation handles the basics. For production debugging of complex gRPC call chains, distributed tracing is essential.