SlideShare a Scribd company logo
1 of 172
Download to read offline
Teach your (micro)services speak
Protocol Buffers with gRPC.
Mihai Iachimovschi
@mishunika
mihai.iachimovschi@gmail.com
What’s inside?
What’s inside?
–Message serialization and deserialization
What’s inside?
–Message serialization and deserialization
–Message transport
What’s inside?
–Message serialization and deserialization
–Message transport
–Services diversity
How it works in real life
A
B
C
D
How it works in real life
A
B
C
D
In a nutshell
Client Service
In a nutshell
–Over HTTP

–Serialized to JSON
Client Service
In a nutshell
–Over HTTP

–Serialized to JSON
Client Service
–Proprietary protocol

–Remote objects
JSON advantages
JSON advantages
–Human readable
JSON advantages
–Human readable
–Schema-less
JSON advantages
–Human readable
–Schema-less
–Language agnostic
JSON disadvantages
JSON disadvantages
–Human readable
JSON disadvantages
–Human readable Isn’t it a benefit?
JSON disadvantages
–Human readable
–Schema-less
Isn’t it a benefit?
JSON disadvantages
–Human readable
–Schema-less
Isn’t it a benefit?
Isn’t it a benefit as well?
JSON disadvantages
–Human readable
–Schema-less
–Type-less
Isn’t it a benefit?
Isn’t it a benefit as well?
Protocol Buffers?
“Protocol buffers are Google's language-neutral,
platform-neutral, extensible mechanism for serializing
structured data – think XML, but smaller, faster, and
simpler.”

— https://developers.google.com/protocol-buffers/
Protocol Buffers?
“Protocol buffers are Google's language-neutral,
platform-neutral, extensible mechanism for serializing
structured data – think XML, but smaller, faster, and
simpler.”

— https://developers.google.com/protocol-buffers/
Protocol Buffers?
“Protocol buffers are Google's language-neutral,
platform-neutral, extensible mechanism for serializing
structured data – think XML, but smaller, faster, and
simpler.”

— https://developers.google.com/protocol-buffers/
JSON
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Protocol Buffers example
message Person {
  reserved 1, 2, 5;
reserved "name";
  int32 id = 3;
  repeated string aliases = 4;
}
Why protocol buffers
Binary format
Why protocol buffers
Enforcing the schema
Why protocol buffers
Language neutral
Out-of the box backward compatibility
Why protocol buffers
Out-of the box backward compatibility
Why protocol buffers
Out-of the box backward compatibility
 if version == 3:
   ...
 elif version > 4:
   if (version == 5):
     ...
   ...
Why protocol buffers
Why protocol buffers
Generally faster
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Proto message definition
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .addAliases("ionel")
    .build();
Proto message definition
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .addAliases("ionel")
    .build();
Proto message definition
Object creation
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
john = Person()
john.id = 1234
john.name = 'John Doe'
john.aliases.add(‘ionel’)
Proto message definition
Object creation
How to…
message Person {
  string name = 1;
  int32 id = 2;
  repeated string aliases = 3;
}
john = Person(id=1234,
name='John Doe',
aliases=['ionel'])
Proto message definition
Object creation
Communication (REST-ish)
1. URI: https://api.example.com/person/42

2. Make an HTTP GET Request

3. Receive a plaintext JSON

4. Parse it

5. …
Request
GET /person/42 HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: api.example.com
...
Response headers
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: public, max-age=14400
Content-Encoding: gzip
Content-Type: application/json;
charset=utf-8
...
Response body
{
"name": "John Doe",
"id": 42,
"aliases": [
"ionel",
"honzík"
]
}
HTTP2
https://www.youtube.com/watch?v=DtTKF5OcpsU
Distributed objects
https://en.wikipedia.org/wiki/Distributed_object
Distributed objects
“First Law of Distributed Object Design:

don't distribute your objects”.

— Martin Fowler
https://martinfowler.com/articles/distributed-objects-microservices.html
The 8 Fallacies of distributed computing
1. The network is reliable. 

2. Latency is zero. 

3. Bandwidth is infinite. 

4. The network is secure.
5. Topology doesn't change. 

6. There is one administrator. 

7. Transport cost is zero. 

