Book Image

gRPC Go for Professionals

By : Clément Jean
Book Image

gRPC Go for Professionals

By: Clément Jean

Overview of this book

In recent years, the popularity of microservice architecture has surged, bringing forth a new set of requirements. Among these, efficient communication between the different services takes center stage, and that's where gRPC shines. This book will take you through creating gRPC servers and clients in an efficient, secure, and scalable way. However, communication is just one aspect of microservices, so this book goes beyond that to show you how to deploy your application on Kubernetes and configure other tools that are needed for making your application more resilient. With these tools at your disposal, you’ll be ready to get started with using gRPC in a microservice architecture. In gRPC Go for Professionals, you'll explore core concepts such as message transmission and the role of Protobuf in serialization and deserialization. Through a step-by-step implementation of a TODO list API, you’ll see the different features of gRPC in action. You’ll then learn different approaches for testing your services and debugging your API endpoints. Finally, you’ll get to grips with deploying the application services via Docker images and Kubernetes.
Table of Contents (13 chapters)

Choosing the right integer type

Protobuf is mostly performant because of its binary format and because of its representation of integers. While some types such as strings are serialized “as is” and prepended with the field tag, type, and length, numbers – especially integers – are generally serialized in way fewer bits than how they are laid out in your computer memory.

However, you might have noticed that I said “generally serialized.” This is because if you chose the wrong integer type for your data, the varint encoding algorithm might encode an int32 into 5 bytes or more, whereas, in memory, it is 4 bytes.

Let us see an example of a bad choice of integer type. Let us say that we want to encode the value 268,435,456. We can check how this value would be serialized in memory and with Protobuf by using the unsafe.Sizeof function from the Go standard library and the proto.Marshal function provided by Protobuf. And finally, we are also...