gRPC Go
GothamGo 2015

Sameer Ajmani
Tech Lead Manager, Go team, Google
@Sajma
sameer@golang.org

* Video

This talk was presented at GothamGo in New York City, October 2015.

.link https://www.youtube.com/watch?v=vTIyz2QfExc&index=7&list=PLeGxIOPLk9ELh9tsPZMzau6CzMjfMzp9- Watch the talk on YouTube

* RPC isn't just Remote Procedure Call

In Go, an RPC *starts*a*goroutine* running on the server and provides _message_passing_ between the client and server goroutines.

*Unary*RPC*: the client sends a _request_ to the server, then the server sends a _response_.

*Streaming*RPC:* the client and server may each send one or more messages.

An RPC ends when:

- both sides are done sending messages
- either side disconnects
- the RPC is canceled or times out

This talk will show how we connect RPCs and streams with goroutines and channels.

* Unary RPC: one request, one response

Example: a mobile Maps app requests a route from point A to point B.

On the client side, an RPC blocks until it's done or canceled.

A client uses multiple goroutines to run many RPCs simultaneously.

Each RPC is an exchange between a client goroutine and a server goroutine.

* Streaming RPC provides bidirectional message-passing

A client starts a stream with a server.

Messages sent on a stream are delivered FIFO.

Many streams can run simultaneously between the same client and server.

The transport provides buffering and flow control.

Examples:

- bidirectional stream: chat session
- server → client stream: stock ticker
- client → server stream: sensor aggregation

* gRPC is a new RPC system from Google

.link http://grpc.io

Provides RPC and streaming RPC

Ten languages: *C*, *Java*, *Go*, C++, Node.js, Python, Ruby, Objective-C, PHP, and C#
IDL: *Proto3*
Transport: *HTTP2*

[[http://golang.org/x/net/context][golang.org/x/net/context]] for deadlines, cancelation, and request-scoped values
[[http://golang.org/x/net/trace][golang.org/x/net/trace]] for real-time request traces and connection logging

* gRPC users

150+ imports of [[https://godoc.org/google.golang.org/grpc?importers][google.golang.org/grpc]] on [[http://godoc.org][godoc.org]]

- [[https://github.com/apcera/kurma][Apcera/Kurma]]: container OS
- [[http://bazil.org][Bazil]]: distributed file system
- [[http://coreos.com/etcd/][CoreOS/Etcd]]: distributed consistent key-value store
- [[https://godoc.org/google.golang.org/cloud/bigtable][Google Cloud Bigtable]]: sparse table storage
- [[https://github.com/monetas/bmd][Monetas/Bitmessage]]: transaction platform
- [[http://www.pachyderm.io/][Pachyderm]]: containerized data analytics
- [[http://vitess.io/][YouTube/Vitess]]: storage platform for scaling MySQL

* Demos and Code: Google search

* Protocol definition

.code gotham-grpc/search-only/search-only.proto

* Generated code

.code gotham-grpc/search/README.md /protoc/
.code gotham-grpc/search-only/search-only.pb.go /type GoogleClient/,/^}/
.code gotham-grpc/search-only/search-only.pb.go /type GoogleServer/,/^}/
.code gotham-grpc/search-only/search-only.pb.go /type Request/,/^}/
.code gotham-grpc/search-only/search-only.pb.go /type Result/,/^}/

* System diagram

.image gotham-grpc/system.svg _ 1000

* Frontend runs Search on both backends and returns first result

.image gotham-grpc/search.svg _ 1000

* Demo client --mode=search

- Frontend request traces
- Backend request traces
- Connection event logs

* Client code

.image gotham-grpc/client.svg _ 1000

* Client code (main)

  import pb "golang.org/x/talks/content/2015/gotham-grpc/search"

.code gotham-grpc/client/client.go /func main/,/^}/

* Client code (search)

.code gotham-grpc/client/client.go /func search/,/^}/

RPCs block but can be canceled using a Context.

gRPC propagates cancelation from client to server.

* Backend code

.image gotham-grpc/backend.svg _ 1000

* Backend code (main)

.code gotham-grpc/backend/backend.go /net.Listen/,/g.Serve/

`new(server)` must implement the `GoogleServer` interface:

.code gotham-grpc/search/search.pb.go /type GoogleServer/,/^}/

Each call to `Search` or `Watch` runs in its own goroutine.

* Backend code (search)

`ctx.Done` is closed when the RPC is canceled, times out, or returns:

.code gotham-grpc/backend/backend.go /[)] Search/,/^}/

If tracing is enabled, log the sleep duration:

.code gotham-grpc/backend/backend.go /func logSleep/,/^}/

* Frontend code

.image gotham-grpc/frontend.svg _ 1000

* Frontend code (search)

`Search` returns as soon as it gets the first result.
gRPC cancels the remaining `backend.Search` RPCs by via `ctx`:

.code gotham-grpc/frontend/frontend.go /[)] Search/,/^}/

.code gotham-grpc/frontend/frontend.go /type result/,/^}/

* Streaming RPC

* Add Watch to the Google service

.code gotham-grpc/search/search.proto

* Generated code

.code gotham-grpc/search/search.pb.go /type GoogleClient/,/^}/
.code gotham-grpc/search/search.pb.go /type GoogleServer/,/^}/
.code gotham-grpc/search/search.pb.go /type Google_WatchClient/,/^}/
.code gotham-grpc/search/search.pb.go /type Google_WatchServer/,/^}/

* Frontend runs Watch on both backends and merges results

.image gotham-grpc/watch.svg _ 1000

* Demo client --mode=watch

- Active stream traces
- Cancelation

* Client code

.image gotham-grpc/client.svg _ 1000

* Client code (watch)

.code gotham-grpc/client/client.go /func watch/,/^}/

* Backend code

.image gotham-grpc/backend.svg _ 1000

* Backend code (watch)

.code gotham-grpc/backend/backend.go /[)] Watch/,/^}/

* Frontend code

.image gotham-grpc/frontend.svg _ 1000

* Frontend code (watch)

.code gotham-grpc/frontend/frontend.go /[)] Watch/,/return nil/

* Frontend code (watchBackend)

`Watch` returns on first error; this closes `ctx.Done` and signals `watchBackend` to exit.

.code gotham-grpc/frontend/frontend.go /func watch/,/^}/

* gRPC extends the Go programming model over the network

Go gRPC works smoothly with goroutines, channels, and cancelation.

It is an excellent fit for building parallel, distributed, and streaming systems.

.image gotham-grpc/watch.svg _ 1000

* References

- [[http://grpc.io][grpc.io]] - gRPC reference and tutorials
- [[https://github.com/golang/protobuf][github.com/golang/protobuf]] - Protocol buffers
- [[http://golang.org/x/net/http2][golang.org/x/net/http2]] - HTTP2
- [[http://golang.org/x/net/trace][golang.org/x/net/trace]] - Request traces and event logs
- [[http://golang.org/x/net/context][golang.org/x/net/context]] - Cancelation and request-scoped data
- [[http://blog.golang.org/pipelines][blog.golang.org/pipelines]] - Streaming data pipelines

*Thanks*to* Qi Zhao, David Symonds, Brad Fitzpatrick, and the rest.

*Questions?*

Sameer Ajmani
Tech Lead Manager, Go team, Google
[[twitter.com/Sajma][@Sajma]]
[[mailto:sameer@golang.org][sameer@golang.org]]