8. The network is homogeneous.
http://www.rgoarchitects.com/Files/fallacies.pdf
Keep in mind…
“Anything that can go wrong will go wrong.”

—Murphy’s Law
So, what’s next?
Services not Objects, Messages not References
http://www.grpc.io/blog/principles
Coverage & Simplicity
http://www.grpc.io/blog/principles
How does it work
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition
message GetRoutesRequest {
Location origin = 1;
Location destination = 2;
}
message GetRoutesResponse {
repeated Route routes = 1;
}
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generate server code
$ python -m grpc_tools.protoc 

--proto_path=../protos  

--python_out=. 

--grpc_python_out=. 

../protos/route_planner.proto
Generated code
$ tree
.
├── route_planner_pb2.py
└── route_planner_pb2_grpc.py
0 directories, 2 files
Implementing the service
Implementing the service
Service code
class Servicer(route_planner_pb2_grpc.RoutePlannerServicer):
"""Service implementation."""
def GetRoutes(self, request, context):
return process_magically_the_request(request)
Service code
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10))
route_planner_pb2_grpc.add_RoutePlannerServicer_to_server(
Servicer(), server)
server.add_insecure_port('[::]:12345')
server.start()
Service code
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10))
route_planner_pb2_grpc.add_RoutePlannerServicer_to_server(
Servicer(), server)
server.add_insecure_port('[::]:12345')
server.start()
Service code
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10))
route_planner_pb2_grpc.add_RoutePlannerServicer_to_server(
Servicer(), server)
server.add_insecure_port('[::]:12345')
server.start()
Service code
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10))
route_planner_pb2_grpc.add_RoutePlannerServicer_to_server(
Servicer(), server)
server.add_insecure_port('[::]:12345')
server.start()
Service code
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10))
route_planner_pb2_grpc.add_RoutePlannerServicer_to_server(
Servicer(), server)
server.add_insecure_port('[::]:12345')
server.start()
Implementing the client
Implementing the client
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code
channel = grpc.insecure_channel(‘localhost:12345')
stub = route_planner_pb2_grpc.RoutePlannerStub(channel)
request = route_planner_pb2.GetRoutesRequest(
origin=CURRENT_LOCATION,
destination=DESTINATION_COORDS)
response = stub.GetRoutes(request)
Client code (async)
response_future = stub.GetRoutes.future(request)
response_future.result()
grpc_cli
$ grpc_cli call localhost:12345 

RoutePlanner.GetRoutes 

<<- PROTO

origin: <long: 0.0 lat: 0.0> 

destination: <long: 1.1 lat: 1.1>

PROTO
grpc_cli
$ grpc_cli call localhost:12345 

RoutePlanner.GetRoutes 

<<- PROTO

origin: <long: 0.0 lat: 0.0> 

destination: <long: 1.1 lat: 1.1>

PROTO
grpc_cli
$ grpc_cli call localhost:12345 

RoutePlanner.GetRoutes 

<<- PROTO

origin: <long: 0.0 lat: 0.0> 

destination: <long: 1.1 lat: 1.1>

PROTO
grpc_cli
$ grpc_cli call localhost:12345 

RoutePlanner.GetRoutes 

<<- PROTO

origin: <long: 0.0 lat: 0.0> 

destination: <long: 1.1 lat: 1.1>

PROTO
grpc_cli
$ grpc_cli call localhost:12345 

RoutePlanner.GetRoutes 

<<- PROTO

origin: <long: 0.0 lat: 0.0> 

destination: <long: 1.1 lat: 1.1>

PROTO
grpc_cli
Rpc succeeded with OK status 

Response:

routes: <...>

routes: <...>

routes: <...>

routes: <...>
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition - response streaming
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (stream GetRoutesResponse) {}
}
Service definition
service RoutePlanner {
rpc GetRoutes (GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Service definition - request streaming
service RoutePlanner {
rpc GetRoutes (stream GetRoutesRequest)
returns (GetRoutesResponse) {}
}
Request streaming? Response streaming?
Request streaming? Response streaming?
Service definition - bidirectional streaming
service RoutePlanner {
rpc GetRoutes (stream GetRoutesRequest)
returns (stream GetRoutesResponse) {}
}
Keep in mind…
Things will go wrong
Timeouts
Client Service B
A
C
D
E
? ms ? ms
? ms
? ms
? ms
? ms
Uniform timeout
Client Service A B
Uniform timeout
Client Service A B
500 ms timeout 500 ms timeout 500 ms timeout
Uniform timeout
Client Service A
20 ms
B
500 ms timeout 500 ms timeout 500 ms timeout
Uniform timeout
Client Service A
20 ms 30 ms
B
500 ms timeout 500 ms timeout 500 ms timeout
Uniform timeout
Client Service A
20 ms 30 ms
B
40 ms
500 ms timeout 500 ms timeout 500 ms timeout
Uniform timeout
Client Service A
20 ms 30 ms
B
40 ms
420 ms
500 ms timeout 500 ms timeout 500 ms timeout
Uniform timeout
Client Service A
20 ms 30 ms
B
40 ms
420 ms
500 ms timeout 500 ms timeout 500 ms timeout
X
Uniform timeout
Client Service A
20 ms 30 ms
B
40 ms
20 ms 420 ms
500 ms timeout 500 ms timeout 500 ms timeout
X X
Fine-tuned timeout
Client Service A B
Fine-tuned timeout
Client Service A B
300 ms timeout 280 ms timeout 50 ms timeout
Fine-tuned timeout
Client Service A
20 ms
B
300 ms timeout 280 ms timeout 50 ms timeout
Fine-tuned timeout
Client Service A
20 ms 30 ms
B
300 ms timeout 280 ms timeout 50 ms timeout
Fine-tuned timeout
Client Service A
20 ms 30 ms
B
15 ms
300 ms timeout 280 ms timeout 50 ms timeout
Fine-tuned timeout
Client Service A
20 ms 30 ms
B
15 ms
40 ms
300 ms timeout 280 ms timeout 50 ms timeout
Fine-tuned timeout
Client Service A
20 ms 30 ms
B
15 ms
40 ms
300 ms timeout 280 ms timeout 50 ms timeout
X
Adaptive timeout
Client Service A B
Adaptive timeout
Client Service A B
200 ms timeout
Adaptive timeout
Client Service A
20 ms
B
200 ms timeout
Adaptive timeout
Client Service A
20 ms
B
200 ms timeout
200ms - 20ms =
180 ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
200 ms timeout
200ms - 20ms =
180 ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
200 ms timeout
200ms - 20ms =
180 ms
180ms - 30ms =
150ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
15 ms
200 ms timeout
200ms - 20ms =
180 ms
180ms - 30ms =
150ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
15 ms
40 ms
200 ms timeout
200ms - 20ms =
180 ms
180ms - 30ms =
150ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
15 ms
20 ms 40 ms
200 ms timeout
200ms - 20ms =
180 ms
180ms - 30ms =
150ms
Adaptive timeout
Client Service A
20 ms 30 ms
B
15 ms
40 ms 20 ms 40 ms
200 ms timeout
200ms - 20ms =
180 ms
180ms - 30ms =
150ms
gRPC: Deadlines
gRPC: Deadlines
–Timeout is relative
gRPC: Deadlines
–Timeout is relative
–Deadline is absolute
Deadline propagation
Client Service A B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
Deadline propagation
Client Service A B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600000
Deadline propagation
Client Service A
20 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600000
Deadline propagation
Client Service A
20 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045
TS: 3600085
TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
20 ms 40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045
TS: 3600085
TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
20 ms 40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045
TS: 3600105 TS: 3600085
TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
40 ms 20 ms 40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045
TS: 3600105 TS: 3600085
TS: 3600000
Deadline propagation
Client Service A
20 ms 30 ms
B
15 ms
40 ms 20 ms 40 ms
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600020 TS: 3600050 TS: 3600045
TS: 3600105 TS: 3600085TS: 3600145
TS: 3600000
Deadline propagation
Client Service A B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
Deadline propagation
Client Service A B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600000
Deadline propagation
Client Service A
150ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600000
Deadline propagation
Client Service A
150ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150TS: 3600000
Deadline propagation
Client Service A
150ms 100 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150TS: 3600000
Deadline propagation
Client Service A
150ms 100 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150 TS: 3600250TS: 3600000
Deadline propagation
Client Service A
150ms 100 ms
B
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150 TS: 3600250TS: 3600000
X
Deadline propagation
Client Service A
150ms 100 ms
B
DEADLINE_EXCEEDED
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150 TS: 3600250TS: 3600000
X
Deadline propagation
Client Service A
150ms 100 ms
B
DEADLINE_EXCEEDED DEADLINE_EXCEEDED
Start TS: 3600000
Timeout: 200
Deadline: 3600200
TS: 3600150 TS: 3600250TS: 3600000
X
Cancellation
Cancellation
–Can be initiated by both client/server
Cancellation
–Can be initiated by both client/server
–Immediately terminates the RPC
Cancellation
–Can be initiated by both client/server
–Immediately terminates the RPC
–It is not a roll-back
Cancellation
–Can be initiated by both client/server
–Immediately terminates the RPC
–It is not a roll-back
–Automatically cascaded
Backward compatibility
https://github.com/grpc-ecosystem/grpc-gateway
gRPC language support
–C++

–Python

–Java

–Go

–Ruby
–C#

–JS (Node)

–Android Java

–Objective-C

–PHP
gRPC Platform support
–Linux

–macOS

–Windows

–Android

–iOS
Success stories
Success stories
Benefits
Benefits
–Focus on the API design & contract
Benefits
–Focus on the API design & contract
–HTTP2 is awesome
Benefits
–Focus on the API design & contract
–HTTP2 is awesome
–Bi-directional streaming
Benefits
–Focus on the API design & contract
–HTTP2 is awesome
–Bi-directional streaming
–Freedom to pick any language
Benefits
–Focus on the API design & contract
–HTTP2 is awesome
–Bi-directional streaming
–Freedom to pick any language
–Service-to-Service and Service-to-Mobile friendly
Benefits
–Focus on the API design & contract
–HTTP2 is awesome
–Bi-directional streaming
–Freedom to pick any language
–Service-to-Service and Service-to-Mobile friendly
–Production ready
Fin.
Thank you.

More Related Content

What's hot

Generating Unified APIs with Protocol Buffers and gRPC
Generating Unified APIs with Protocol Buffers and gRPCGenerating Unified APIs with Protocol Buffers and gRPC
Generating Unified APIs with Protocol Buffers and gRPCC4Media
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Alex Borysov
 
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, Google
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, GoogleBringing Learnings from Googley Microservices with gRPC - Varun Talwar, Google
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, GoogleAmbassador Labs
 
Microservices summit talk 1/31
Microservices summit talk   1/31Microservices summit talk   1/31
Microservices summit talk 1/31Varun Talwar
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP serverKazuho Oku
 
gRPC Design and Implementation
gRPC Design and ImplementationgRPC Design and Implementation
gRPC Design and ImplementationVarun Talwar
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 serverKazuho Oku
 
How happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPHow happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPIchito Nagata
 
Use perl creating web services with xml rpc
Use perl creating web services with xml rpcUse perl creating web services with xml rpc
Use perl creating web services with xml rpcJohnny Pork
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)Colin Bendell
 
Performance is not an Option - gRPC and Cassandra
Performance is not an Option - gRPC and CassandraPerformance is not an Option - gRPC and Cassandra
Performance is not an Option - gRPC and CassandraDave Bechberger
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときKazuho Oku
 
HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战Jerry Qu
 

What's hot (20)

Generating Unified APIs with Protocol Buffers and gRPC
Generating Unified APIs with Protocol Buffers and gRPCGenerating Unified APIs with Protocol Buffers and gRPC
Generating Unified APIs with Protocol Buffers and gRPC
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.
 
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, Google
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, GoogleBringing Learnings from Googley Microservices with gRPC - Varun Talwar, Google
Bringing Learnings from Googley Microservices with gRPC - Varun Talwar, Google
 
Microservices summit talk 1/31
Microservices summit talk   1/31Microservices summit talk   1/31
Microservices summit talk 1/31
 
Serialization in Go
Serialization in GoSerialization in Go
Serialization in Go
 
Grpc present
Grpc presentGrpc present
Grpc present
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP server
 
RPC protocols
RPC protocolsRPC protocols
RPC protocols
 
gRPC Design and Implementation
gRPC Design and ImplementationgRPC Design and Implementation
gRPC Design and Implementation
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 server
 
How happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPHow happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTP
 
Use perl creating web services with xml rpc
Use perl creating web services with xml rpcUse perl creating web services with xml rpc
Use perl creating web services with xml rpc
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)
 
