I agree small incremental patches that can be evaluated on their individual merits is the best way to go. The beauty of thrift now is it's simplicity.

I totally agree and I do not want this to change. I wanted to build the multiple-services client and server and bumped into the fact that the current API made it more difficult than needed to implement them. Because of the pending change to Apache packages I saw an opportunity to make the API easier for client and server implementers, so I summarized a number of outstanding issues that were being discussed. I not only focused on things that would be useful for me, but also included improvements proposed by other (e.g. the compact format).

A lot of the changes I proposed do not affect the simplicity of Thrift, but only concern how it is implemented.

At first glance a multiplexing server looked like a good idea to me. After thinking about it for a bit, I'm not clear on what benefit it has over adding
new functions to existing services, or routing messages internally.

I want to expose a lot of fine-grained services instead of a few coarse-grained ones. I also want to be able to enable or disable each fine-grained service separately. If I have to use a single or a few services, I will loose this flexibility. Also the single-resonsibility principle for services is lost.

Routing messages internally is difficult to implement unless all functions have the same parameters because Thrift does not support polymorphism. Note: I see this as a feature and not a limitation. Introducing polymorphism will, in my opinion, move away from the simplicity goal of Thrift.

ZeroC Ice has a concept similiar to this (Facets) and numerous other concepts. The problem is that it's very complex system. The result is that your code
becomes more tightly coupled with the underlying RPC system.

I absolutely want to prevent this. I know for sure it is possible to write service implementations that can be used in a single-service or multiple-services manner without impact on the code, i.e. a service implementation would be totally unaware of how it is used:
- single service/multiple services
- synchronous/asynchronous
- sockets/servlets/JMS/e-mail/instant messaging/file/...
- ...

--
Kind regards,

Johan Stuyts

Reply via email to