grpc 101 - devfest belgium 2016

48
GRPC 101 by Alex Van Boxel (@alexvb)

Upload: alex-van-boxel

Post on 07-Jan-2017

237 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: GRPC 101 - DevFest Belgium 2016

GRPC 101by Alex Van Boxel (@alexvb)

Page 2: GRPC 101 - DevFest Belgium 2016

Alex Van BoxelSoftware Architect @ Vente-Exclusive.com

Google Cloud Developer Expert

Page 3: GRPC 101 - DevFest Belgium 2016

http://www.grpc.io/

AgendaGRPC introductionGRPC demoGRPC deep dive

Page 4: GRPC 101 - DevFest Belgium 2016

Remember RPC

Page 5: GRPC 101 - DevFest Belgium 2016

History: CobraSpec # pages

Part 1: CORBA Interfaces 532

Part 2: CORBA Interoperability 236

Part 3: CORBA Component Model 380

Page 6: GRPC 101 - DevFest Belgium 2016

History: DCOMOh, my... If you think COM is scary...

D-COM

Page 7: GRPC 101 - DevFest Belgium 2016

History: RMIQuite OK... but interop?!

Page 8: GRPC 101 - DevFest Belgium 2016

History: SOAPInterop, but XML

Sooo, slow

WS-* (dead-star)

Page 9: GRPC 101 - DevFest Belgium 2016

RESTResource Oriented

JSON over REST

Successful model

Page 10: GRPC 101 - DevFest Belgium 2016

So why RPC again?!

Page 11: GRPC 101 - DevFest Belgium 2016

Microservices

Page 12: GRPC 101 - DevFest Belgium 2016

GRPC Remote ProcedureCall

Page 13: GRPC 101 - DevFest Belgium 2016

GRPC@google everything build with RPC

Comes from 4 generations of RPC

Stubby 1,2,3

10^10 RPC calls per second

Google and Square

Page 14: GRPC 101 - DevFest Belgium 2016

SimplePerformant and ScalableInteroperable and Extensible

Page 15: GRPC 101 - DevFest Belgium 2016

Protobuffer 3IDLHTTP/2

Page 16: GRPC 101 - DevFest Belgium 2016

Protocol BufferStructured representation of Data

IDL: Interface Defenition Language

Binary format

Well-Know Types

Page 17: GRPC 101 - DevFest Belgium 2016

Proto: Code Generation

Page 18: GRPC 101 - DevFest Belgium 2016

Proto: LanguagesJava, C++, Node.JS, Ruby, Python, ObjectiveC, Go, PHP

Page 19: GRPC 101 - DevFest Belgium 2016

Proto: Messagessyntax = "proto3";

message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; }

Page 20: GRPC 101 - DevFest Belgium 2016

Proto: Servicesservice SearchService { rpc Search (SearchRequest) returns (SearchResponse); }

Page 21: GRPC 101 - DevFest Belgium 2016

Proto: Optionspackage grpc.health.v1; option csharp_namespace = "Grpc.Health.V1";

option java_multiple_files = true; option java_package = "io.grpc.health.v1"; option java_outer_classname = "HealthProto";

Page 22: GRPC 101 - DevFest Belgium 2016

HTTP/2

Page 23: GRPC 101 - DevFest Belgium 2016

HTTP/2Binary

Multiplexing

Page 24: GRPC 101 - DevFest Belgium 2016

HTTP/1 vs HTTP/2

Page 25: GRPC 101 - DevFest Belgium 2016
Page 26: GRPC 101 - DevFest Belgium 2016

HTTP/2Binary

Multiplexing

Secure

Page 27: GRPC 101 - DevFest Belgium 2016

HTTP/1 TLS keys

Page 28: GRPC 101 - DevFest Belgium 2016

HTTP/2Binary

Multiplexing

Secure

Streaming

Page 29: GRPC 101 - DevFest Belgium 2016

HTTP/2: StreamingServer Side Streaming

Client Side Streaming

Bi-Directional Streaminf

Page 30: GRPC 101 - DevFest Belgium 2016

Standard ErrorsGRPC_STATUS_CANCELLED Client application

cancelled therequest

GRPC_STATUS_DEADLINE_EXCEEDED Deadline expiredbefore serverreturned status

GRPC_STATUS_RESOURCE_EXHAUSTED Flow-controlresource limitsreached

GRPC_STATUS_UNAUTHENTICATED Unauthenticated:credentials failedto get metadata

Page 31: GRPC 101 - DevFest Belgium 2016

GRPC_STATUS_CANCELLED Client applicationcancelled therequest

...

Page 32: GRPC 101 - DevFest Belgium 2016

HTTP not to be confused...Semantics, no it's not REST

You won't �nd the GET/POST/DELETE/PATCH

Not everything is a resource

Page 33: GRPC 101 - DevFest Belgium 2016

Code session

Page 34: GRPC 101 - DevFest Belgium 2016

Gravity RPC

Page 35: GRPC 101 - DevFest Belgium 2016

GRPC: Unique Features

Page 36: GRPC 101 - DevFest Belgium 2016

ExtensibleFrom the ground up

Page 37: GRPC 101 - DevFest Belgium 2016

Extensible

Page 38: GRPC 101 - DevFest Belgium 2016

Binding through Context

Page 39: GRPC 101 - DevFest Belgium 2016

Context

Page 40: GRPC 101 - DevFest Belgium 2016

Deadlines

Page 41: GRPC 101 - DevFest Belgium 2016

Cancel

Page 42: GRPC 101 - DevFest Belgium 2016

Versioning Strategies

Page 43: GRPC 101 - DevFest Belgium 2016

Versioningmessage Blip { google.protobuf.Timestamp timestamp = 1; BlipType blip_type = 2; Coordinate coordinate = 3; Planet planet = 4; Missle missle = 5; }

Proto message �elds are tagged

Page 44: GRPC 101 - DevFest Belgium 2016

Versioningmessage Blip { google.protobuf.Timestamp timestamp = 1; BlipType blip_type = 2; Coordinate coordinate = 3; Planet planet = 4; Missle missle = 5; Base base = 6; }

Extend messages by adding unique tags

Page 45: GRPC 101 - DevFest Belgium 2016

Versioningmessage Blip { google.protobuf.Timestamp timestamp = 1; BlipType blip_type = 2; Coordinate coordinate = 3; Planet planet = 4; Base base = 6;

reserved 5; reserved "missle" }

Reserve �eld names and tags for deprecation

Page 46: GRPC 101 - DevFest Belgium 2016

Versioningpackage grpc.health.v1; option csharp_namespace = "Grpc.Health.V1";

option java_multiple_files = true; option java_package = "io.grpc.health.v1"; option java_outer_classname = "HealthProto";

Using package names to introduce big changes

Page 47: GRPC 101 - DevFest Belgium 2016

First Class Microservice ProtocolSimplePerformant and ScalableInteroperable and ExtensibleLanguage Support

Page 48: GRPC 101 - DevFest Belgium 2016

http://www.grpc.io/

Q & AGRPC 101

by Alex Van Boxel(@alexvb)