gRPC: Beyond REST
gRPC: Beyond RESTgRPC: Beyond REST
gRPC: Beyond REST
 
Performance is not an Option - gRPC and Cassandra
Performance is not an Option - gRPC and CassandraPerformance is not an Option - gRPC and Cassandra
Performance is not an Option - gRPC and Cassandra
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないとき
 
HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战
 

Similar to Teach your (micro)services talk Protocol Buffers with gRPC.

Creating Great REST and gRPC API Experiences (in Swift)
Creating Great REST and gRPC API Experiences (in Swift)Creating Great REST and gRPC API Experiences (in Swift)
Creating Great REST and gRPC API Experiences (in Swift)Tim Burks
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsTim Burks
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingAll Things Open
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsSolution4Future
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallPeter R. Egli
 
The 1990s Called. They Want Their Code Back.
The 1990s Called. They Want Their Code Back.The 1990s Called. They Want Their Code Back.
The 1990s Called. They Want Their Code Back.Jonathan Oliver
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCTim Burks
 
Rockin' Protobuf in Ruby
Rockin' Protobuf in RubyRockin' Protobuf in Ruby
Rockin' Protobuf in RubyBJ Neilsen
 
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangEverybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangRusty Klophaus
 
Rpc (Distributed computing)
Rpc (Distributed computing)Rpc (Distributed computing)
Rpc (Distributed computing)Sri Prasanna
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesciklum_ods
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swiftTim Burks
 
