r t u Irina Dominte(Scurtu) ▪ Romania Based ▪ Independent Consultant & Software Architect ( .NET at heart) ▪ Organizer of DotNetIasi user group & dotnetdays.ro conference ▪ I teach .NET ▪ Blog: https://Irina.codes @irina_scurtu
r t u gRPC ▪ No-code references ▪ Contract based ▪ Uses HTTP/2 => faster ▪ Efficient ProtoBuf serialization => smaller payload ▪ Available in many languages ▪ Code generation out-of-the box
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
The service definition. service Fibo { rpc ComputeFibonacci(RequestedNumber) returns (FibonacciResult){} } //the request message format message RequestedNumber { int32 number = 1; } //the response message format message FibonacciResult { int32 result = 1; }
r t u ▪ Contract-based ▪ Smaller payloads ▪ HTTP/2 is faaaaaaaster ▪ Supports different streaming types over a single connection ▪ .NET 6 > can be configured to run with HTTP/3
r t u Downsides ▪ Temporal coupling ▪ You might forget that there is a network involved ▪ Not human readable (until now) ▪ You’ll need better testing ▪ Focus on CI/CD ▪ Only HTTP POST -> no caching ▪ Single point of truth (.proto file) ▪ Not supported in Azure!(yet)
r t u Downsides ▪ Temporal coupling ▪ You might forget that there is a network involved ▪ Not human readable (until now) ▪ You’ll need better testing ▪ Focus on CI/CD ▪ Only HTTP POST -> no caching ▪ Single point of truth (.proto file) ▪ Not supported in Azure!(yet)
r t u Summary ▪ Great choice for microservice communication, point to point ▪ Replaces gracefuly HTTPClients ▪ Polyglot environments ▪ 4 modes/methods ▪ Decouples code