• I am talking forever once started. You will fall asleep. • The details are not described in this slide, just I talk ◦ You are lucky! or unlucky for boring time • This slide was originally created for internal meet up in merpay ◦ for mercari employees
disucssion not only inside Google ◦ Protobuf is still Google product.. not community • Looks effective to keep consistent features in all language impls. • Recommend to read merged docs for everyone
features in grpc-go ◦ Actively updated recently • github.com/grpc/proposal ◦ gRFC for new features • github.com/grpc/grpc/doc ◦ Useful specs still exist ◦ not active for spec in favor of gRFC?
stats provided per requests/connections ◦ OpenCensus uses this feature for instrumentation • service config 2016/12/20 ◦ grpc.WithServiceConfig() (deprecated) ◦ services/methods configurations dynamically pupulated • tap 2016/11/08 ◦ grpc.InTapHandle() ◦ called in very early stage after connected ◦ I don’t know the use case...
request ◦ Read grpc-go/Documentation/grpc-auth-support.md • CallOption ◦ grpc.Max[Send,Recv]MsgSize, grpc.MaxCall[Send,Recv]MsgSize ◦ Limit max message size in both client/server side v1.5 2017/07/20 • No remarkable features
• DNS resolver (deprecated) ◦ legacy resolver API called naming v1.7 2017/10/12 • balancer, resolver ◦ V2? API by gRFC L9 ◦ Registration API for balancer, resolver ◦ Resolver is used depending on scheme of an address in grpc.DialContext
by gRFC A6 ◦ retry to send a request when failure without sending any requests • encoding ◦ Registration API for grpc.Compressor interface for compress/decompress a message ◦ Now server respects encoding/accept-encoding automatically! ◦ Read grpc-go/Documentation/compression.md v1.9 2018/01/03 • No remarkable features
for marshal/unmarshal a message ◦ Now we can change a codec per call, not per connection(DialOption)! ◦ Read grpc-go/Documentation/encoding.md v1.11 2018/03/28 • credentials/alts ◦ ALTS: Application Layer Transport Security
library handles retry by ServiceConfig per Method/StatusCode • stickness ◦ Reverted!!! ◦ re-considering to implement balancer/resolver-base v1.15 2018/09/15 • No remarkable features
used… ◦ internal usecase ▪ DataDog for instrumentation ▪ Notification with Sentry in case of unexpected errors like Unknown/Internal ◦ middlewares for gRPC to resolve common use cases • resolver ◦ custom resolver for kubernetes specific named k8sdns ◦ official dns resolver is not suitable for our use case
know configs like retry policy, timeout ◦ difficult to use DNS, how to provide…? e.g. custom resolver • encoding (codec) ◦ CSV/TSV codec…! ◦ message passthrough gRPC proxy without any marshaling/unmarshaling • stickness ◦ use custom balancer instead • binarylog ◦ consider to use application log if better than interceptor