README
Hydra
Hydra is a distributed computing framework for Node.js. It provides a way to distribute calculation of some arbitrary function f(x)
over arbitrary space S
between many computation nodes (browsers or other Node.js processes) connected to master node via websockets.
Install
$ yarn add @onwd/hydra
Usage
Master
- Create a task:
// master/tasks/example-task.ts
import { Space, Task } from '@onwd/hydra';
function f(x: number): boolean {
return x * x === 64;
}
const space = new Space({
values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
});
export const task = new Task({ f, space });
- Create
Master
instance and start the server.
// master/index.ts
import { Master } from '@onwd/hydra';
import { task } from './tasks/example-task';
const master = new Master({ task });
master.start();
Worker
Create Worker
instance and connect to Master
.
import { NodeWebsocketTransport, Worker } from '@onwd/hydra';
const worker = new Worker({
transport: new NodeWebsocketTransport({
url: 'ws://localhost:9000'
})
});
worker.start();
Concept
Hydra provides the following entities:
- Master:
- stores
Task
definition as well as algorithm to generateSpace
and sub-Spaces
; - handles incoming connections from
Workers
and stores their current work state; - provides the
Task
definition toWorkers
as well as sub-Spaces
they should work on; - stores the
Task
completion state.
- stores
- Worker:
- connects to
Master
viaTransport
and requests aTask
definition and a sub-Space
to work on; - works on a
Task
using provided definition and a sub-Space
; - responds to
Master
with calculation result.
- connects to
- Transport:
- allows to use
BrowserWebsocketTransport
orNodeWebsocketTransport
depending on the environment.
- allows to use
- Task:
- stores
f(x)
and aSpace
.
- stores
- Space:
- stores
type
of theSpace
,values
array or a value generator function.
- stores