Building Services With gRPC, Docker and Go
Building Services With gRPC, Docker and GoBuilding Services With gRPC, Docker and Go
Building Services With gRPC, Docker and GoMartin Kess
 
What I learned about APIs in my first year at Google
What I learned about APIs in my first year at GoogleWhat I learned about APIs in my first year at Google
What I learned about APIs in my first year at GoogleTim Burks
 
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)Michał Kruczek
 
Distributes objects and Rmi
Distributes objects and RmiDistributes objects and Rmi
Distributes objects and RmiMayank Jain
 
eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015 eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015 Jaime Martin Losa
 

Similar to Teach your (micro)services talk Protocol Buffers with gRPC. (20)

Android GRPC
Android GRPCAndroid GRPC
Android GRPC
 
Creating Great REST and gRPC API Experiences (in Swift)
Creating Great REST and gRPC API Experiences (in Swift)Creating Great REST and gRPC API Experiences (in Swift)
Creating Great REST and gRPC API Experiences (in Swift)
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIs
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via Streaming
 
Switch to Backend 2023
Switch to Backend 2023Switch to Backend 2023
Switch to Backend 2023
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure Call
 
Android and REST
Android and RESTAndroid and REST
Android and REST
 
The 1990s Called. They Want Their Code Back.
The 1990s Called. They Want Their Code Back.The 1990s Called. They Want Their Code Back.
The 1990s Called. They Want Their Code Back.
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
 
