SlideShare a Scribd company logo
1 of 138
gRPC Cornerstone:
HTTP/2… or HTTP/3?
Oct 13, 2022
Devoxx Belgium
Alex BORYSOV
Mykyta PROTSENKO
@aiborisov
@mykyta_p
Manage Profiles
Mykyta Alex
Who’s presenting?
@aiborisov
@mykyta_p
Manage Profiles
Mykyta Alex
Who’s presenting?
@aiborisov
@mykyta_p
gRPC?
The image is property of Netflix Inc. and cannot be reused
@aiborisov
@mykyta_p
schemes:
- "https"
- "http"
paths:
/currency:
post:
summary: "Create new currency"
description: "Create a new currency to be used in minting"
operationId: "createCurrency"
consumes:
- "application/json"
produces:
- "application/json"
responses:
"200":
description: "Success"
schema:
$ref: "#/definitions/Currency"
"400":
description: "Invalid input"
get:
summary: "List existing currencies"
description: "List existing currencies sorted by most minted coins"
operationId: "getTopMintedCurrencies"
produces:
- "application/json"
responses:
"200":
description: "successful operation"
schema:
type: "array"
items:
$ref: "#/definitions/Currency"
"500":
description: "Internal server error"
/currency/{currency}:
put:
parameters:
- name: "currency"
in: "path"
required: true
description: "Currency object to be created"
type: "string"
summary: "Mint currency"
description: "Create more coins for a given currency"
operationId: "mint"
consumes:
- "application/json"
produces:
- "application/json"
responses:
"200":
description: "Success"
schema:
$ref: "#/definitions/Currency"
"400":
description: "Invalid input"
REST API DEFINITIONS (DON’T READ!)
@aiborisov
@mykyta_p
syntax = "proto3";
service MintService {
rpc CreateCurrency (CreateCurrencyRequest)
returns (CreateCurrencyResponse);
rpc Mint (MintRequest) returns (MintResponse);
}
gRPC API DEFINITIONS
@aiborisov
@mykyta_p
MINT SERVICE
gRPC
Stub
gRPC
Service
MINT.PROTO
gRPC over
HTTP/2
@aiborisov
@mykyta_p
gRPC: TROUBLESHOOTING and TUNING?
The image is property of Netflix Inc. and cannot be reused
@aiborisov
@mykyta_p
HTTP over TCP
SERVER
TCP
TCP
TCP
TCP
TCP
HTTP/1
@aiborisov
@mykyta_p
HTTP/2
HTTP/2 STREAMS
…
@aiborisov
@mykyta_p
HTTP/2
HTTP/2 STREAMS
…
TCP
@aiborisov
@mykyta_p
HTTP/2 FRAME
LENGTH (24)
FLAGS (8)
TYPE (8)
STREAM ID (31)
FRAME PAYLOAD
(0 … )
HTTP/2
TCP
@aiborisov
@mykyta_p
HTTP/2
TCP
SID 1
@aiborisov
@mykyta_p
HTTP/2
TCP
SID 1
SID 3
@aiborisov
@mykyta_p
HTTP/2
…
TCP
SID 1
SID 3
SID X
@aiborisov
@mykyta_p
HTTP/2
…
TCP
SID 1 SID 1
@aiborisov
@mykyta_p
HTTP/1.1
TCP
TCP
TCP
TCP
TCP
@aiborisov
@mykyta_p
Icons https://commons.wikimedia.org/wiki/File:Feather-core-shopping-cart.svg
MIT License
HTTP/1.1: HEAD-OF-LINE BLOCKING
TCP
TCP
TCP
TCP
TCP
???
@aiborisov
@mykyta_p
Icons https://commons.wikimedia.org/wiki/File:Feather-core-shopping-cart.svg
MIT License
HTTP/2
SID 1 SID 1
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/milk_1626757, https://www.flaticon.com/free-icon/beet_7179853,
https://www.flaticon.com/premium-icon/bread_750878, https://www.flaticon.com/free-icon/strawberry_7189510
HTTP/2
SID 1
SID 3
SID 1
SID 3
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/milk_1626757, https://www.flaticon.com/free-icon/beet_7179853,
https://www.flaticon.com/premium-icon/bread_750878, https://www.flaticon.com/free-icon/strawberry_7189510
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS
REQUEST
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS
REQUEST
DATA
DATA
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS
RESPONSE
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS
RESPONSE
DATA
DATA
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS HEADERS
RESPONSE
DATA
DATA
@aiborisov
@mykyta_p
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
gRPC over HTTP/2
HEADERS
REQUEST
HEADERS HEADERS
RESPONSE
DATA
DATA
DATA
DATA
@aiborisov
@mykyta_p
STREAMS? CONNECTIONS?
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
syntax = "proto3";
service MintService {
rpc CreateCurrency (CreateCurrencyRequest)
returns (CreateCurrencyResponse);
rpc Mint (MintRequest) returns (MintResponse);
}
gRPC API
@aiborisov
@mykyta_p
val channel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.build();
val mintClient =
MintServiceGrpc
.newStub(channel);
gRPC Channel
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
val channel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.build();
val mintClient =
MintServiceGrpc
.newStub(channel);
gRPC Channel
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
val channel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.build();
val mintClient =
MintServiceGrpc
.newStub(channel);
mintClient.mint(req, ...);
gRPC Channel
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
MINT
SERVICE
CHANNEL
MINT
SERVICE
MINT
SERVICE
gRPC
@aiborisov
@mykyta_p
MINT
SERVICE
CHANNEL
MINT
SERVICE
MINT
SERVICE
gRPC
@aiborisov
@mykyta_p
MINT
SERVICE
CHANNEL
MINT
SERVICE
MINT
SERVICE
gRPC
@aiborisov
@mykyta_p
MINT
SERVICE
CHANNEL
MINT
SERVICE
MINT
SERVICE
gRPC
@aiborisov
@mykyta_p
Mint Request
HEADERS: streamId=35 endStream=false
:path: /MintService/Mint
:method: POST
:scheme: http
grpc-timeout: 1S
x-user-agent: grpc-web-javascript/0.1
content-type: application/grpc
@aiborisov
@mykyta_p
Mint Request
HEADERS: streamId=35 endStream=false
:path: /MintService/Mint
:method: POST
:scheme: http
grpc-timeout: 1S
x-user-agent: grpc-web-javascript/0.1
content-type: application/grpc
@aiborisov
@mykyta_p
Mint Request
HEADERS: streamId=35 endStream=false
:path: /MintService/Mint
:method: POST
:scheme: http
grpc-timeout: 1S
x-user-agent: grpc-web-javascript/0.1
content-type: application/grpc
DATA: streamId=35 endStream=true length=25
bytes=00000000140a126469706c6f6d61746963436f696e39383033
@aiborisov
@mykyta_p
Mint Request
HEADERS: streamId=35 endStream=false
:path: /MintService/Mint
:method: POST
:scheme: http
grpc-timeout: 1S
x-user-agent: grpc-web-javascript/0.1
content-type: application/grpc
DATA: streamId=35 endStream=true length=25
bytes=00000000140a126469706c6f6d61746963436f696e39383033
@aiborisov
@mykyta_p
Mint Response
HEADERS: streamId=35 endStream=false
:status: 200
content-type: application/grpc
grpc-accept-encoding: gzip
@aiborisov
@mykyta_p
Mint Response
HEADERS: streamId=35 endStream=false
:status: 200
content-type: application/grpc
grpc-accept-encoding: gzip
DATA: streamId=35 padding=0 endStream=false length=8
bytes=000000000308e402
@aiborisov
@mykyta_p
Mint Response
HEADERS: streamId=35 endStream=false
:status: 200
content-type: application/grpc
grpc-accept-encoding: gzip
DATA: streamId=35 padding=0 endStream=false length=8
bytes=000000000308e402
HEADERS: streamId=35 endStream=true
grpc-status: 0
@aiborisov
@mykyta_p
Mint Response
HEADERS: streamId=35 endStream=false
:status: 200
content-type: application/grpc
grpc-accept-encoding: gzip
DATA: streamId=35 padding=0 endStream=false length=8
bytes=000000000308e402
HEADERS: streamId=35 endStream=true
grpc-status: 0
@aiborisov
@mykyta_p Icons used: https://www.flaticon.com/free-icon/beet_7179853, https://www.flaticon.com/premium-icon/bread_750878
service MintService {
rpc Mint (stream MintRequest)
returns (stream MintResponse);
}
gRPC STREAMING
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC STREAMING
DATA
HEADERS DATA DATA
[EOS]
…
REQUEST
STREAM
@aiborisov
@mykyta_p
gRPC STREAMING
REQUEST
STREAM
RESPONSE
STREAM
DATA
HEADERS DATA DATA
[EOS]
…
DATA
HEADERS
[EOS]
DATA HEADERS
…
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
GOAWAY
I’M SHUTTING
DOWN
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
NO MINT
SERVICE
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
NO MINT
SERVICE
PING
STILL HERE?
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
NO MINT
SERVICE
I DIDN’T
HEAR BACK
@aiborisov
@mykyta_p
MINT
SERVICE
MINT
SERVICE
CONNECTION MANAGEMENT
@aiborisov
@mykyta_p
FAILED CALLS
DEADLINE_EXCEEDED ?
CANCELED ?
UNAVAILABLE ?
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
GRACEFUL SHUTDOWN
GOAWAY: lastStreamId=39
errorCode=0
length=13
bytes=...
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
STREAM TERMINATION
RST_STREAM: streamId=37
errorCode=8
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
PING
PING: ack=false
PING: ack=true
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
READ BINARY FRAMES
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
logging.properties
handlers=java.util.logging.ConsoleHandler
io.grpc.netty.level=FINE
java.util.logging.ConsoleHandler.level=FINE
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
ENABLE NETTY FRAME LOGGING
@aiborisov
@mykyta_p
logging.properties
handlers=java.util.logging.ConsoleHandler
io.grpc.netty.level=FINE
java.util.logging.ConsoleHandler.level=FINE
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
ENABLE NETTY FRAME LOGGING
@aiborisov
@mykyta_p
BACKEND ARCHITECTURE
GATEWAY MINT LEDGER
@aiborisov
@mykyta_p
BACKEND ARCHITECTURE
GATEWAY MINT LEDGER
MINT
@aiborisov
@mykyta_p
BACKEND ARCHITECTURE
GATEWAY MINT LEDGER
MINT
@aiborisov
@mykyta_p
BACKEND ARCHITECTURE
GATEWAY MINT LEDGER
MINT
@aiborisov
@mykyta_p
HOW TO CORRELATE STREAMS ?
GATEWAY MINT LEDGER
@aiborisov
@mykyta_p
STREAM ID 1 STREAM ID 43 STREAM ID 91
// Example with Brave
var grpcTracing = GrpcTracing.create(rpcTracing);
val channel = ManagedChannelBuilder
.forTarget(“mint:8089”)
.intercept(grpcTracing.newClientInterceptor())
.build();
ADD TRACING OF YOUR CHOICE
@aiborisov
@mykyta_p
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND HEADERS: streamId=77 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, ..., x-b3-traceid: e5dde89783d20c01] padding=0
endStream=false
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND DATA: streamId=77 padding=0 endStream=false length=22
bytes=00000000110a0f44796e616d6963436f696e34373831
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND DATA: streamId=77 padding=0 endStream=true length=0 bytes=
BINARY FRAME LOGS: EXAMPLE
@aiborisov
@mykyta_p
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND HEADERS: streamId=77 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, ..., x-b3-traceid: e5dde89783d20c01] padding=0
endStream=false
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND DATA: streamId=77 padding=0 endStream=false length=22
bytes=00000000110a0f44796e616d6963436f696e34373831
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND DATA: streamId=77 padding=0 endStream=true length=0 bytes=
BINARY FRAME LOGS: EXAMPLE
@aiborisov
@mykyta_p
$ grep "x-b3-traceid: e5dde89783d20c01"
FINE: [id: 0xed04e7b3, L:/10.92.128.67:8090 - R:/10.92.128.2:36350]
INBOUND HEADERS: streamId=77 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, ..., x-b3-traceid: e5dde89783d20c01] padding=0
endStream=false
FINE: [id: 0xdc6c37f1, L:/10.92.128.67:42272 - R:mint/10.93.0.113:8091]
OUTBOUND HEADERS: streamId=43 headers=GrpcHttp2OutboundHeaders[path:
/MintService/Mint, ..., x-b3-traceid: e5dde89783d20c01] streamDependency=0
weight=16 exclusive=false padding=0 endStream=false
BINARY FRAME LOGS: CORRELATE
@aiborisov
@mykyta_p
CORRELATE STREAMS
GATEWAY MINT
@aiborisov
@mykyta_p
STREAM
ID 77
STREAM
ID 43
TRACE ID
e5dde89783d20c01
io.grpc.StatusRuntimeException: CANCELLED: Call cancelled
at io.grpc.Status.asRuntimeException(Status.java:535)
CANCELLED STATUS
GATEWAY
@aiborisov
@mykyta_p
Oct 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0x81f2d1b4, L:/10.86.128.132:8090 - R:/10.86.129.131:43730]
INBOUND RST_STREAM: streamId=21 errorCode=8
Oct 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0xa0d0f73c, L:/10.86.128.132:41210 - R:mint/10.87.3.240:8091]
OUTBOUND RST_STREAM: streamId=37 errorCode=8
LOOK FOR RST_STREAM IN GATEWAY LOGS
@aiborisov
@mykyta_p
Oct 13, 2022 7:44:30 PM logHeaders FINE: [...]
INBOUND HEADERS: streamId=21 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, …, x-b3-traceid: 7845c28350959cc0] …
Oct 13, 2022 7:44:30 PM logData FINE: [id: 0x81f2d1b4, …]
INBOUND DATA: streamId=21 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0x81f2d1b4, ...] INBOUND RST_STREAM: streamId=21 errorCode=8
FIND FRAMES BY STREAM BY ID (21)
@aiborisov
@mykyta_p
Oct 13, 2022 7:44:30 PM logHeaders FINE: [...]
INBOUND HEADERS: streamId=21 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, …, x-b3-traceid: 7845c28350959cc0] …
Oct 13, 2022 7:44:30 PM logData FINE: [id: 0x81f2d1b4, …]
INBOUND DATA: streamId=21 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0x81f2d1b4, ...] INBOUND RST_STREAM: streamId=21 errorCode=8
NOTE TRACE ID
@aiborisov
@mykyta_p
Oct 13, 2022 7:44:30 PM logHeaders FINE: [...]
INBOUND HEADERS: streamId=21 headers=GrpcHttp2RequestHeaders[:path:
/GatewayService/Mint, …, x-b3-traceid: 7845c28350959cc0] …
Oct 13, 2022 7:44:30 PM logHeaders
FINE: [id: 0xa0d0f73c, L:/10.86.128.132:41210 - R:mint/10.87.3.240:8091]
OUTBOUND HEADERS: streamId=37 headers=GrpcHttp2OutboundHeaders[:path:
/MintService/Mint, ..., x-b3-traceid: 7845c28350959cc0] padding=0
endStream=false
FIND CORRELATED STREAMS BY TRACE ID
@aiborisov
@mykyta_p
Oct 13, 2022 7:44:30 PM logHeaders FINE: [id: 0xa0d0f73c, ...]
OUTBOUND HEADERS: streamId=37 headers=GrpcHttp2OutboundHeaders[:path:
/MintService/Mint, ..., x-b3-traceid: 7845c28350959cc0] padding=0
endStream=false
Oct 13, 2022 7:44:30 PM logData FINE: [id: 0xa0d0f73c, ...]
OUTBOUND DATA: streamId=37 padding=0 endStream=true length=16 bytes=...
Apr 13, 2022 7:44:30 PM logRstStream FINE: [id: 0xa0d0f73c, ...]
OUTBOUND RST_STREAM: streamId=37 errorCode=8
GATEWAY LOGS: OUTBOUND STREAM 37
@aiborisov
@mykyta_p
Apr 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0xb2a8c95d, L:/10.86.129.2:8091 - R:/10.86.128.132:55176]
INBOUND RST_STREAM: streamId=37 errorCode=8
Apr 13, 2022 7:44:30 PM logRstStream
FINE: [id: 0xe7c5ca6d, L:/10.86.129.2:48758 - R:ledger/10.87.3.172:8092]
OUTBOUND RST_STREAM: streamId=43 errorCode=8
MINT SERVICE LOGS
@aiborisov
@mykyta_p
CANCELLED STATUS: CLIENT CANCELLATION
GATEWAY MINT LEDGER
@aiborisov
@mykyta_p
io.grpc.StatusRuntimeException: CANCELLED: Call cancelled
at io.grpc.Status.asRuntimeException(Status.java:535)
CANCELLED STATUS (AGAIN)
GATEWAY
@aiborisov
@mykyta_p
Oct 13, 2022 5:28:23 PM logHeaders FINE: [id: 0xfc1722f6, …]
OUTBOUND HEADERS: streamId=17 headers=GrpcHttp2OutboundHeaders[:path:
/MintService/Mint, ...] padding=0 endStream=false
Oct 13, 2022 5:28:23 PM logData FINE: [id: 0xfc1722f6, …]
OUTBOUND DATA: streamId=17 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0xfc1722f6, L:/10.86.128.132:41210 - R:mint/10.87.3.240:8091]
INBOUND HEADERS: streamId=17 headers=GrpcHttp2ResponseHeaders[:status:
200, content-type: application/grpc, grpc-status: 1, grpc-message: Call cancelled]
padding=0 endStream=true
GATEWAY LOGS: NO INBOUND RST_STREAM
@aiborisov
@mykyta_p
Oct 13, 2022 5:28:23 PM logHeaders FINE: [id: 0xfc1722f6, …]
OUTBOUND HEADERS: streamId=17 headers=GrpcHttp2OutboundHeaders[:path:
/MintService/Mint, ...] padding=0 endStream=false
Oct 13, 2022 5:28:23 PM logData FINE: [id: 0xfc1722f6, …]
OUTBOUND DATA: streamId=17 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0xfc1722f6, L:/10.86.128.132:41210 - R:mint/10.87.3.240:8091]
INBOUND HEADERS: streamId=17 headers=GrpcHttp2ResponseHeaders[:status:
200, content-type: application/grpc, grpc-status: 1, grpc-message: Call cancelled]
padding=0 endStream=true
GATEWAY LOGS: CANCELLATION FROM MINT
@aiborisov
@mykyta_p
MINT SERVICE LOGS
Oct 13, 2022 5:28:23 PM logHeaders FINE: [id: 0x5ca89c01, …]
INBOUND HEADERS: streamId=17 headers=GrpcHttp2RequestHeaders[:path:
/MintService/Mint, :authority: mint:8091, …, x-b3-traceid: 0b9db47309315af2]
endStream=false
Oct 13, 2022 5:28:23 PM logData FINE: [id: 0x5ca89c01, …]
INBOUND DATA: streamId=17 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0x5ca89c01, L:/10.86.129.2:8091 - R:/10.86.128.132:44564]
OUTBOUND HEADERS: streamId=17 headers=GrpcHttp2OutboundHeaders[:status:
200, grpc-status: 1, grpc-message: Call cancelled] padding=0 endStream=true
@aiborisov
@mykyta_p
MINT SERVICE LOGS: TRACE ID
Oct 13, 2022 5:28:23 PM logHeaders FINE: [id: 0x5ca89c01, …]
INBOUND HEADERS: streamId=17 headers=GrpcHttp2RequestHeaders[:path:
/MintService/Mint, :authority: mint:8091, …, x-b3-traceid: 0b9db47309315af2]
endStream=false
Oct 13, 2022 5:28:23 PM logData FINE: [id: 0x5ca89c01, …]
INBOUND DATA: streamId=17 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0x5ca89c01, L:/10.86.129.2:8091 - R:/10.86.128.132:44564]
OUTBOUND HEADERS: streamId=17 headers=GrpcHttp2OutboundHeaders[:status:
200, grpc-status: 1, grpc-message: Call cancelled] padding=0 endStream=true
@aiborisov
@mykyta_p
MINT SERVICE LOGS: BY TRACE ID
Oct 13, 2022 5:28:23 PM logHeaders FINE: [id: 0x5ca89c01, …]
INBOUND HEADERS: streamId=17 headers=GrpcHttp2RequestHeaders[:path:
/MintService/Mint, :authority: mint:8091, …, x-b3-traceid: 0b9db47309315af2]
endStream=false
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0xeab70334, L:/10.86.129.2:52928 - R:ledger/10.87.3.172:8092]
OUTBOUND HEADERS: streamId=55
headers=GrpcHttp2OutboundHeaders[::authority: ledger:8092, :path:
/LedgerService/RecordMinting, …, x-b3-traceid: 0b9db47309315af2]
endStream=false
@aiborisov
@mykyta_p
MINT SERVICE LOGS: OUTBOUND STREAM 55
Oct 13, 2022 5:28:23 PM logHeaders
FINE: [id: 0xeab70334, L:/10.86.129.2:52928 - R:ledger/10.87.3.172:8092]
OUTBOUND HEADERS: streamId=55
headers=GrpcHttp2OutboundHeaders[::authority: ledger:8092, :path:
/LedgerService/RecordMinting, …, x-b3-traceid: 0b9db47309315af2]
endStream=false
Oct 13, 2022 5:28:23 PM logData FINE: [id: 0xeab70334, . . .]
OUTBOUND DATA: streamId=55 padding=0 endStream=true length=16 bytes=...
Oct 13, 2022 5:28:23 PM logRstStream
FINE: [id: 0xeab70334, L:/10.86.129.2:52928 - R:ledger/10.87.3.172:8092]
OUTBOUND RST_STREAM: streamId=55 errorCode=8
@aiborisov
@mykyta_p
CANCELLED STATUS: SERVER CANCELLATION
GATEWAY LEDGER
@aiborisov
@mykyta_p
FAILED CALLS ?
Inspect:
Metrics + Status Codes
Exceptions
Frame Logs
Binary Logs
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
FRAME LOGS
Types:
HEADERS
DATA
RST_STREAM
GOAWAY
PING
https://github.com/grpc/grpc/blob/
master/doc/PROTOCOL-HTTP2.md
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
BINARY LOGS
Machine-readable
var binaryLog =
BinaryLogs.createBinaryLog();
var channelWithBinaryLogs =
binaryLog.wrapChannel(channel);
var server = ServerBuilder
.forPort(port)
.addService(...)
.setBinaryLog(binaryLog)
.build();
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC PERFORMANCE
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
LIMITATION: MAX CONCURRENT STREAMS
HTTP/2 STREAMS
TCP
@aiborisov
@mykyta_p
val regularChannel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.build();
val highLoadChannel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.build();
DEDICATED CHANNEL
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
Use GAX Java ChannelPool
or
pool yourself
POOL OF CHANNELS
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC STREAMING
REQUEST
STREAM
RESPONSE
STREAM
DATA
HEADERS DATA DATA
[EOS]
…
DATA
HEADERS
[EOS]
DATA HEADERS
…
@aiborisov
@mykyta_p
gRPC STREAMING: PROXIES
MINT
GATEWAY
gRPC stream over HTTP/2
@aiborisov
@mykyta_p
gRPC STREAMING: PROXIES
MINT
GATEWAY
@aiborisov
@mykyta_p
gRPC STREAMING: PROXIES
MINT
GATEWAY
I’M KILLING
IDLE
CONNECTIONS
@aiborisov
@mykyta_p
gRPC STREAMING:
KEEP-ALIVE
val channel =
ManagedChannelBuilder
.forTarget(“mint:8089”)
.idleTimeout(1, MINUTES)
.build();
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC STREAMING:
CAVEATS
IDLE CONNECTIONS
LOAD-BALANCING
DEADLINES
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC STREAMING
DON’T USE TO OPTIMIZE
PERFORMANCE
USE TO OPTIMIZE YOUR APP
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
MINT.GRPCTALK.COM
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
AN IETF ORIGINAL SERIES
HTTP
PART 3
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
HTTP/2 FRAMES
TCP
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/milk_1626757, https://www.flaticon.com/free-icon/beet_7179853,
https://www.flaticon.com/premium-icon/bread_750878, https://www.flaticon.com/free-icon/strawberry_7189510
TCP PACKETS
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988
TCP PACKET LOSS
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988, https://www.flaticon.com/free-icon/package_1007989
TCP PACKET LOSS
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988, https://www.flaticon.com/free-icon/package_1007989
RETRANSMIT LOST PACKET(S)
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988
RETRANSMIT LOST PACKET(S)
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988
TCP HEAD-OF-LINE BLOCKING
???
@aiborisov
@mykyta_p
Icons used: https://www.flaticon.com/free-icon/package_1007988, https://www.flaticon.com/free-icon/package_1007989
TCP OR NOT TCP ?
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
QUIC
@aiborisov
@mykyta_p
ON TOP OF UDP
RE-IMPLEMENTS TCP-LIKE
PROPERTIES
The image is property of Netflix Inc. and cannot be reused
HTTP/2 VS HTTP/3
@aiborisov
@mykyta_p
CONNECTIONS
FRAMES
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
PACKETS
IP
QUIC
HTTP/3
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
TCP
HTTP/2
UDP
QUIC
@aiborisov
@mykyta_p
CONNECTIONS
FRAMES
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
PACKETS
HTTP/3
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
TCP
HTTP/2
UDP
IP
QUIC
HTTP/2
@aiborisov
@mykyta_p
CONNECTIONS
FRAMES
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
PACKETS
QUIC
HTTP/3
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
TCP
HTTP/2
UDP
IP
UDP
QUIC: NO HEAD-OF-LINE BLOCKING
@aiborisov
@mykyta_p
CONNECTIONS
FRAMES
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
PACKETS
IP
HTTP/3
CONNECTIONS
STREAMS
FRAMES
LOSS RECOVERY
FLOW CONTROL
PACKETS
TCP
HTTP/2
QUIC
TLS 1.2 VS 0-RTT (TLS 1.3, QUIC)
@aiborisov
@mykyta_p
QUIC
+
TLS
+
HTTP
TCP
TLS 1.3
+
HTTP
TCP
TLS
1.2
HTTP
CONNECTION MIGRATION
@aiborisov
@mykyta_p
HTTP:
IPs + Ports Quadruplet:
Source: 10.86.128.132:41210
Destination: 10.87.3.240:8091
CONNECTION MIGRATION
@aiborisov
@mykyta_p
HTTP:
IPs + Ports Quadruplet:
Source: 10.86.128.132:41210
Destination: 10.87.3.240:8091
QUIC:
Connection ID:
bbf4f6198293…
CONNECTION MIGRATION
@aiborisov
@mykyta_p
GATEWAY
Connection ID: bbf4f…
Icons used: https://www.flaticon.com/premium-icon/wifi_3876106
CONNECTION MIGRATION
@aiborisov
@mykyta_p
GATEWAY
Connection ID: bbf4f…
Icons used: https://www.flaticon.com/free-icon/phone_39934, https://www.flaticon.com/premium-icon/wifi_3876106
HTTP/3
@aiborisov
@mykyta_p
AN INTERNET STANDARD
(AS OF JUNE 2022)
RFC 9114
datatracker.ietf.org/doc/html/
rfc9114
The image is property of Netflix Inc. and cannot be reused
HTTP/3
@aiborisov
@mykyta_p
PRESERVES HTTP* SEMANTICS
The image is property of Netflix Inc. and cannot be reused
HTTP/3
@aiborisov
@mykyta_p
PRESERVES HTTP* SEMANTICS
DELEGATES TO QUIC
STREAM LIFECYCLE
MULTIPLEXING
FLOW CONTROL
The image is property of Netflix Inc. and cannot be reused
@aiborisov
@mykyta_p
HTTP/3 FRAME FORMAT
TYPE (I)
FRAME PAYLOAD
(0 … )
LENGTH (I)
@aiborisov
@mykyta_p
FRAME FORMAT
LENGTH (24)
FLAGS (8)
TYPE (8)
STREAM ID (31)
FRAME PAYLOAD
(0 … )
TYPE (I)
FRAME PAYLOAD
(0 … )
LENGTH (I)
HTTP/3 HTTP/2
HTTP/3 FRAMES TYPES
@aiborisov
@mykyta_p
DATA
HEADERS
SETTINGS
GOAWAY
CANCEL_PUSH
PUSH_PROMISE
MAX_PUSH_ID
Reserved
The image is property of Netflix Inc. and cannot be reused
@aiborisov
@mykyta_p
gRPC OVER HTTP/3
https://github.com/grpc/proposal/blob/master/G2-http3-protocol.md
@aiborisov
@mykyta_p
gRPC OVER HTTP/3
HTTP/3 FRAMES HTTP/2 FRAMES
https://github.com/grpc/proposal/blob/master/G2-http3-protocol.md
HTTP/3 DATA
HTTP/3 HEADERS
QUIC RESET_STREAM
QUIC GOAWAY
QUIC PING
HTTP/2 DATA
HTTP/2 HEADERS
HTTP/2 RST_STREAM
HTTP/2 GOAWAY
HTTP/2 PING
gRPC OVER HTTP/3
@aiborisov
@mykyta_p
The image is property of Netflix Inc. and cannot be reused
gRPC OVER HTTP/3
@aiborisov
@mykyta_p
FASTER CONNECTION
NEGOTIATION
NO HEAD-OF-LINE BLOCKING
CONNECTION TRANSITION
BETWEEN NETWORKS
The image is property of Netflix Inc. and cannot be reused
UDP TRADEOFFS
@aiborisov
@mykyta_p
FIREWALLS
ROUTING
REPLAY ATTACKS
The image is property of Netflix Inc. and cannot be reused
gRPC OVER HTTP/*
@aiborisov
@mykyta_p
BINARY FRAMES
OPTIMIZATIONS AND
TRADEOFFS
HTTP/3 IS HERE
The image is property of Netflix Inc. and cannot be reused
gRPC OVER HTTP/2 SPEC:
https://github.com/grpc/grpc/blob/master/doc/
PROTOCOL-HTTP2.md
QUIC RFC:
https://datatracker.ietf.org/doc/html/rfc9000
gRPC OVER HTTP/3 PROPOSAL:
https://github.com/grpc/proposal/blob/master/
G2-http3-protocol.md
LINKS
@aiborisov
@mykyta_p
Thank You
@aiborisov
@mykyta_p

More Related Content

What's hot

How we reduced logs costs by moving from Elasticsearch to Grafana Loki
How we reduced logs costs by moving from Elasticsearch to Grafana LokiHow we reduced logs costs by moving from Elasticsearch to Grafana Loki
How we reduced logs costs by moving from Elasticsearch to Grafana LokiIgor Latkin
 
GitOps: Git come unica fonte di verità per applicazioni e infrastruttura
GitOps: Git come unica fonte di verità per applicazioni e infrastrutturaGitOps: Git come unica fonte di verità per applicazioni e infrastruttura
GitOps: Git come unica fonte di verità per applicazioni e infrastrutturasparkfabrik
 
GitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfGitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfssuser31375f
 
Argo Workflows 3.0, a detailed look at what’s new from the Argo Team
Argo Workflows 3.0, a detailed look at what’s new from the Argo TeamArgo Workflows 3.0, a detailed look at what’s new from the Argo Team
Argo Workflows 3.0, a detailed look at what’s new from the Argo TeamLibbySchulze
 
Pharo 10 and beyond
 Pharo 10 and beyond Pharo 10 and beyond
Pharo 10 and beyondESUG
 
The journey to GitOps
The journey to GitOpsThe journey to GitOps
The journey to GitOpsNicola Baldi
 
Secure your Application with Google cloud armor
Secure your Application with Google cloud armorSecure your Application with Google cloud armor
Secure your Application with Google cloud armorDevOps Indonesia
 
Build an Edge-to-Cloud Solution with the MING Stack
Build an Edge-to-Cloud Solution with the MING StackBuild an Edge-to-Cloud Solution with the MING Stack
Build an Edge-to-Cloud Solution with the MING StackInfluxData
 
Combining Logs, Metrics, and Traces for Unified Observability
Combining Logs, Metrics, and Traces for Unified ObservabilityCombining Logs, Metrics, and Traces for Unified Observability
Combining Logs, Metrics, and Traces for Unified ObservabilityElasticsearch
 
CD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfCD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfKnoldus Inc.
 
Kubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfKubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfLibbySchulze
 
Kubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionKubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionStefan Schimanski
 
Gitops: a new paradigm for software defined operations
Gitops: a new paradigm for software defined operationsGitops: a new paradigm for software defined operations
Gitops: a new paradigm for software defined operationsMariano Cunietti
 
Multi cluster management with rancher
Multi cluster management with rancherMulti cluster management with rancher
Multi cluster management with rancherKyohei Mizumoto
 
API Strategy Presentation
API Strategy PresentationAPI Strategy Presentation
API Strategy PresentationLawrence Coburn
 
Grafana Loki: like Prometheus, but for Logs
Grafana Loki: like Prometheus, but for LogsGrafana Loki: like Prometheus, but for Logs
Grafana Loki: like Prometheus, but for LogsMarco Pracucci
 
Red Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRed Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRobert Bohne
 
BIAN Applied to Open Banking - Thoughts on Architecture and Implementation
BIAN Applied to Open Banking - Thoughts on Architecture and ImplementationBIAN Applied to Open Banking - Thoughts on Architecture and Implementation
BIAN Applied to Open Banking - Thoughts on Architecture and ImplementationBiao Hao
 

What's hot (20)

How we reduced logs costs by moving from Elasticsearch to Grafana Loki
How we reduced logs costs by moving from Elasticsearch to Grafana LokiHow we reduced logs costs by moving from Elasticsearch to Grafana Loki
How we reduced logs costs by moving from Elasticsearch to Grafana Loki
 
GitOps: Git come unica fonte di verità per applicazioni e infrastruttura
GitOps: Git come unica fonte di verità per applicazioni e infrastrutturaGitOps: Git come unica fonte di verità per applicazioni e infrastruttura
GitOps: Git come unica fonte di verità per applicazioni e infrastruttura
 
GitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfGitOps 101 Presentation.pdf
GitOps 101 Presentation.pdf
 
Argo Workflows 3.0, a detailed look at what’s new from the Argo Team
Argo Workflows 3.0, a detailed look at what’s new from the Argo TeamArgo Workflows 3.0, a detailed look at what’s new from the Argo Team
Argo Workflows 3.0, a detailed look at what’s new from the Argo Team
 
Pharo 10 and beyond
 Pharo 10 and beyond Pharo 10 and beyond
Pharo 10 and beyond
 
The journey to GitOps
The journey to GitOpsThe journey to GitOps
The journey to GitOps
 
Secure your Application with Google cloud armor
Secure your Application with Google cloud armorSecure your Application with Google cloud armor
Secure your Application with Google cloud armor
 
Build an Edge-to-Cloud Solution with the MING Stack
Build an Edge-to-Cloud Solution with the MING StackBuild an Edge-to-Cloud Solution with the MING Stack
Build an Edge-to-Cloud Solution with the MING Stack
 
Combining Logs, Metrics, and Traces for Unified Observability
Combining Logs, Metrics, and Traces for Unified ObservabilityCombining Logs, Metrics, and Traces for Unified Observability
Combining Logs, Metrics, and Traces for Unified Observability
 
CD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfCD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdf
 
Kubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfKubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdf
 
Kubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionKubernetes Architecture and Introduction
Kubernetes Architecture and Introduction
 
Gitops: a new paradigm for software defined operations
Gitops: a new paradigm for software defined operationsGitops: a new paradigm for software defined operations
Gitops: a new paradigm for software defined operations
 
Multi cluster management with rancher
Multi cluster management with rancherMulti cluster management with rancher
Multi cluster management with rancher
 
API Strategy Presentation
API Strategy PresentationAPI Strategy Presentation
API Strategy Presentation
 
Grafana Loki: like Prometheus, but for Logs
Grafana Loki: like Prometheus, but for LogsGrafana Loki: like Prometheus, but for Logs
Grafana Loki: like Prometheus, but for Logs
 
Red Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRed Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABC
 
GitOps w/argocd
GitOps w/argocdGitOps w/argocd
GitOps w/argocd
 
Observability
ObservabilityObservability
Observability
 
BIAN Applied to Open Banking - Thoughts on Architecture and Implementation
BIAN Applied to Open Banking - Thoughts on Architecture and ImplementationBIAN Applied to Open Banking - Thoughts on Architecture and Implementation
BIAN Applied to Open Banking - Thoughts on Architecture and Implementation
 

Similar to Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?

KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSElad Hirsch
 
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021WDDay
 
"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!" 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!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 editionAlex Borysov
 
What's New in Web Development
What's New in Web DevelopmentWhat's New in Web Development
What's New in Web DevelopmentKonstantin Käfer
 
ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale Subbu Allamaraju
 
The Life of a Packet through Istio III
The Life of a Packet through Istio IIIThe Life of a Packet through Istio III
The Life of a Packet through Istio IIIMatt Turner
 
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014Puppet
 
Istio, The Packet's-Eye View - KubeCon NA 2018
Istio, The Packet's-Eye View - KubeCon NA 2018Istio, The Packet's-Eye View - KubeCon NA 2018
Istio, The Packet's-Eye View - KubeCon NA 2018Matt Turner
 
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
 
Istio Playground
Istio PlaygroundIstio Playground
Istio PlaygroundQAware GmbH
 
How to build 1000 microservices with Kafka and thrive
How to build 1000 microservices with Kafka and thriveHow to build 1000 microservices with Kafka and thrive
How to build 1000 microservices with Kafka and thriveNatan Silnitsky
 
Cooking Up Drama - ChefConf 2015
Cooking Up Drama - ChefConf 2015 Cooking Up Drama - ChefConf 2015
Cooking Up Drama - ChefConf 2015 Chef
 
Plan B: Service to Service Authentication with OAuth
Plan B: Service to Service Authentication with OAuthPlan B: Service to Service Authentication with OAuth
Plan B: Service to Service Authentication with OAuthHenning Jacobs
 
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
 
Testing API platform with Behat BDD tests
Testing API platform with Behat BDD testsTesting API platform with Behat BDD tests
Testing API platform with Behat BDD testsStefan Adolf
 
Seguridad en microservicios via micro profile jwt
Seguridad en microservicios via micro profile jwtSeguridad en microservicios via micro profile jwt
Seguridad en microservicios via micro profile jwtCésar Hernández
 

Similar to Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3? (20)

Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
 
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
 
"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!" 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!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition
 
What's New in Web Development
What's New in Web DevelopmentWhat's New in Web Development
What's New in Web Development
 
ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale ql.io: Consuming HTTP at Scale
ql.io: Consuming HTTP at Scale
 
The Life of a Packet through Istio III
The Life of a Packet through Istio IIIThe Life of a Packet through Istio III
The Life of a Packet through Istio III
 
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014
Fully Automate Application Delivery with Puppet and F5 - PuppetConf 2014
 
Istio, The Packet's-Eye View - KubeCon NA 2018
Istio, The Packet's-Eye View - KubeCon NA 2018Istio, The Packet's-Eye View - KubeCon NA 2018
Istio, The Packet's-Eye View - KubeCon NA 2018
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!
 
Istio Playground
Istio PlaygroundIstio Playground
Istio Playground
 
How to build 1000 microservices with Kafka and thrive
How to build 1000 microservices with Kafka and thriveHow to build 1000 microservices with Kafka and thrive
How to build 1000 microservices with Kafka and thrive
 
Cooking Up Drama
Cooking Up DramaCooking Up Drama
Cooking Up Drama
 
Cooking Up Drama - ChefConf 2015
Cooking Up Drama - ChefConf 2015 Cooking Up Drama - ChefConf 2015
Cooking Up Drama - ChefConf 2015
 
Plan B: Service to Service Authentication with OAuth
Plan B: Service to Service Authentication with OAuthPlan B: Service to Service Authentication with OAuth
Plan B: Service to Service Authentication with OAuth
 
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...
 
Testing API platform with Behat BDD tests
Testing API platform with Behat BDD testsTesting API platform with Behat BDD tests
Testing API platform with Behat BDD tests
 
Seguridad en microservicios via micro profile jwt
Seguridad en microservicios via micro profile jwtSeguridad en microservicios via micro profile jwt
Seguridad en microservicios via micro profile jwt
 

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
 
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
 
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019Alex Borysov
 
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019Alex Borysov
 
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web:  It’s All About Communication": Devoxx Ukraine 2019"gRPC-Web:  It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019Alex Borysov
 
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...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
 
Break me if you can: practical guide to building fault-tolerant systems (with...
Break me if you can: practical guide to building fault-tolerant systems (with...Break me if you can: practical guide to building fault-tolerant systems (with...
Break me if you can: practical guide to building fault-tolerant systems (with...Alex Borysov
 
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 editionAlex Borysov
 
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk 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
 
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
 
"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 (16)

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...
 
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...
 
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019
"gRPC-Web: It’s All About Communication": Devoxx Belgium 2019
 
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
 
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web:  It’s All About Communication": Devoxx Ukraine 2019"gRPC-Web:  It’s All About Communication": Devoxx Ukraine 2019
"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019
 
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...
OSCON 2019 "Break me if you can: practical guide to building fault-tolerant s...
 
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...
 
Break me if you can: practical guide to building fault-tolerant systems (with...
Break me if you can: practical guide to building fault-tolerant systems (with...Break me if you can: practical guide to building fault-tolerant systems (with...
Break me if you can: practical guide to building fault-tolerant systems (with...
 
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
 
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk 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!
 
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!
 
"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

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 

Recently uploaded (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 

Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?