SlideShare a Scribd company logo
1 of 92
gRPC-Web:
It’s All About Communication
DEVOXX UKRAINE
NOVEMBER 2, 2019
Alex BORYSOV
Yevgen GOLUBENKO
@aiborisov
@HalloGene_
Images contained in this presentation
are the property of Netflix Inc. and
cannot be reused
Yevgen
GOLUBENKO
Anomali
@HalloGene_
@aiborisov
@HalloGene_
Alex
BORYSOV
Netflix
@aiborisov
@aiborisov
@HalloGene_
YOU?
@aiborisov
@HalloGene_
YOU?
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
gRPC BEFORE gRPC-WEB
@aiborisov
@HalloGene_
FRONTEND
THINGS
DEMO
@aiborisov
@HalloGene_
DEMOGORGON
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
UPDATE SCORE
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
UPDATE SCORE
API
GATEWAY
@aiborisov
@HalloGene_
HANDMADE JSON?
“DOCS ARE UP TO DATE”
THEY SAID
@aiborisov
@HalloGene_
HOW ABOUT IDL?
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
API FIRST
GATEWAY
@aiborisov
@HalloGene_
GATEWAY
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
API CODE REVIEW
@aiborisov
@HalloGene_
API CODE REVIEW
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
APIs code reviews
Language-neutral contract
@aiborisov
@HalloGene_
PROTO API FIRST
APIs code reviews
Language-neutral contract
APIs DON’T LIE
@aiborisov
@HalloGene_
PROTO API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
gRPC CODE GEN
@aiborisov
@HalloGene_
● Java
● Go
● C/C++
● C#
● Node.js
● PHP
● Ruby
● Python
● Dart
● Objective-C
gRPC SPEAKS YOUR
LANGUAGE
@aiborisov
@HalloGene_
● Linux
● MacOS
● Windows
● Android
● iOS
● Web
gRPC CODE GEN
@aiborisov
@HalloGene_
● Linux
● MacOS
● Windows
● Android
● iOS
● Web
gRPC CODE GEN
@aiborisov
@HalloGene_
gRPC INTEROP
Java
Service
Python
Service
GoLang
Service
C++
Service
gRPC
Service
gRPC
Stub
gRPC
Stub
gRPC
Stub
gRPC
Service
gRPC
Service
gRPC
Service
gRPC
Stub
gRPC-
Web
Stub
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
Supported import styles:
closure, commonjs, commonjs+dts, typescript
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
https://github.com/grpc/grpc/blob/
master/doc/PROTOCOL-HTTP2.md
Requests / Responses
HTTP/2 Transport Mapping
Connection Management
Security
Error Handling
gRPC over HTTP/2
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
@aiborisov
@HalloGene_
WE NEED A GATE!
@aiborisov
@HalloGene_
gRPC-Web Spec
https://github.com/grpc/grpc/blob/
master/doc/PROTOCOL-WEB.md
Support any HTTP/*
Support web-specific features
Can became optional with WHATWG
Streams Standard (future)
WE NEED A GATE!
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
PROXY
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
PROXY
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
static_resources:
listeners:
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
route_config:
virtual_hosts:
- name: local_service
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY PROXY
Fault
Tolerance
Service
Discovery
Load
Balancing
Health
Checking
gRPC
Service
gRPC
Stub
@aiborisov
@HalloGene_
gRPC over HTTP/*
gRPC
Service
gRPC
Stub
gRPC-
Web
Stub
DEMOGORGON
@aiborisov
@HalloGene_
TOOLS
@aiborisov
@HalloGene_
TOOLS: CLI
@aiborisov
@HalloGene_
grpc_cli
grpcurl
polyglot
grpcc
gcall
Evans
TOOLS: CLI
@aiborisov
@HalloGene_
grpc_cli
grpcurl
polyglot
grpcc
gcall
Evans
TOOLS: GRPCURL
@aiborisov
@HalloGene_
TOOLS: GUI
@aiborisov
@HalloGene_
gRPCox
gRPC-Swagger
BloomRPC
grpcui
letmegrpc
MuninRPC
CLI tools
GUI tools
Testing tools and more
@aiborisov
@HalloGene_
gRPC ECOSYSTEM
API CHANGES
@aiborisov
@HalloGene_
message
repeated
repeated
API CHANGES
@aiborisov
@HalloGene_
message
repeated
repeated
message
int32
API CHANGES
@aiborisov
@HalloGene_
message
repeated
repeated
message
int32
+ GooseType goose_type = 2;
API CHANGES: SAFELY ADD/REMOVE FIELDS
@aiborisov
@HalloGene_
UNCOVER THE TRUTH
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
syntax = "proto3";
service ServerReflection {
rpc ListApis (ListApisRequest) returns (ListApisResponse);
rpc GetMethod (GetMethodRequest)
returns (GetMethodResponse);
}
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
val grpcServer = ServerBuilder.forPort(SERVER_PORT)
.addService(fixtureService)
.addService(leaderboardService)
.addService(ProtoReflectionService.newInstance())
.build();
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
val grpcServer = ServerBuilder.forPort(SERVER_PORT)
.addService(fixtureService)
.addService(leaderboardService)
.addService(ProtoReflectionService.newInstance())
.build();
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 list
game.FixtureService
game.LeaderboardService
grpc.reflection.v1alpha.ServerReflection
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 describe 
game.FixtureService
game.FixtureService is a service:
service FixtureService {
rpc GetFixture ( .game.GetFixtureRequest )
returns ( .game.FixtureResponse );
}
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 describe 
game.FixtureResponse
game.FixtureResponse is a message:
message FixtureResponse {
repeated .game.FixtureLine lines = 1;
}
@aiborisov
@HalloGene_
gRPC TIMEOUT
generatePlayerId = () => {
const request = new GeneratePlayerIdRequest();
const metadata = {};
return playerIdServicePromiseClient.generatePlayerId(request, metadata);
}
@aiborisov
@HalloGene_
gRPC DEADLINE
generatePlayerId = () => {
const request = new GeneratePlayerIdRequest();
const deadline = (new Date()).getTime() + timeoutInMillis;
const metadata = { deadline };
return playerIdServicePromiseClient.generatePlayerId(request, metadata);
}
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
gRPC
Service
Canonical gRPC Status Codes
Deadline Support
Deadline Propagation
@aiborisov
@HalloGene_
gRPC ERROR CODES
@aiborisov
@HalloGene_
API
@aiborisov
@HalloGene_
One request, one response
Requests can be redundant
Polling interval?
API: UNARY
@aiborisov
@HalloGene_
One request, multiple responses
Real-time updates
gRPC-Web: supports
server-side streaming
API: STREAMING
@aiborisov
@HalloGene_
gRPC-WEB STREAMING
syntax = "proto3";
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
gRPC-WEB STREAMING
syntax = "proto3";
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Subscribes to top scores updates
rpc StreamTopScores (TopScoresRequest) returns (stream TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
DEMO: UA.GRPCWEB.COM
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
gRPC: grpc.io
https://github.com
/grpc/grpc-web
/grpc-ecosystem/awesome-grpc
/break-me-if-you-can/services/ui
http://slides-web.grpc.guru
http://jobs.grpc.guru
LEARN MORE
@aiborisov
@HalloGene_
gRPC-WEB
THINGS
Canonical proto APIs
No more handcrafted JSONs
Canonical status codes
Server streaming
Well-defined domain methods
SPECIAL THANKS: MYKYTA PROTSENKO
@aiborisov
@HalloGene_
SPECIAL THANKS: THE STRANGER THINGS CREW
@aiborisov
@HalloGene_
SPECIAL THANKS: YOU
@aiborisov
@HalloGene_

More Related Content

What's hot

DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...
DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...
DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...Alex Borysov
 
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 editionAlex Borysov
 
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 editionAlex Borysov
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!Alex Borysov
 
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Alex Borysov
 
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Alex Borysov
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...Vladimir Dejanovic
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPDaniel Stenberg
 
Docker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerDocker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerBoyd Hemphill
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurlDaniel Stenberg
 
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]Vladimir Dejanovic
 
2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST SecurityDavid Blevins
 
Http3 fullstackfest-2019
Http3 fullstackfest-2019Http3 fullstackfest-2019
Http3 fullstackfest-2019Daniel Stenberg
 
A Modest Introduction To Swift
A Modest Introduction To SwiftA Modest Introduction To Swift
A Modest Introduction To SwiftJohn Anderson
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to SwiftJohn Anderson
 

What's hot (20)

DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...
DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...
DevNexus 2020 "Break me if you can: practical guide to building fault-toleran...
 
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition
"gRPC vs REST: let the battle begin!" DevoxxUK 2018 edition
 
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!
 
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
 
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
 
Curl with rust
Curl with rustCurl with rust
Curl with rust
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTP
 
Docker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerDocker Docker - Docker Security - Docker
Docker Docker - Docker Security - Docker
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurl
 
JavaLand gRPC vs REST API
JavaLand gRPC vs REST APIJavaLand gRPC vs REST API
JavaLand gRPC vs REST API
 
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
 
2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security
 
curl better
curl bettercurl better
curl better
 
HTTP/3 in curl
HTTP/3 in curlHTTP/3 in curl
HTTP/3 in curl
 
HTTP/3 for everyone
HTTP/3 for everyoneHTTP/3 for everyone
HTTP/3 for everyone
 
Http3 fullstackfest-2019
Http3 fullstackfest-2019Http3 fullstackfest-2019
Http3 fullstackfest-2019
 
A Modest Introduction To Swift
A Modest Introduction To SwiftA Modest Introduction To Swift
A Modest Introduction To Swift
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to Swift
 

Similar to "gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019

DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017Baruch Sadogursky
 
Take a Groovy REST
Take a Groovy RESTTake a Groovy REST
Take a Groovy RESTRestlet
 
Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014Arun Gupta
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...Baruch Sadogursky
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Chang W. Doh
 
A little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierA little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierCocoaHeads France
 
Let's Get Physical
Let's Get PhysicalLet's Get Physical
Let's Get PhysicalJoel Lord
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!Liz Frost
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd IntroductionKentaro Ebisawa
 
Révolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamiqueRévolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamiqueRaphaël PINSON
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deploymentbaremetal
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffPatrick Shuff
 
WordPress - Whats going on in the server?
WordPress - Whats going on in the server? WordPress - Whats going on in the server?
WordPress - Whats going on in the server? Herb Miller
 
Kernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSKernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSDocker, Inc.
 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Kirill Chebunin
 
File Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of CatsFile Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of CatsEvan Sultanik
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scalebaremetal
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017Baruch Sadogursky
 

Similar to "gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019 (20)

DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
 
Take a Groovy REST
Take a Groovy RESTTake a Groovy REST
Take a Groovy REST
 
Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014Nuts and Bolts of WebSocket Devoxx 2014
Nuts and Bolts of WebSocket Devoxx 2014
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
A little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierA little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire Lhotellier
 
Let's Get Physical
Let's Get PhysicalLet's Get Physical
Let's Get Physical
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd Introduction
 
Révolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamiqueRévolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamique
 
An API Your Parents Would Be Proud Of
An API Your Parents Would Be Proud OfAn API Your Parents Would Be Proud Of
An API Your Parents Would Be Proud Of
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deployment
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
 
WordPress - Whats going on in the server?
WordPress - Whats going on in the server? WordPress - Whats going on in the server?
WordPress - Whats going on in the server?
 
Kernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSKernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVS
 
Origins of Serverless
Origins of ServerlessOrigins of Serverless
Origins of Serverless
 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?
 
File Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of CatsFile Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of Cats
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scale
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at QCon NYC 2017
 

More from Alex Borysov

CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...Alex Borysov
 
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Alex Borysov
 
"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017Alex Borysov
 
"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017Alex Borysov
 
"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017Alex Borysov
 
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
 

More from Alex Borysov (6)

CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
 
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
 
"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017
 
"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017
 
"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017
 
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.
 

Recently uploaded

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 

Recently uploaded (20)

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 

"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019