grpc 101 - devfest belgium 2016
TRANSCRIPT
![Page 1: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/1.jpg)
GRPC 101by Alex Van Boxel (@alexvb)
![Page 2: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/2.jpg)
Alex Van BoxelSoftware Architect @ Vente-Exclusive.com
Google Cloud Developer Expert
![Page 4: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/4.jpg)
Remember RPC
![Page 5: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/6.jpg)
History: DCOMOh, my... If you think COM is scary...
D-COM
![Page 7: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/7.jpg)
History: RMIQuite OK... but interop?!
![Page 8: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/8.jpg)
History: SOAPInterop, but XML
Sooo, slow
WS-* (dead-star)
![Page 9: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/9.jpg)
RESTResource Oriented
JSON over REST
Successful model
![Page 10: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/10.jpg)
So why RPC again?!
![Page 11: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/11.jpg)
Microservices
![Page 12: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/12.jpg)
GRPC Remote ProcedureCall
![Page 13: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/14.jpg)
SimplePerformant and ScalableInteroperable and Extensible
![Page 15: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/15.jpg)
Protobuffer 3IDLHTTP/2
![Page 16: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/16.jpg)
Protocol BufferStructured representation of Data
IDL: Interface Defenition Language
Binary format
Well-Know Types
![Page 17: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/17.jpg)
Proto: Code Generation
![Page 18: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/18.jpg)
Proto: LanguagesJava, C++, Node.JS, Ruby, Python, ObjectiveC, Go, PHP
![Page 19: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/19.jpg)
Proto: Messagessyntax = "proto3";
message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; }
![Page 20: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/20.jpg)
Proto: Servicesservice SearchService { rpc Search (SearchRequest) returns (SearchResponse); }
![Page 21: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/22.jpg)
HTTP/2
![Page 23: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/23.jpg)
HTTP/2Binary
Multiplexing
![Page 24: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/24.jpg)
HTTP/1 vs HTTP/2
![Page 25: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/25.jpg)
![Page 26: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/26.jpg)
HTTP/2Binary
Multiplexing
Secure
![Page 27: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/27.jpg)
HTTP/1 TLS keys
![Page 28: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/28.jpg)
HTTP/2Binary
Multiplexing
Secure
Streaming
![Page 29: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/29.jpg)
HTTP/2: StreamingServer Side Streaming
Client Side Streaming
Bi-Directional Streaminf
![Page 30: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/31.jpg)
GRPC_STATUS_CANCELLED Client applicationcancelled therequest
...
![Page 32: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/33.jpg)
Code session
![Page 34: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/34.jpg)
Gravity RPC
![Page 35: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/35.jpg)
GRPC: Unique Features
![Page 36: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/36.jpg)
ExtensibleFrom the ground up
![Page 37: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/37.jpg)
Extensible
![Page 38: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/38.jpg)
Binding through Context
![Page 39: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/39.jpg)
Context
![Page 40: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/40.jpg)
Deadlines
![Page 41: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/41.jpg)
Cancel
![Page 42: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/42.jpg)
Versioning Strategies
![Page 43: GRPC 101 - DevFest Belgium 2016](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042707/586fdd231a28ab18428b675f/html5/thumbnails/47.jpg)
First Class Microservice ProtocolSimplePerformant and ScalableInteroperable and ExtensibleLanguage Support