GRPC

  • Google Remote Procedural Call

  • framework for implementing RPC APIs via HTTP/2

  • Uses a compact schema for data

    • compile to different languages

  • Takes advantage of HTTP2

  • similar to other rpc protocols which have a shared schema like cobra

Why

  • There are many protocols out there

  • For every protocol you need to build a client library to communicate

    • this is hard to update

  • REST has a lot of hidden meta data so not as lightweight

  • In Grpc everything is hidden,

Uses

  • Unary RPC

    • request response

  • Server streaming RPC

    • server side streaming

    • ie logging, progress of job, retrieving a large file

  • Client streaming RPC

    • sending a large file to the server

  • Bidirectional streaming RPC

    • chat

  • inter microservice communication

    • multi language apps communicating

  • For internal APIs where you don’t have to force technology choices on clients

  • When efficient communication is a goal

  • Real-time communication services where you deal with streaming calls

Pros

  • fast and compact

    • messages smaller than json

  • one client library

    • consistent usage

    • Has many features

  • Cancel a http2 request

  • TLS needs to be used

  • Has automated code generation from the schema

Issues

  • Stuck to http2

  • Uses binary format (protobuff)

    • hard to inspect, not readable

    • auditing needs to be done before conversion

    • To analyze payloads, perform debugging, and write manual requests, devs must use extra tools like gRPC command line tool and server reflection protocol.

  • Thick client

    • does a lot

    • reliant on it, can have bugs

  • hard to integrate a proxy

  • No native browser support

  • Lack of maturity

    • minimal support about best practices, workarounds, and success stories

  • Steeper learning curve

  • similar to other rpc protocols which have a shared schema

    • everyone is tied to the schema, if one changes then everyone else has to change

    • It requires tight coupling between client and server

  • It uses non standard naming and discovery which doesn't work across network boundaries, which is why SOAP and XML-RPC were invented, a way of channelling RPC over port 80/443.

  • The lack of standards for caching of responses or middleware boxes for load balancing, rate limiting, deployment practices.

  • Trying to "wish away" the network by abstracting it out of existence

  • It doesn't solve the problem that RPC leaves the definition of the verbs (ie the procedures) and how they modify state of a common thing undefined. If I call an RP twice, what is the effect? How do I know it succeeded? What happens if it fails? etc etc

Protocol buffers

  • structuring messages developed and used in inter-machine communication

How

  • In a .proto text file, a schema is defined

    • how they want data to be structured

    • use numbers, not field names, to save storage

    • They can also embed documentation in the schema.

  • Use a protoc compiler

    • this file is then automatically compiled into any of the numerous supported languages

  • At runtime, messages are compressed and serialized in binary format

Advantages

  • efficient parsing

    • Less CPU-intensive because data is represented in a binary format which minimizes the size of encoded messages

    • message exchange happens faster, even in devices with a slower CPU like IoT or mobile devices

  • Schema is essential

    • ensure that the message doesn’t get lost between applications

    • its structural components stay intact on another service as well

Use of http2

  • communication is divided into smaller messages and framed in binary format

    • messages compact and efficient

  • Multiple parallel requests

    • supports multiple calls via the same channel

    • communication is bidirectional — a single connection can send both requests and responses at the same time

  • Streaming

    • Real time communication

    • each stream is divided into frames that can be prioritized and run via a single TCP connection, thus reducing the network utilization and processing load

Last updated