This presentation introduces the coordination model at the foundation of Vortex and explains its foundational concepts and features. Then it provides an overview of the various technological element that implement the model and how they are deployed in IoT applications such as connected vehicles, smart cities, smart grids and connected medical devices.
Genislab builds better products and faster go-to-market with Lean project man...
Getting Started with Vortex
1. Data Sharing in Industrial IoT
Angelo Corsaro, PhD
Chief Technology Officer
angelo.corsaro@prismtech.com
2. Vortex is a standard technology for
efficient, ubiquitous, interoperable,
secure and platform independent data
sharing across network connected
devices
in151
Characters
4. Applications can autonomously
and asynchronously read and
write data enjoying spatial and
temporal decoupling
DDS Global Data Space
...
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
Global Data Space
5. Built-in dynamic discovery
isolates applications from
network topology and
connectivity details
DDS Global Data Space
...
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
Dynamic Discovery
6. The relevant portion of the
data space is projected on
the application address
space. Each typed projection
is commonly called a Cache
No single point of failure or
bottleneck
Decentralised
Data Space
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
TopicD
QoS
TopicD
QoS
TopicA
QoS
7. Connectivity is dynamically
adapted to chose the most
effective way of sharing data
Adaptive Connectivity
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
TopicD
QoS
TopicD
QoS
TopicA
QoS
The communication between
the DataWriter and matching
DataReaders can be peer-to-
peer exploiting UDP/IP
(Unicast and Multicast)or
TCP/IP
The communication between
the DataWriter and matching
DataReaders can be
“brokered” but still
exploiting UDP/IP (Unicast
and Multicast)or TCP/IP
9. A domain-wide information’s
class A Topic defined by means
of a <name, type, qos>
Topic
DDS Global Data Space
...
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
Topic
Type
Name
QoS
12. Topic types can be expressed
using different syntaxes,
including IDL and ProtoBuf
Topic Type
struct CarDynamics {
string cid;
long x; long y;
float dx; long dy;
}
#pragma keylist CarDynamics cid
IDL
13. Topic types can be expressed
using different syntaxes,
including IDL and ProtoBuf
Topic Type message CarDynamics {
option (.omg.dds.type) =
{name: "CarDynamics"};
required string cid = 0
[(.omg.dds.member).key = true];
required long x = 1;
required long y = 2;
required float dx = 3;
required long dy = 4;
}
ProtoBuf
15. Topic types can be expressed
using different syntaxes,
including IDL and ProtoBuf
Topic Type
class CarDynamics:
constructor:
(@cid, @x, @y, @dx, @dy) ->
CoffeeScript
16. Topic types can be expressed
using different syntaxes,
including IDL and ProtoBuf
Topic Type
public struct CaDynamics {
public string cid { get; set; }
public int x { get; set; }
public int y { get; set; }
public int dx { get; set; }
public int dy { get; set; }
public CaDynamics (string cid,
int x, int y, int dx, int dy)
{
this.cid = cid;
this.x = x; this.y = y;
this.dx = dx; this.dy = dy;
}
}
C#
17. Topic types can be expressed
using different syntaxes,
including IDL and ProtoBuf
Topic Type
@KeyList ( topicType = "CarDynamics", keys = {"cid"})
public class CarDynamics {
public String cid;
public int x; public int dx;
public int y; public int dy;
public CarDynamics(String s, int a, int b,
int c,int d) {
this.cid = s;
this.x = a; this.dx = b;
this.y = c; this.dy = d;
}
@Override
public String toString() {
…
}
}
Java
19. CopyrightPrismTech,2015
Each unique key value identifies
a stream of data
Vortex demultiplexes “streams”
and provides lifecycle
information
A DataWriter can write samples
belonging to multiple instances
Topic Instances
CarDynamics
Instances
struct CarDynamics {
@key
string cid;
long x; long y;
float dx; long dy;
}
Topic
Topic Type
Sample
20. QoS policies allow to express
temporal and availability
constraints for data
DDS Global Data Space
...
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
QoS - Enabled
21. A collection of policies
that control non-
functional properties
such as reliability,
persistence, temporal
constraints and priority
QoS
HISTORY
LIFESPAN
DURABILITY
DEADLINE
LATENCY BUDGET
TRANSPORT PRIO
TIME-BASED FILTER
RESOURCE LIMITS
USER DATA
TOPIC DATA
GROUP DATA
OWENERSHIP
OWN. STRENGTH
LIVELINESS
ENTITY FACTORY
DW LIFECYCLE
DR LIFECYCLE
PRESENTATION
RELIABILITY
PARTITION
DEST. ORDER
RxO QoS Local QoS
24. Each Data Reader is
associated with a Cache
The Cache stores the last
n∊𝜨∞
samples for each
relevant instance
Data Cache
Data
Writer
Data
Writer
Data
Writer
Data
Reader
Data
Reader
Data
Reader
Data
Writer
TopicA
QoS
TopicB
QoS
TopicC
QoS
TopicD
QoS
TopicD
QoS
TopicD
QoS
TopicA
QoS
25. Each Data Reader is
associated with a Cache
The Cache stores the last
n∊𝜨∞
samples for each
relevant instance
Data Cache
DataReader Cache
DataReader
...
Samples
Instances
Cache
26. The action of reading
samples for a Reader Cache
is non-destructive.
Samples are not removed
from the cache
Reading Data
DataReader Cache
DataReader
...
DataReader Cache
DataReader
...read
27. The action of taking
samples for a Reader Cache
is destructive.
Samples are removed from
the cache
Taking Data
DataReader Cache
DataReader
...
DataReader Cache
DataReader
...take
28. Samples can be selected
using composable content
and status predicates
Sample Selectors
DataReader Cache
DataReader
...
29. Filters allow to control what
gets into a DataReader
cache
Filters are expressed as
SQL where clauses or as
Java/C/JavaScript
predicates
Content-Filtering
DataReader Cache
DataReader
...
Filter
Application
Network
30. Content Filters
can be used to
project on the
local cache only
the Topic data
satisfying a given
predicate
Content
Filters struct CarDynamics {
@key
string cid;
long x; long y;
float dx; long dy;
}
cid x y dx dy
GR 33N GO 167 240 45 0
LO 00V IN 65 26 65 0
AN 637 OS 32 853 0 50
AB 123 CD 325 235 80 0
“dx > 50 OR dy > 50”
Type
CarDynamics
cid x y dx dy
LO 00V IN 65 26 65 0
AB 123 CD 325 235 80 0
Reader Cache
31. Queries allow to control
what gets out of a
DataReader Cache
Queries are expressed as
SQL where clauses or as
Java/C/JavaScript
predicates
Content-Based
Selection
DataReader Cache
DataReader
...
Query
DataReader Cache
DataReader
...
Application
Network
32. Reader Cache
Queries can be
used to select out
of the local cache
the data matching
a given predicate
Queries struct CarDynamics {
@key
string cid;
long x; long y;
float dx; long dy;
}
cid x y dx dy
GR 33N GO 167 240 45 0
LO 00V IN 65 26 65 0
AN 637 OS 32 853 0 50
AB 123 CD 325 235 80 0
“dx > 50 OR dy > 50”
Type
CarDynamics
cid x y dx dy
GR 33N GO 167 240 45 0
LO 00V IN 65 26 65 0
AN 637 OS 32 853 0 50
AB 123 CD 325 235 80 0
cid x y dx dy
LO 00V IN 65 26 65 0
AB 123 CD 325 235 80 0
query
33. State based selection
allows to control what gets
out of a DataReader Cache
State base selectors
predicate on samples meta-
information
State-Based Selection
DataReader Cache
DataReader
...
State Selector
DataReader Cache
DataReader
...
Application
Network
34. Sample State (READ, NOT_READ)
allows to distinguish between new
samples and samples that have
already been read
State-Based Selection
DataReader Cache
DataReader
...
State Selector
DataReader Cache
DataReader
...
Application
Network
35. The View State (NEW, NOT_NEW)
allows to distinguish a new instance
from an existing one
State-Based Selection
DataReader Cache
DataReader
...
State Selector
DataReader Cache
DataReader
...
Application
Network
36. The Instance State (ALIVE,
NOT_ALIVE_DISPOSED,
NOT_ALIVE_NO_WRITERS) allows to
track the life-cycle transitions of the
instance to which a sample belongs
State-Based Selection
DataReader Cache
DataReader
...
State Selector
DataReader Cache
DataReader
...
Application
Network
37. Selector Example
// == ISO C++ DDS API ==
auto data =
dr.select()
.content(query)
.state(data_state)
.instance(handle)
.read();
40. CopyrightPrismTech,2015
Writing Data in C++
#include <dds.hpp>
int main(int, char**) {
DomainParticipant dp(0);
Topic<Meter> topic(“SmartMeter”);
auto pqos = dp.get_default_pubqos()
<< Partition (“FR:IdF:Essonne:Gif:Essonne:Mnts:123”);
Publisher pub(dp, pqos);
DataWriter<Meter> dw(pub, topic);
while (!done) {
auto value = readMeter()
dw.write(value);
std::this_thread::sleep_for(SAMPLING_PERIOD);
}
return 0;
}
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
41. CopyrightPrismTech,2015
Reading Data in C++
#include <dds.hpp>
int main(int, char**) {
DomainParticipant dp(0);
Topic<Meter> topic(”SmartMeter”);
Subscriber sub(dp);
DataReader<Meter> dr(dp, topic);
LambdaDataReaderListener<DataReader<Meter>> lst;
lst.data_available = [](DataReader<Meter>& dr) {
auto samples = data.read();
std::for_each(samples.begin(), samples.end(), [](Sample<Meter>& sample) {
std::cout << sample.data() << std::endl;
}
}
dr.listener(lst);
// Print incoming data up to when the user does a Ctrl-C
std::this_thread::join();
return 0;
}
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
42. CopyrightPrismTech,2014
Writing Data in Scala
import dds._
import dds.prelude._
import dds.config.DefaultEntities._
object SmartMeter {
def main(args: Array[String]): Unit = {
val topic = Topic[Meter](“SmartMeter”)
val dw = DataWriter[Meter](topic)
while (!done) {
val meter = readMeter()
dw.write(meter)
Thread.sleep(SAMPLING_PERIOD)
}
}
}
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
43. CopyrightPrismTech,2014
Reading Data in Scala
import dds._
import dds.prelude._
import dds.config.DefaultEntities._
object SmartMeterLog {
def main(args: Array[String]): Unit = {
val topic = Topic[Meter](“SmartMeter”)
val dr = DataReader[Meter](topic)
dr listen {
case DataAvailable(_) => dr.read.foreach(println)
}
}
}
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
44. CopyrightPrismTech,2015
Writing Data in Python
import dds
import time
if __name__ == '__main__':
topic = dds.Topic("SmartMeter", "Meter")
dw = dds.Writer(topic)
while True:
m = readMeter()
dw.write(m)
time.sleep(0.1)
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
45. CopyrightPrismTech,2015
Reading Data in Python
import dds
import sys
def readData(dr):
samples = dds.range(dr.read())
for s in samples:
sys.stdout.write(str(s.getData()))
if __name__ == '__main__':
t = dds.Topic("SmartMeter", "Meter")
dr = dds.Reader(t)
dr.onDataAvailable = readData
enum UtilityKind {
ELECTRICITY,
GAS,
WATER
};
struct Meter {
string sn;
UtilityKind utility;
float reading;
float error;
};
#pragma keylist Meter sn
47. Device implementations
optimised for OT, IT and
consumer platforms
Native support for Cloud and
Fog Computing Architectures
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
48. Available across IT, Consumer
and OT platforms Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
49. Polyglot and Interoperable
across Programming
Languages
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
50. Fully Independent of the
Cloud Infrastructure
Private Clouds
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
51. Native Integration with the
hottest real-time analytics
platforms and CEP Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
55. Secure
Data-Level security with
Pluggable Authentication
Access Control and Crypto
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
56. Default Plug-ins
X.509 Public Key
Infrastructure (PKI) based
authentication
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
57. Default Plug-ins
Access Control List file
signed by a shared
Certificate Authority for
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
58. Default Plug-ins
Crypto based on TLS
Cipher Suite
Device-2-DeviceDevice-2-Cloud
Fog-2-Cloud
Device-2-Fog
Cloud-2-Cloud
Fog-2-Fog
infrastructuresdk
59. Secure
Data-Security as opposed
to simply Transport-Level
security
Arthur Dent
Arthur Dent
Ford Prefect
Zaphod Beeblebrox
Marvin
Trillian
left/A(r,w), left/B(r)
left/A(r,w), left/B(r,w), left/X(r)
left/*(r,w)
left/*(r), right/(w)
left/A(r,w), left/B(r,w), right/C(r,w)
Ford Prefect
Zaphod Beeblebrox
Trillian
Marvin
A
B
A,B
X
*
*
A,B,C
Identity Access Rights
Sessions are authenticated
and communication is
encrypted
Only the Topic included as
part of the access rights are
visible and accessible
60. Secure
Fine-grained access control
over Partition/Topic/
Instance regular expressions
Arthur Dent
Arthur Dent
Ford Prefect
Zaphod Beeblebrox
Marvin
Trillian
left/A(r,w), left/B(r)
left/A(r,w), left/B(r,w), left/X(r)
left/*(r,w)
left/*(r), right/(w)
left/A(r,w), left/B(r,w), right/C(r,w)
Ford Prefect
Zaphod Beeblebrox
Trillian
Marvin
A
B
A,B
X
*
*
A,B,C
Identity Access Rights
Sessions are authenticated
and communication is
encrypted
Only the Topic included as
part of the access rights are
visible and accessible
61. Secure
Support for Symmetric and
Asymmetric Authentication
Arthur Dent
Arthur Dent
Ford Prefect
Zaphod Beeblebrox
Marvin
Trillian
left/A(r,w), left/B(r)
left/A(r,w), left/B(r,w), left/X(r)
left/*(r,w)
left/*(r), right/(w)
left/A(r,w), left/B(r,w), right/C(r,w)
Ford Prefect
Zaphod Beeblebrox
Trillian
Marvin
A
B
A,B
X
*
*
A,B,C
Identity Access Rights
Sessions are authenticated
and communication is
encrypted
Only the Topic included as
part of the access rights are
visible and accessible
62. Boundary Security
Boundary security support is
enabled by Vortex-Fog
Device-to-Cloud
Communication
Peer-to-Peer
(Broker-less)
Device-to-Device
Communication
Fog Computing Fog Computing
Fog Computing
TLS
TLS
63. Boundary Security
Separates security concerns at
different scales and controls
what information is exposed
Device-to-Cloud
Communication
Peer-to-Peer
(Broker-less)
Device-to-Device
Communication
Fog Computing Fog Computing
Fog Computing
TLS
TLS
65. Vortex device, such as Lite, Café,
and Web are used to share data
between different kinds of
applications within a car
Café and Web are typically used
Android / HTML5 based
infotainment
Lite in typically used in ECU,
sensors and onboard analytics
66. Vortex Fog is used to
transparently (for in car apps)
decouple and control the data
sharing within and across the
car
Vortex Fog also helps defining
security boundaries and
policies
67. Vortex Fog efficiently and
securely deals with car to car
communication
Vortex Fog allows to
decouple the transport used
for in-car communication
and that used for car-to-car
communication
68. Vortex Fog efficiently and
securely deals with cloud
connectivity adapting traffic
flows and protocols
Device-to-Cloud
Communication
Cloud Analytics
Fog Analytics
Fog Analytics
Fog Analytics
Vortex Cloud efficiently
and securely makes data
available to any device at an
Internet Scale
69. Vortex Cloud efficiently
and securely makes data
available to any device at
an Internet Scale
Device-to-Cloud
Communication
Cloud Analytics
Fog Analytics
Fog Analytics
Fog Analytics
71. CopyrightPrismTech,2015
Connected Boulevard — Nice, France
Vortex enables is the data sharing platform
for the City Operating System
Tens of thousands of devices
connected
by Vortex
75. ESA
Extremely Large & SMART
Telescope (ELT)
1750 computing nodes
100.000 mirrors
whose position is
adjusted 100 times
per second!
ELT will allow astronomers
to probe the earliest stages
of the formation of
planetary systems and to
detect water and organic
molecules in proto-
planetary discs around
stars in the making