Flow elements are the building blocks to create a flow.
A Brick is defined by the functionality of one or many related dataports and a set of parameters. The strong encapsulation of the internal functionality of a Brick makes it as modular as possible. Bricks implemented in different languages and running on different platforms can be easily combined. A Brick can be described in the form of script. For example Python, Perl or any other language as long as it supports the internal data standard for the exchange of Flow Item (FI) data sets.
The processing of a data set with a single instance of an Atomic Brick cannot be destributed on multiple nodes. It is single threaded and linear. Atomic Bricks are implemented using a control flow language.
Multiple instances of the same Atomic Brick can process data sets asynchronously
Atomic Bricks can be combined to Composite Bricks.
Bricks have to be purposeful but generally reusable. Almost any task can be solved by creating a single Brick for this special purpose. At the end we get a working system of special purpose bricks that can only be understood by the original developer. Scaling huge monolithic bricks is hard up to impossible. Having a set of small, well defined Bricks to be combined to perform bigger tasks leads to the kind of system we can maintain over al long time and to scale to meet requirements we don't know yet.
A Composite Brick is a reusable Flow to simplify standard tasks in multiple Flows. Like Flows in general Composite Bricks are scalable and asynchronous. Parallel processing of single data sets is possible.
A dataport is a directed interface of a Brick. It can be either an IN or an OUT port. The IN port accepts Flow Items through a link while the OUT port emits Flow Item that can be passed to another Brick through a link.
A link is a connection between an OUT port of one Brick to an IN port of another.
A signal is a way to couple flows to handle a variety of tasks if a specific event is happening. For example a critical sensor may emit an alarm. Now emails have to be sent, red lights have to be switched on and the event has to be written into a protocol file. All these different tasks can be handled by multiple Flows connected to a single signal. The pair of Flow components to handle signals is the Signal Sender and the Signal Receiver.
The signal is a powerful tool to simplify Flows but connect them to perform complex tasks.