Dynamically Scriptable Distributed Components in Lua using DDS
Written by Rajive Joshi
June 17, 2013
At the RTI Labs we are excited about the Internet of Things (IoT).
We have been working on a new component model that makes it really easy to construct sophisticated distributed systems without needing to compile or generate a single line of code. Furthermore, the code can be changed on the fly, without having to restart components. The global state of a component is preserved between executions while its code can change, thus allowing for component behavior to change dynamically. The wiring of the components is specified in a separate configuration file. A container loads the configuration file, binds the communication resources to the logical I/O ports on the component, and runs the component code.
For example, a transformation of the data used in the RTI Shapes Demo application can simply be written in Lua as:
The above code takes input shapes from the data-space, changes their size, and writes them back to the data-space. We run this in a container that wires the input to the Square topic and output to the Triangle topic in the data-space used by the Shapes Demo. We can see the shape mediation happening in real-time:
Now, if we increase the SIZE_FACTOR from 0.5 to 5 in a text editor, we immediately see the updated output:
We have built the component model to run in a variety of containers. We are publicly releasing an experimental container using the XML-Based application configuration and prototyping capability for defining the data types, QoS, and DDS endpoints. The container can be configured to run the component code upon any or all of the following events: startup, shutdown, data arrival or a periodic timer.
The result is a deeply data-centric architecture that decouples data from the code not just at the system level (using DDS) but also at the component level. The application architecture is easy to maintain and evolve for both large and small teams. It clearly separates the role of the component/algorithm developer responsible for business logic from the system integrator responsible for wiring the components and configuring quality of service (QoS) at the system level.
This new experimental component technology is available as a free download from the RTI Community Portal. Included in the bundle is a detailed getting started guide and several working examples showing correlation, splitting, aggregation, transformation, choreography, device I/O, data collection and data generation.
Give it a whirl — Go ahead and use it to build your next IoT app and let us know what you think!
NOTE: We are presenting at the OMG Component Workshop in Berlin today, June 17.