(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.
Installation and Starting
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.
Docker
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/
Network structure of OdysseusNet: OdysseusNodes and NodeGroups
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.
Activating/Deactivating OdysseusNet
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.
Features of OdysseusNet
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:
- Integration of OdysseusNet in OdysseusStudio. There, OdysseusNet has its own OdysseusNet Perspective.
- Configuration of each OdysseusNode due to a separate configuration file (see OdysseusNet Configuration)
- Controlling OdysseusNodes with the OSGi-Console (see Console Commands )
- View the connection quality with PingMaps
- Distributing data sources definitions into the network
- Distributing queries into the network of OdysseusNodes
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):
- Interfaces for accessing remote OdysseusNodes (see Management of OdysseusNodes)
- Interfaces for easy communication with remote OdysseusNodes (see Communication with OdysseusNodes)
- Receiving log messages of remote nodes (see Logging)
- Deeper control of configuration settings (without interfering with the configuration of Odysseus) (see Configuration for developers)
- Network structure control. This contains interfaces for discovery of OdysseusNodes (see Discovery of OdysseusNodes) and selection-strategies for connections that need to be established (see Connection to OdysseusNodes).
- Easy methods to distribute static data across the network (see Distribution of (static) data)
- Interfaces to add strategies for query distribution (see Query distribution strategies)
- Interfaces to access information of current resource usages (processor, memory, etc.) of remote OdysseusNodes (see Resource management)