for intra-service communication gRPC makes the most sense. the only problem with it is the code it generates. personally I am speaking from Go point of view. am not sure how other languages fare but the Go code is as far from optimal as humanly possible(essentially everything is a pointer and schema is a gzipped blob). not to mention the issues of empty map or slice vs nil that is big pain-point in Go serialization in general.