Rockin' Protobuf in Ruby
Rockin' Protobuf in RubyRockin' Protobuf in Ruby
Rockin' Protobuf in Ruby
 
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangEverybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with Erlang
 
Rpc (Distributed computing)
Rpc (Distributed computing)Rpc (Distributed computing)
Rpc (Distributed computing)
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
 
Building Services With gRPC, Docker and Go
Building Services With gRPC, Docker and GoBuilding Services With gRPC, Docker and Go
Building Services With gRPC, Docker and Go
 
What I learned about APIs in my first year at Google
What I learned about APIs in my first year at GoogleWhat I learned about APIs in my first year at Google
What I learned about APIs in my first year at Google
 
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
 
Distributes objects and Rmi
Distributes objects and RmiDistributes objects and Rmi
Distributes objects and Rmi
 
eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015 eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015
 

Recently uploaded

HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSRajkumarAkumalla
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )Tsuyoshi Horigome
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxpranjaldaimarysona
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxpurnimasatapathy1234
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSSIVASHANKAR N
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlysanyuktamishra911
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)Suman Mia
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxupamatechverse
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).pptssuser5c9d4b1
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdfankushspencer015
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 

Recently uploaded (20)

HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptx
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptx
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptx
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 

Teach your (micro)services talk Protocol Buffers with gRPC.