Alex Ninneman

Software Engineer for 11 years implementing multi-tenant infrastructure for numerous brands. I’ve been using Docker and Kubernetes in production environments for 5 years and have been utilizing it to run my home network for the past 2 years at a very tiny scale. In my free time I try and maintain my home infrastructure which varies from adding a random Raspberry Pi to explaining to my kids why the lamp keeps flickering.


Generating RPC Services

Protocol Buffers allow us to generate the boilerplate portions of our application in a type-safe manner. Generating our code into RPC services allows for the reduction of boilerplate code that needs to be written and maintained by a developer; some examples of this are the HTTP/RPC routes, JSON/YAML encoding, instrumentation via metrics/logging/tracing.

Using the same Protocol definitions, we can generate our client SDK’s for making calls against our generated server. Based off the Protocol definitions, I will show all the utilities that can be generated for working with the RPC server:

  • Client SDK’s (C#, Go, Java, C++, PHP, JS, etc.)
  • Swagger specification for HTTP clients
  • API Documentation

Included with the service generation will be an observability layer that allows us to collect metrics, logs, and trace information about the health of our application as requests flow through the generated code base. To output this information, we’ll export our metrics and trace data into a Prometheus and Jaeger instance to demonstrate the observability layer that comes along for the ride.