Google confidential │ Do not
distribute
Google confidential │ Do not
distribute
gRPC:
A multi-platform RPC system
Louis Ryan
26th February 2016
Google confidential │ Do not
distribute
Microservices at Google
~O(1010
) RPCs per second.
Images by Connie
Zhou
Open source on Github for C, C++, Java, Node.js,
Python, Ruby, Go, C#, PHP, Objective-C
gRPC core
gRPC java
OVERVIEW
gRPC is ...
Open Source RPC framework that makes it easy to build a heterogenous distributed system.
● Free as in beer! (and licensing)
● Based on HTTP/2 today (multiplexed, works with the Internet)
● Payload agnostic (we’ve implemented proto)
● Streaming & Flow-Controlled
● Designed for harsh environments (timeout, lameducking, load-balancing,
cancellation, …)
● Support in 10 languages & first class mobile support
● Layered & Pluggable - Bring your own monitoring, auth, naming, load
balancing ...
● Core features and protocol are fully specified
● Rolled out for public Google APIs and widely used internally
○ Lots of mobile adoption
● Approaching 1.0 (GA) release in all languages
○ Stable APIs for key features
● Benefit of layering on top of HTTP/2 standard
○ Interoperability with 3rd party proxies, tools, libraries..
○ WHATWG Fetch
Project Status
Multiple Languages
C/C++
HTTP/2HTTP/1.1
http://www.http2demo.io/
message SubscribeRequest {
string topic = 1;
}
message Event {
string details = 1;
}
service Topics {
rpc Subscribe(SubscribeRequest)
returns (stream Event);
}
IDL (Interface definition language)
Describe once and generate interfaces
for any language.
Data Model
Structure of the request and response.
Binary format for network transmission.
Wire Format
Protocol Buffers
● Three complete stacks: C/C++, Java and Go.
● Other language implementations wrap C-Runtime libraries.
○ Hand-written wrappers to maintain language idioms
● Why wrap C?
○ Development costs & Implementation Consistency
○ Performance
○ Feature evolution
● Easy one line installation via packages e.g npm install grpc
Implementation Details
USE CASES
Google confidential │ Do not
distribute
Use Cases
Client-server
communication
Access Google Cloud
Services
Build distributed
applications
Images by Connie
Zhou
• In data-centers
• In public/private cloud
• Clients and servers
across:
• Mobile
• Web
• Cloud
• Also
• Embedded
systems, IoT
• From GCP
• From Android and iOS
devices
• From everywhere else
HOW TO GET STARTED
● Install
○ apt-get install protobuf-compiler
○ pip install grpcio
● Write the protos
● Use protoc to generate service interfaces, messages & stubs
● Implement services in server
● Client instantiates stub
● Test & Deploy
Typical development workflow
● Auth & Security - TLS [Mutual], Plugin auth mechanism (e.g. OAuth)
● Proxies - nghttp2, haproxy, Google LB, Nginx (in progress)
● Client-side load balancing - etcd, Zookeeper, Eureka, …
● Monitor & Trace - Zipkin, Google, DIY
● Mobile - Reconnect, QUIC
● Web - REST Adapter, WHATWG Fetch
● API Evolution - Protobuf, Versioning
Advanced Deployment...
ARCHITECTURE
gRPC Core
Http 2.0
SSL
Code Generated API
Planned in:
C/C++, Java, GoApplication Layer
Framework Layer
Transport Layer
Architecture: Native Implementation in Language
Generic Low Level API in C
Python
Code-Generated Language Idiomatic API
Obj-C, C#, C++,
...
Ruby PHPPython
gRPC Core in C
Http 2.0
SSL
Language Bindings
Code Generated
Ruby PHP
Obj-C, C#,
C++,...
Application Layer
Framework Layer
Transport Layer
Architecture: Derived Stack
Wire Implementation across languages
gRPC Core
Http 2.0
SSL
Code Generated API
Auth Architecture and API
Credentials API
Auth-Credentials
Implementation
AuthPluginAPI
● Generic mechanism for attaching metadata to requests and responses
● Built into the gRPC protocol - always available
● Plugin API to attach “bearer tokens” to requests for Auth
○ OAuth2 access tokens
○ OIDC Id Tokens
● Session state for specific Auth mechanisms is encapsulated in an Auth-
credentials object
Metadata and Auth
ADVANCED FEATURES
gRPC: Naming
client nameserver
servers
name
addresses, ...
gRPC: LoadBalancing
client
LB
Controller
servers
Control RPC
address-list
ROADMAP..sorta !
Initial Alpha
Release
Beta
Release
Stability,
Easy
installation,
1.0 release
Q1 ‘16
Roadmap: Timeline
Q2 ‘15 Q3 ‘15,
Q4’15
Q1 ‘15 Q2 ‘16 Q3 16
Additional
Alpha
Releases
Load balancing,
Naming,
Performance
Debugging and
Tracing,
Browser
support
Thank you!
Thank you!
Twitter: @grpcio
Site: grpc.io
Group: grpc-io@googlegroups.com

