4 ms·
This article is missing any mention of promise pipelining, which solves some of the problems being discussed. http://kentonv.github.io/capnproto/rpc.html http:
by kentonv 12y ago
This article is missing any mention of promise pipelining, which solves some of the problems being discussed.
http://kentonv.github.io/capnproto/rpc.html http://kentonv.github.io/capnproto/rpc.html
With promise pipelining, if you need to make two RPCs to the same server, and the result of the first is going to be an input to the second, you can actually do it in one network round trip. The trick is to send the server a message saying "Hey, when you finish that first call, substitute the result into the parameters of this second call".
With this, fine-grained calls no longer imply an enormous latency expense compared to course-grained. Meanwhile, fine-grained APIs are cleaner and more composable, as my link above describes.
It's unfortunate that CORBA gave distributed objects a bad name. Just like object-oriented design within a program is more expressive than procedural design, object-oriented network protocols are more expressive than the flat protocols we tend to see today. I've been working with object-oriented protocols a lot lately while using Cap'n Proto to build sandstorm.io, and I've surprised even myself at how much more elegantly I can express complex interactions.
CORBA only messed up in trying to make remote objects look the same as local objects. Everyone now agrees that was a terrible mistake. But making distributed objects work does not in any way require making them look exactly like local objects. Calls to a Cap'n Proto object look quite different from local calls, because you need to be aware of the network issues implied by the call. But I've found that the same higher-level OO design principles you might use locally translate remarkably well to Cap'n Proto interfaces.
- owyn 12y agoIt may be terrible in a lot of other ways, but the mediawiki API does chaining of one api function into another. It's one of the features that I noticed that really should be more prevalent in other API's. An API call should be kind of like a mini-job submitted to the server that does some work and gets back some results.
- a8da6b0c91d 12y agoI virtually never see metion of ZeroC ICE and OpenSplice/DDS. These seem like very well thought out and solid solutions for making distributed systems. Everybody seems to go on about thrift and REST and ZeroMQ and so forth, when I would much rather use DDS or ICE. The other approaches seem to amount to homebrewing your own approximation of these technologies much of the time.
- kentonv 12y agoICE does not support promise pipelining, though. http://kentonv.github.io/capnproto/news/2013-12-13-promise-pipelining-capnproto-vs-ice.html http://kentonv.github.io/capnproto/news/2013-12-13-promise-p... I haven't looked at DDS.