|
|
# Distributed components (Dispatchers and Instances)
|
|
|
|
|
|
Let's start with the definitions:
|
|
|
|
|
|
An **_Instance_** is a scanner server which can be operated via a remote procedure call protocol -- simple enough.
|
|
|
|
|
|
A **_Dispatcher_** is a server which provides clients with _Instances_.
|
|
|
Its main job is to maintain a pool of _Instances_ and whenever a clients issues
|
|
|
a _dispatch_ call to pop one from the pool and give its connection details to the client.
|
|
|
|
|
|
Just as importantly, it's responsible for never letting the pool deplete by replenishing it after every _dispatch_ call.
|
|
|
|
|
|
The aforementioned connection details include the URL of the Instance (_host:port_) and its authentication token,
|
|
|
you can imagine what happens after that.
|
|
|
|
|
|
Both servers use the same RPC protocol, [Arachni-RPC](https://github.com/Arachni/arachni-rpc),
|
|
|
but they, of course, have different [APIs](https://github.com/Arachni/arachni/wiki/RPC-API).
|
|
|
|
|
|
**Notice**
|
|
|
|
|
|
The above is the simple version, in reality both the Instance and Dispatcher servers
|
|
|
are much more elaborate systems; more about that in the [[High Performance Grid | HPG]] section. |