Hi,

I have some ideas which I'd like to try to working on to improve Avatica. My direct interest is in support of the Phoenix Query Server which builds on top of Avatica.

One of the big areas of improvement that stands out to me is the Jackson-annotated Response/Request classes. First, we'd want to make sure these classes are stable (in terms of fields/attributes) so that, as each object evolves, we prevent existing clients from breaking. Second, it's desirable that we have some representation of these objects in a manner that's accessible to non-Java clients.

Ideally, preserving JSON as the serialized representation of these classes is also desirable as it's always pleasant to actually be able to read the data going over the wire when necessary.

Given these goals, two tools stood out to me as candidates that would solve this problem well without extra effort in the transport: Thrift and Protobuf v3.

Using Thrift only for object generation is a bit overkill, but this is an area of Thrift that has been rock-solid in the years that I've used it. Classpath issues with Thrift are always a concern as multiple versions of Thrift tend to break terribly (at least when performing Thrift RPCs -- I wouldn't necessarily trust it to be safe for only object serialization). It's easy to serialize Thrift objects to JSON and we can generate these classes for other languages.

I would call Protobuf v3 very young, although it does appear to fit the bill. Protobuf v2 has had a track record of being a pain when different versions of the library exist. For example, the Java classes generated by protobuf 2.x would fail to work with protobuf 2.y. I assume there's not enough evidence on protobuf v3 to say whether this will continue to be a problem. JSON-representation of objects and cross-language support are both natively supported (best as I can tell). Hypothetically, adopting protobufv3 could also have some extra benefits down the road such as leveraging grpc to replace Jetty, but that is an entirely different discussion for later :)

If you've gotten this far, I'd humbly ask for any opinions on the technology choices. Any opinions for or against one or the other? Any similar experiences?

Thanks!

- Josh

Reply via email to