3 ms·
The terms are fuzzy, but tuple spaces aren't solving the same problem RPC. That is, you can _use_ RPC to implement tuple spaces. But not the other way around!
by chubot 14y ago
The terms are fuzzy, but tuple spaces aren't solving the same problem RPC. That is, you can _use_ RPC to implement tuple spaces. But not the other way around!
Message queues are basically the modern tuple spaces, and I'll bet all the companies listed above use message queues too.
RPC has its place but it's overused. It's a low level primitive, not a distributed systems architecture. Some people's architecture is basically just RPC spaghetti, with a naive handling of errors.
The argument is confused by the fact that you can use an RPC with messaging semantics (async, a single argument data payload), and you can use a messaging system with RPC semantics (i.e. tunneling RPC over HTTP, using HTTP as transport).
I think we basically have to stop using the word RPC as a catch-all for so many systems, and identify which choices are good and which ones lead to design mistakes.
- m0th87 14y agoYou can implement RPC in tuplespaces pretty easily: Client: out("rpc-request", uuid, "say_hello", "m0th") in("rpc-request", uuid, ?response) Server: in("rpc-request", ?uuid, ?method, ?arg) response = call(method, arg) out("rpc-request", uuid, response) The example is obviously a bit simplified, but it's certainly easy to do in generative communication. Message queues and tuplespaces are very different. A tuplespace allows pattern matching on tuples. And many tuplespace implementations do not provide monotonicity.
- chubot 14y agoWell I should have clarified that I was basing that on my interpretation of the terms RPC and message queue. The important bit is that all these debates are obscured by imprecise terminology. RabbitMQ supports reciving messages based on a pattern: http://www.rabbitmq.com/tutorials/tutorial-five-python.html http://www.rabbitmq.com/tutorials/tutorial-five-python.html It also says it supports RPC: http://www.rabbitmq.com/tutorials/tutorial-six-python.html http://www.rabbitmq.com/tutorials/tutorial-six-python.html That doesn't match my definition of RPC, but OK. I consider RPC server-to-server, not server -> "smart" intermediary -> server. But I guess they want to to define RPC as request/reply. So again it's a terminology issue. What deployed, modern systems use tuple spaces and are substantively different from a message queue? My impression is that "tuple spaces" were the historical name, from Gelertner's papers, but everyone just calls them message queues. Message queues have lots of different properties but the defining one, as in tuple spaces, is that there's an intermediary between 2 servers. The sender and receiver don't have to be up at the same time.
- m0th87 14y ago> What deployed, modern systems use tuple spaces and are substantively different from a message queue? None that I know of, but that's because no one uses generative communication nowadays :) > Message queues have lots of different properties but the defining one, as in tuple spaces, is that there's an intermediary between 2 servers. That's a very loose definition that could classify a lot of things as message queues. Generative communication says nothing about how the semantics are implemented; they may use an intermediary, or they may not. The early version of C-Linda did not use intermediaries, and was intended for in-process communication. Of course, a practical, distributed implementation of generative communication uses intermediaries. But then again, depending on the implementation, it may be distributed across multiple intermediaries. I would say a message queue would necessarily have monotonicity (the name surely implies it!), which generative communication does not have. > The sender and receiver don't have to be up at the same time. In academic parlance this is called time decoupling, and it is an awesome property. ZeroRPC has this as well thanks to 0mq. I don't really know anything about RabbitMQ to comment. I think I've heard that some engineers at dotCloud tried it out for our distributed communication needs, and it just couldn't scale to our load. But that would've been a while ago, and it has probably improved substantially since.
- chubot 14y agoOK fair enough. But just with regard to your original point -- people should "care" about higher level distributed systems abstractions, and they do (to an extent). I think the main example of a higher level abstraction in wide use is message queues (which I think of as a descendant of tuple spaces, but that point is immaterial). If your only concept is RPC, that's just too low level and limited, and you're going to end up with a mess. You're right that "developers understand RPC" (in a naive way). But that's just because we are still in the early stages and knowledge hasn't had time to propagate. Some RPC systems have more of the naive properties that the OP was pointing to; some have learned from those mistakes.