There are couple of libs for data serialisation like MessagePack, Protocol Buffers etc.
But what should be the Transport Protocol? Should it be HTTP REST or any other?
To me it doesn't make much sense to use REST because HTTP has overhead. So, if we decide to optimise for speed and use let's say ProtoBuff it seems un-logical to go just a halfway and optimise only the serialisation without optimising the Transport.
For Protobuf, you should use gRPC, which is Google's official RPC implementation. It's efficient, but more importantly, it is designed to integrate well with Protobuf -- e.g. you can write your service definitions in
.protofiles along-side your message types.Another commonly-used transport which pairs well with many serialization formats is ZeroMQ.