Ran Tavory wrote:
Here's my set of requirements:
It seems to me that Avro satisfies most of these. I'll comment below.
1. Easy and intuitive IDL. No serial numbers, no manual versioning,
simple... avro is a good example for this.
2. Works with Java and Python
Check.
3. Supports both fast binary prorocol, as well as HTTP based restful
style. I'd like to be able to use it for both backend-to-backend
communication (java-java or python-java) as well as
frontend-to-backend communication (javascript to java).
4. The rest support needs to include ¶m=value input as get/post
requests (configurable per request) and output in three possible
formats: json, jsonp, XML.
Avro does not currently support url-encoded query-string parameters. A
Java servlet that does this could be added without too much difficulty.
Alternately, one might develop an Avro library in Javascript that
could make binary requests.
One could also easily define an XML-encoding for Avro data. However
implementing it and maintaining in all languages might be difficult. So
I prefer to consider anything other than the binary encoding as optional
for implementations. Thus applications should generally use the binary
encoding to ensure the greatest intercompatibility.
A JSON-encoding of Avro data is specified that could perhaps also be
used to implement a jsonp-style approach.
5. Compact, fast, backward compatible, easy to upgrade etc...
Check.
6. Provides some nice monitoring interfaces such as: JMX, web page
status reports (e.g. packets in, packets out, error rate etc)
Avro Java has a statistics plugin. This could be enhanced if there were
particular values you require.
http://hadoop.apache.org/avro/docs/current/api/java/org/apache/avro/ipc/stats/package-summary.html
7. Ops friendly... no need to take the whole site down to release new
versions
... other goodies are welcome...
Is there something out there?
So far I've looked at thrift and avro and they are both nice in some
ways, but don't check all my list.
Doug