commit | f5907c4b89456d3120a4d1e1080d9203e6522816 | [log] [tgz] |
---|---|---|
author | Paul J. Davis <paul.joseph.davis@gmail.com> | Mon Mar 18 22:51:29 2013 -0500 |
committer | Robert Newson <rnewson@apache.org> | Wed Jul 23 17:56:17 2014 +0100 |
tree | 6dfc1110a7651ffc2926487d6e31b74fa45c9abb | |
parent | 6cd3b812c0bb5c956d8264aae0ffdd94bbd52314 [diff] |
[1/3] Start a rexi_server per remote node This is part of a multi-release upgrade to switch to using a rexi_server instance per remote node. The first commit introduces the new rexi_server instances, the second switches to using the new instances and the third will remove the singleton rexi_server. Each of these commits should be in a separate release. The new pattern introduced by this commit will start a 'rexi_server_%b' process where the '%b' is replaced by the `erlang:phash2(Node)` for which it will service requests. After the second commit is release each rexi generated message will be sent to the rexi_server instance on the remote node handling requests for the local node. The `rexi_utils:server_pid/1` function is used to generate the id of the remote server.
Rexi is a tailor-made RPC server application for sending CouchDB operations to nodes in a cluster. It is used in BigCouch as the remote procedure vehicle to get fabric functions to execute on remote cluster nodes.
Rexi better fits the needs of the BigCouch distributed data store by dropping some unneeded overhead in rex, the RPC server that ships with Erlang/OTP. Rexi is optimized for the case when you need to spawn a bunch of remote processes. Cast messages are sent from the origin to the remote rexi server, and local processes are spawned from there, which is vastly more efficient than spawning remote processes from the origin. You still get monitoring of the remote processes, but the request-handling process doesn't get stuck trying to connect to an overloaded/dead node. ‘rexi_DOWN’ messages will arrive at the client eventually. This has been an extremely advantageous mix of latency and failure detection, vastly improving the performance of BigCouch.
Rexi is used in conjunction with ‘Fabric’ which is also an application within BigCouch, but can be used on a stand-alone basis.
Rexi requires R13B03 or higher and can be built with rebar, which comes bundled in the repository.