On Mon, Mar 15, 2010 at 11:27 AM, <ma...@bestweb.net> wrote:

>
> I quite understand that the overhead of network latency may be the most
> important thing performance-wise. However, is there any proof of this?
> Will this also hold when we go to 10G interfaces with TCP offload?
>
>
Yep, this is a very interesting trend to watch for the coming few years. I
think you're right that Thrift and other RPC protocols will adapt a bit when
10G becomes commonplace in the DC.


> Wire version compatibility is an absolute requirement.
>
> Complexity - I'm not sure that cthrift will (eventually, specially when
> combined with thrift2c) make the higher layers any more complex; in fact,
> on the client side, I am 90% certain that we can keep the same interfaces.
>
>  Currently, cthrift tries to do the following:
> - minimize syscalls using write/writev
> - avoid blocking by using buffered reads and O_NONBLOCK sockets
> There isn't a lot more one can do on the client end that I can think of,
> unless you have multiple identical clients on the same box talking to the
> same server. Then you have the opportunity for batching etc., but that
> gets ... complicated ... very quickly.
>
> On the server side, the batching may be more natural, but admittedly I
> haven't given a lot of thought to that.
>
> Co-routine switch/thread-switch on partial reads on the server may be
> quite interesting to get performance (when combined with epoll/select or
> similar mechanisms).
>
>
All very interesting ideas. I'm left somewhat confused, though, why these
things are happening in a satellite project instead of as normal patches on
the Thrift JIRA?

-Todd


>
>
> > Hi Mayan,
> >
> > I haven't had time to look at your cthrift stuff yet, but wanted to give
> > my
> > quick input:
> >
> > For the vast majority of use cases where I've seen Thrift in use, the
> > overhead of Thrift itself is little to none compared to the overhead of
> > network latency and the operation on the other end of the connection. Of
> > course performance is important, but winning performance at the expense
> of
> > anything else (complexity, wire version compatibility, etc) is probably
> > not
> > on the top of anyone's lists.
> >
> > Like I said, I haven't looked at cthrift, but wanted to let you know
> where
> > I
> > think most users' priorities are.
> >
> > -Todd
> >
> > On Mon, Mar 15, 2010 at 9:25 AM, Mayan Moudgill <ma...@bestweb.net>
> wrote:
> >
> >> I'd appreciate some feedback from users about where they want
> >> improvements
> >> in the Thrift model. This may help me focus where I want to go with
> >> cthrift.
> >>
> >> I've been thinking about where to go with cthrift. Clearly, at some
> >> point
> >> soon, cthrift will be able to generate fairly efficient client-side
> >> code.
> >> Thrift2c will allow use of Thrift IDL, or perhaps assist in the
> >> migration to
> >> C based stub-specification.
> >>
> >> On the server side, I _think_ that the current approach of splitting a
> >> RPC
> >> call into 3 actions:
> >> 1. recieve the message
> >> 2. call the RPC specified in the message
> >> 3. transmit the RPC response, if any
> >> combined with the ability to add queues between these actions should
> >> allow
> >> for the implementation of almost any kind of server models.
> >>
> >> Clearly, one possible future direction is to implement multiple
> >> skeletons
> >> for different kinds of servers, so that it becomes more cut-and-paste to
> >> implement a server. The target would be to implement a epoll OR select
> >> based
> >> multi-socket kind of server, possibly with the receive and transmit
> >> being
> >> implemented as co-routines (or threads) that switch if blocked on a
> >> part-message.
> >>
> >> Another possible direction is to have cthrift also generate the code to
> >> export the stubs to Python/Java/etc. as built-in modules/JNI/etc. The
> >> flip
> >> side, of course, would be to embed Python instead of extending it. Would
> >> anyone have a preference?
> >>
> >> Hmmm... if followed through to its ultimate conclusion, we'll have the
> >> ability to go from Thrift IDL to a particular language interface, either
> >> in
> >> Thrift or in cthrift. The difference will be that in Thrift the
> >> generated
> >> code will be native (i.e. Python for --gen python etc.) whilst in
> >> cthrift
> >> the generated code will be in C with enough glue to allow calls from the
> >> desired upper layer language.
> >>
> >> Another difference, of course, will be that in the case of cthrift, the
> >> transport/protocol choices will be more hardwired than in Thrift.
> >>
> >> Another question: what be the second most important transport? Is it
> >> TFileTransport?
> >>
> >>
> >>
> >
> >
> > --
> > Todd Lipcon
> > Software Engineer, Cloudera
> >
>
>
>


-- 
Todd Lipcon
Software Engineer, Cloudera

Reply via email to