(this page is currently work-in-progress)
OdysseusNet (or Odysseus.net) is a extension for Odysseus which enables distributed data stream processing using a network of interconnected machines (e.g., LANs). It is a follow-up project of OdysseusP2P.
OdysseusNet is a feature which is installed like the other features (see How to install new features). However due to technical limitations, OdysseusNet is (currently) not applicable to the client-version of Odysseus. If you use the server-version, install the OdysseusNet Server Feature. For monolithic Odysseus, install the monolithic version of the OdysseusNet Feature. After restarting Odysseus, OdysseusNet is integrated and ready.
If you develop with Odysseus and checked out its sourcecode, you can start OdysseusNet by adding the plugin
de.uniol.inf.is.odysseus.net.monolithic.feature (if you're developing with the monolithic version of Odysseus) or the plugin
de.uniol.inf.is.odysseus.net.server.feature (server-version of Odysseus) to your product- or launch-definitions. These features contain all underlying OdysseusNet-Features currently available. A more detailed description which feature encapsulates which function can be found in Developing with OdysseusNet.
OdysseusNet is also available as docker image: odysseusol/odysseusnet.
Remark: Currently, we are developing a master/worker based version of OdysseusNet. In this case, only the master node needs to be an OdysseusNet image. The worker images could be standard Odysseus images. To allow easisier result handling, we provide an image for the worker nodes with an integrated kafka handling: odysseusol/odysseus_kafka
See OdysseusNet Docker Compose Example
Remark: In cases where the workers should communicate with each other, it is important, that the master and the worker are in the same network, i.e. in case of using docker, you cannot use a master from outside the docker network. To communicate with the master node, you should use WebStudio. Another solution would be to use e.g. kafka (that is visible to all the nodes) to communicate between the nodes.
See e.g. https://docs.docker.com/network/ or https://www.tutorialworks.com/container-networking/
After starting Odysseus, OdysseusNet is – by default – deactivated. In this case, Odysseus behaves like normal. When OdysseusNet is activated (explained in the next section), the Odysseus-Instance becomes an OdysseusNode. A OdysseusNode is a machine running Odysseus with OdysseusNet activated and participates in the distributed data stream processing. Each node has a human-readable non-unique name (set in the OdysseusNet Configuration) and a generated unique NodeID (needed for developers).
By default, two nodes are connecting to each-other if they are physically reachable (e.g., LAN), forming a network of interconnected Odysseus-Instances. To divide the network in logical subnetworks, each OdysseusNode can be assigned to a NodeGroup. Only nodes, which are in the same group, are connected and can communicate with each-other. By default, each OdysseusNode is in the same group (called
OdysseusGroup). However, this can be changed in the OdysseusNet Configuration of OdysseusNet.
With this default behaviour, a decentralized and unstructured network of nodes is being built. See Discovery of OdysseusNodes and Connection to OdysseusNodes if you want more details and to modify this.
In case of the master/worker approach, worker must be assigned to the master and could not be found automatically.
Only when OdysseusNet is activated, the functionality for distributed data stream processing is available. There are multiple possibilities to activate it. If the graphical user interface OdysseusStudio is available, the user can switch to the OdysseusNet Perspective. There in the NodeView, the user can click on the button in the top-right corner to activate OdysseusNet (marked with red circles in the picture below).
The user can execute the Console Command
startOdysseusNet to start OdysseusNet in the console (useful in the server-version of Odysseus). Alternatively, it is possible to start OdysseusNet automatically when Odysseus is started (see OdysseusNet Configuration of OdysseusNet).
After OdysseusNet is activated successfully, the title bar of OdysseusStudio shows the name and the NodeGroup of the own OdysseusNode aside the OdysseusStudio 2 title (separated with ":").
In the console, the message
OdysseusNet started is printed.
To finally stop OdysseusNet, the user has to click the button in the toolbar of the NodeView again, execute the console command
stopOdysseusNet or has to stop Odysseus entirely.
OdysseusNet is a sum of multiple smaller OdysseusNet-features. Each of them encapsulates specific functions, possibilities and interfaces, all useful for "typical" Odysseus-Users and Odysseus-Developers. A (not complete) list of features is as follows:
For users of Odysseus, OdysseusNet provides the following features:
For developers, OdysseusNet provides additional in-depth features (e.g., interfaces) to make it possible to alter and/or extend OdysseusNet aside the extensibility of Odysseus (see Developing with OdysseusNet):