Hi There,
We have cloud-hosted (RackSpace cloud) Ruby and Java apps that will interact as follows:
Ruby app sends a request to Java app. Request consists of map structure containing strings, integers, other maps, and lists (analogous to JSON).
Java app analyzes data and sends reply to Ruby App.
We are interested in evaluating both messaging formats (JSON, Buffer Protocols, Thrift, etc.) as well as message transmission channels/techniques (sockets, message queues, RPC, REST, SOAP, etc.)
Our criteria:
Short round-trip time.
Low round-trip-time standard deviation. (We understand that garbage collection pauses and network usage spikes can affect this value).
High availability.
Scalability (we may want to have multiple instances of Ruby and Java app exchanging point-to-point messages in the future).
Ease of debugging and profiling.
Good documentation and community support.
Bonus points for Clojure support.
What combination of message format and transmission method would you recommend? Why?
I've gathered here some materials we have already collected for review:
Comparison of various java serialization options
Comparison of Thrift and Protocol Buffers (old)
Comparison of various data interchange formats
Comparison of Thrift and Protocol Buffers
Fallacies of Protocol Buffers RPC features
Discussion of RPC in the context of AMQP (Message-Queueing)
Comparison of RPC and message-passing in distributed systems (pdf)
Criticism of RPC from perspective of message-passing fan
Overview of Avro from Ruby programmer perspective