diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2015-02-04 12:17:19 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2015-02-04 12:17:19 +0000 |
| commit | 09cbb31bc7c1d437804c90f6c83d8b3904b9615a (patch) | |
| tree | 34e0bb1e5283e374375042fc017722f2e67fcd12 | |
| parent | f24d899b8bca92be45bcf02fd3917bde80f1ee39 (diff) | |
| download | rabbitmq-server-git-09cbb31bc7c1d437804c90f6c83d8b3904b9615a.tar.gz | |
De-emphasise mirroring, talk about ordering issues.
| -rw-r--r-- | src/delegate.erl | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 3ef83fa97b..1a0df98220 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -16,11 +16,20 @@ -module(delegate). -%% Delegates is an alternative way of doing remote calls. Compared to +%% delegate is an alternative way of doing remote calls. Compared to %% the rpc module, it reduces inter-node communication. For example, %% if a message is routed to 1,000 queues on node A and needs to be %% propagated to nodes B and C, it would be nice to avoid doing 2,000 -%% remote calls to mirror processes. +%% remote casts to queue processes. +%% +%% An important issue here is preserving order - we need to make sure +%% that messages from a certain channel to a certain queue take a +%% consistent route, to prevent them being reordered. In fact all +%% AMQP-ish things (such as queue declaration results and basic.get) +%% must take the same route as well, to ensure that clients see causal +%% ordering correctly. Therefore we have a rather generic mechanism +%% here rather than just a message-reflector. That's also why we pick +%% the delegate process to use based on a hash of the source pid. %% %% When a function is invoked using delegate:invoke/2, delegate:call/2 %% or delegate:cast/2 on a group of pids, the pids are first split @@ -32,8 +41,9 @@ %% Errors returned when executing functions on remote nodes are re-raised %% in the caller. %% -%% Delegates are used for queue mirroring. RabbitMQ starts a pool of -%% delegate processes on boot. The size of the pool is configurable. +%% RabbitMQ starts a pool of delegate processes on boot. The size of +%% the pool is configurable, the aim is to make sure we don't have too +%% few delegates and thus limit performance on many-CPU machines. -behaviour(gen_server2). |
