Introduction to gRPCs
Question: What is gRPC ?
Answer → gRPC is an open-source remote procedure call framework created by Google in 2016. It was a re-write of their internal RPC Infrastructure, that they used for years.
Question: What is an RPC ?
Answer → A gRPC is an popular implementation of RPC.
- A Local-Procedure Call is a function call within a process to execute some code.
- A Remote-Procedure Call enables one machine to invoke some code on another machine, as if it is local function call, from a User’s prospective.
Question: Who all uses gRPC as preferred choice of communication ?
Answer → Many Organisations have adopted gRPC as their preferred RPC mechanism to connect a large number of micro-services, running within and across data-centres.
Question: What makes gRPC so popular ?
Answer → There are many good reasons that gRPC is so popular :-
Reason #1.) gRPC has a thriving developer eco-system. It makes it very easy to develop production quality and type-safe APIs, that scale well.
Reason #2.) gRPC is high-performance out of the box.
Question: What is the core of the gRPC based eco-system ?
Answer → The core of this eco-system is the use of Protocol-Buffers, as its Data-Interchange format. Protocol-Buffer is a Language-agnostic and platform-agnostic mechanism for encoding structured data.
Question: What is the connection between gRPC and Protocol-Buffers ?
Answer → gRPC uses Protocol-Buffers, to encode and send data over the wire by default. While the gRPC could also support other encoding formats like JSON, Protocol-Buffers provides several advantages that make it encoding format of choice for gRPCs.
Question: Explain little bit more details about the Protocol-Buffers ?
Answer → Please find below, some key points of working with ProtoBuf :-
1.) Protocol-Buffers supports strongly-typed schema definitions. The structure of the data over the wire is defined in a proto file.
2.) Protocol-Buffers provide strong tooling support, to turn the schema defined in a proto-file into data-access-classes, for all popular programming languages.
3.) A gRPC service is also defined in a proto file, by specifying RPC method parameters and return types.
4.) The same tooling is used to generate the grpc-Client and gRPC-Server code, using the proto file. Developers uses these generated classes :-
- In the Client, to make RPC calls.
- In the Server, to fulfil the RPC requests.
Question: What is the advantage offered by Protocol-Buffers supporting so many Programming Languages
Answer → By supporting so many Programming Languages, the client and server can independently choose the PL and eco-system best suited for their own particular use-cases. This is traditionally not the case with most of the RPC-Frameworks.
Question: Why gRPC is highly performant ?
Answer → There are primarily two factors for gRPCs having high performance :-
Reason #1.) Protocol-Buffers is a very efficient binary encoding format. It’s much faster than JSONs.
Reason #2.) gRPC is built on top of Http/2, to provide a high-performance foundation at scale. It allows multiple stream of messages, over a single long-lived TCP-Connection.
Question: What is the primary benefit of using http/2 ?
Answer → There are many benefits of using HTTP/2, but the major one is Multiplexing, through the help of which, Http/2 allows the gRPC framework to handle many concurrent RPC calls, over a small number of TCP-connections between Client & Server.
Question: How does gRPC works ?
Answer → Let’s take our earlier example :-
- Client → The OrderService is the gRPC client.
- Server → The PaymentService is the gRPC server.
Step #1.) When the OrderService makes a gRPC call to the Payment-Service, it invokes the client-code generated by gRPC tooling at build time. This generated client-code is called as Client-Stub.
Step #2.) gRPC encodes the data passed to the Client-Stub into the Protocol-Buffers.
Step #3.) gRPC then sends the encoded-data to the Low-level Transport Layer.
Step #4.) gRPC sends the data over the network, as a stream of Http/2 data-frames. Because of Binary-Encoding and Network Optimisation, gRPC is said to be 5 times faster than JSONs.
Step #5.) The PaymentService receives the packets from Network, decodes-them and invokes the server-application.
Step #6.) The result this returned from the Server-Application, gets encoded into Protocol-Buffers and sent back to the Transport Layer.
Step #7.) The OrderService receives the packets, decodes them and sends the result to the Client-Application.
Question: Why there is no wide-spread reach of gRPC ?
Answer → One reason is that, gRPCs relies on lower-level access to HTTP/2 primitives.
No Browser currently provides the level of control, required over web requests to support a gRPC Client.
Question: Is it possible to make gRPC calls from a Browser ?
Answer → Yes, it is very much possible, with the help of Proxies. This technology is called as gRPC-Web.
Question: When should we make use of gRPCs ?
Answer → gRPCs is the inter-service communication mechanism of choice between the micro-services in a Data-Centre.
- It’s broad support for many Programming Languages allows services to choose their own language and developer ecosystems well suited for their own use-cases.
- We also see increasing use of gRPCs in the native mobile clients. It’s efficiency and performance makes a lot of sense in the energy and bandwidth-constrained environments like that of Mobile-Devices.
That’s all in this blog. If you liked reading it, do clap on this page. We shall see you in next document.