gRPC Overview

  • 1.
    Google confidential │Do not distribute Google confidential │ Do not distribute gRPC: A multi-platform RPC system Louis Ryan 26th February 2016
  • 2.
    Google confidential │Do not distribute Microservices at Google ~O(1010 ) RPCs per second. Images by Connie Zhou
  • 3.
    Open source onGithub for C, C++, Java, Node.js, Python, Ruby, Go, C#, PHP, Objective-C gRPC core gRPC java
  • 4.
  • 5.
    gRPC is ... OpenSource RPC framework that makes it easy to build a heterogenous distributed system. ● Free as in beer! (and licensing) ● Based on HTTP/2 today (multiplexed, works with the Internet) ● Payload agnostic (we’ve implemented proto) ● Streaming & Flow-Controlled ● Designed for harsh environments (timeout, lameducking, load-balancing, cancellation, …) ● Support in 10 languages & first class mobile support ● Layered & Pluggable - Bring your own monitoring, auth, naming, load balancing ...
  • 6.
    ● Core featuresand protocol are fully specified ● Rolled out for public Google APIs and widely used internally ○ Lots of mobile adoption ● Approaching 1.0 (GA) release in all languages ○ Stable APIs for key features ● Benefit of layering on top of HTTP/2 standard ○ Interoperability with 3rd party proxies, tools, libraries.. ○ WHATWG Fetch Project Status
  • 7.
  • 8.
  • 9.
    message SubscribeRequest { stringtopic = 1; } message Event { string details = 1; } service Topics { rpc Subscribe(SubscribeRequest) returns (stream Event); } IDL (Interface definition language) Describe once and generate interfaces for any language. Data Model Structure of the request and response. Binary format for network transmission. Wire Format Protocol Buffers
  • 10.
    ● Three completestacks: C/C++, Java and Go. ● Other language implementations wrap C-Runtime libraries. ○ Hand-written wrappers to maintain language idioms ● Why wrap C? ○ Development costs & Implementation Consistency ○ Performance ○ Feature evolution ● Easy one line installation via packages e.g npm install grpc Implementation Details
  • 11.
  • 12.
    Google confidential │Do not distribute Use Cases Client-server communication Access Google Cloud Services Build distributed applications Images by Connie Zhou • In data-centers • In public/private cloud • Clients and servers across: • Mobile • Web • Cloud • Also • Embedded systems, IoT • From GCP • From Android and iOS devices • From everywhere else
  • 13.
    HOW TO GETSTARTED
  • 14.
    ● Install ○ apt-getinstall protobuf-compiler ○ pip install grpcio ● Write the protos ● Use protoc to generate service interfaces, messages & stubs ● Implement services in server ● Client instantiates stub ● Test & Deploy Typical development workflow
  • 15.
    ● Auth &Security - TLS [Mutual], Plugin auth mechanism (e.g. OAuth) ● Proxies - nghttp2, haproxy, Google LB, Nginx (in progress) ● Client-side load balancing - etcd, Zookeeper, Eureka, … ● Monitor & Trace - Zipkin, Google, DIY ● Mobile - Reconnect, QUIC ● Web - REST Adapter, WHATWG Fetch ● API Evolution - Protobuf, Versioning Advanced Deployment...
  • 16.
  • 17.
    gRPC Core Http 2.0 SSL CodeGenerated API Planned in: C/C++, Java, GoApplication Layer Framework Layer Transport Layer Architecture: Native Implementation in Language
  • 18.
    Generic Low LevelAPI in C Python Code-Generated Language Idiomatic API Obj-C, C#, C++, ... Ruby PHPPython gRPC Core in C Http 2.0 SSL Language Bindings Code Generated Ruby PHP Obj-C, C#, C++,... Application Layer Framework Layer Transport Layer Architecture: Derived Stack
  • 19.
    Wire Implementation acrosslanguages gRPC Core Http 2.0 SSL Code Generated API Auth Architecture and API Credentials API Auth-Credentials Implementation AuthPluginAPI
  • 20.
    ● Generic mechanismfor attaching metadata to requests and responses ● Built into the gRPC protocol - always available ● Plugin API to attach “bearer tokens” to requests for Auth ○ OAuth2 access tokens ○ OIDC Id Tokens ● Session state for specific Auth mechanisms is encapsulated in an Auth- credentials object Metadata and Auth
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
    Initial Alpha Release Beta Release Stability, Easy installation, 1.0 release Q1‘16 Roadmap: Timeline Q2 ‘15 Q3 ‘15, Q4’15 Q1 ‘15 Q2 ‘16 Q3 16 Additional Alpha Releases Load balancing, Naming, Performance Debugging and Tracing, Browser support
  • 26.
    Thank you! Thank you! Twitter:@grpcio Site: grpc.io Group: grpc-io@googlegroups.com