Overview » History » Version 24

S. Wrede, 06/15/2011 12:08 PM

1 1 J. Wienke
h1. Overview
2 1 J. Wienke
3 8 J. Wienke
h2. Problem statement
4 8 J. Wienke
5 8 J. Wienke
* easier integration of complex (partially) distributed systems required
6 8 J. Wienke
** in-house (one middleware)
7 8 J. Wienke
** adaption (combination with other middlewares)
8 24 S. Wrede
* reduce islands of non-accessible functionality
9 8 J. Wienke
* targeting at technical architecture (only supporting functional concepts)
10 8 J. Wienke
* performance requirements
11 8 J. Wienke
* platform requirements
12 9 J. Wienke
* programming language requirements
13 12 J. Wienke
** desired set of languages
14 12 J. Wienke
** natural feeling in each language by using native mechanisms
15 9 J. Wienke
* basis for describing and analyzing systems required
16 22 S. Wrede
* accept heterogenity: open architecture required
17 1 J. Wienke
** specifications for data format and transport protocols
18 11 J. Wienke
** use of existing (and open) naming services
19 8 J. Wienke
20 7 J. Wienke
h2. Sebastian's Aims
21 1 J. Wienke
22 10 J. Wienke
* XCF support ends
23 1 J. Wienke
** better solution required
24 11 J. Wienke
* limited client interface that converts to domain data as soon as possible to prevent dependency on middleware throughout the whole client code
25 12 J. Wienke
* variable dispatching mechanisms not forced by the framework
26 1 J. Wienke
27 15 J. Wienke
h2. Lessons learned (from other frameworks, e.g. XCF, YARP, ROS, NaoQi)
28 1 J. Wienke
29 15 J. Wienke
identified problems:
30 15 J. Wienke
31 15 J. Wienke
* Footprint too large for embedded systems
32 15 J. Wienke
* Architectural erosion
33 15 J. Wienke
* Unmaintainable code base
34 15 J. Wienke
* important parameters and implicit assumptions should not be hidden in the code for analysis
35 15 J. Wienke
* missing introspection functionalities
36 15 J. Wienke
* bad error handling strategies, e.g. missing transparency for the client (i.e. swallowed exceptions)
37 20 J. Wienke
* sending schema-free messages was too easy
38 15 J. Wienke
39 15 J. Wienke
lessons learned:
40 15 J. Wienke
41 15 J. Wienke
* layered architecture with improved functional decomposition in distinct libraries, layers:
42 15 J. Wienke
** core (bus realization across different transports)
43 15 J. Wienke
** tools
44 15 J. Wienke
** XML compatibility layer
45 15 J. Wienke
** XCF API adapters
46 15 J. Wienke
* clear dependency statements:
47 15 J. Wienke
** core must survive with the least amount of external libraries
48 15 J. Wienke
** different language implementation should not depend on a single base implementation (reduce development and deployment complexity, increase usability of the framework)
49 15 J. Wienke
* development process
50 19 J. Wienke
** bigger developer team > 1 experienced person
51 15 J. Wienke
** clear testing strategies
52 15 J. Wienke
** continuous integration
53 15 J. Wienke
* allow more flexibility through defined interfaces and protocols
54 15 J. Wienke
** allow different transports, e.g. in-process
55 15 J. Wienke
** encoding flexibility for user data to meet domain and performance requirements
56 1 J. Wienke
* provide additional system structures like services to aggregate coherent functionality
57 19 J. Wienke
* avoid centralized nameservice
58 20 J. Wienke
* possibility to send schema-free messages is still possible, but using well-defined schemas is much more enforced
59 7 J. Wienke
60 23 S. Wrede
h2. What is and what it is not
61 23 S. Wrede
62 23 S. Wrede
* Soft-RT but no hard real-time
63 23 S. Wrede
* in-process, shared-mem, ipc
64 23 S. Wrede
* no component architecture
65 23 S. Wrede
66 17 J. Wienke
h2. Functional properties (so far):
67 2 J. Wienke
68 1 J. Wienke
* Event-driven middleware with broadcast semantics
69 17 J. Wienke
** Additional communication patterns implemented on top of this base functionality
70 1 J. Wienke
* logically unified bus across multiple transports
71 1 J. Wienke
** currently a spread-based and an in-process transport are available
72 4 J. Wienke
** extensible to other transports -> compatibility to existing frameworks
73 1 J. Wienke
* Bus is structured by hierarchical channels
74 1 J. Wienke
** / receives all messages of sub-scopes like /a/test
75 16 J. Wienke
* Support for filtering events:
76 16 J. Wienke
** content-based
77 1 J. Wienke
** on meta-data
78 19 J. Wienke
* URI-based
79 16 J. Wienke
80 16 J. Wienke
Adopted concepts (from XCF):
81 16 J. Wienke
* event-driven
82 16 J. Wienke
* broadcast semantics
83 16 J. Wienke
* content-based filtering
84 16 J. Wienke
* introspection
85 2 J. Wienke
86 17 J. Wienke
h2. Non-functional properties (so far):
87 2 J. Wienke
88 17 J. Wienke
* lightweight (will remain [for the core]):
89 2 J. Wienke
** small dependency footprint for the core layer
90 2 J. Wienke
** Targeting at embedded systems (e.g. Nao)
91 2 J. Wienke
* Languages: cpp, java, python, common lisp
92 2 J. Wienke
** real implementations, no bindings to provide natural interfaces in each language
93 2 J. Wienke
* No single wire type like XML:
94 2 J. Wienke
** instead arbitrary client data is serialized to different wire types using (user-installed) converters
95 6 J. Wienke
*** default set of converters exists (e.g. source:/trunk/cpp/core/src/rsb/converter/StringConverter.cpp)
96 3 J. Wienke
** provide flexible and fast serialization mechanisms
97 3 J. Wienke
** XML support layer as additional library
98 18 J. Wienke
* performance requirements on network-based (UDP) and in-process transport
99 18 J. Wienke
** no hard real-time
100 1 J. Wienke
** avoid serialization when possible
101 19 J. Wienke
* No hard dependency on name service
102 3 J. Wienke
103 3 J. Wienke
h2. Planned functionality:
104 3 J. Wienke
105 3 J. Wienke
* introspection tools
106 1 J. Wienke
* model-based setup
107 21 J. Wienke
* Naming, Service discovery
108 21 J. Wienke
** Distributed (e.g. mdns, upnp, etc.)
109 21 J. Wienke
* Sychronization primitives
110 21 J. Wienke
** E.g., AV Fusion
111 21 J. Wienke
* Tools, in particular
112 21 J. Wienke
** Introspection
113 21 J. Wienke
** Logging, Replay
114 21 J. Wienke
* Platforms
115 21 J. Wienke
** Web integration (WebServices)
116 21 J. Wienke
** XMPP
117 21 J. Wienke
** Mobile devices
118 21 J. Wienke
** DNLA (streaming, etc.)
119 21 J. Wienke
* Timing
120 21 J. Wienke
** Time-informer
121 21 J. Wienke
*** Clock source
122 21 J. Wienke
*** Synchronization
123 21 J. Wienke
** Associated Patterns
124 21 J. Wienke
*** Clock-driven behavior
125 21 J. Wienke
*** Clock-based filtering
126 21 J. Wienke
* Model Layer/Component Model
127 21 J. Wienke
** Role of @Service@ class
128 21 J. Wienke
* Framework Interoperability
129 21 J. Wienke
* Plugin Mechanism (for C++)
130 21 J. Wienke
* Content-based filtering
131 21 J. Wienke
** ProtocolBuffer layer
132 21 J. Wienke
** Ideally, without unpacking