Overview » History » Version 18

J. Wienke, 06/10/2011 06: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 8 J. Wienke
* targeting at technical architecture (only supporting functional concepts)
9 8 J. Wienke
* performance requirements
10 8 J. Wienke
* platform requirements
11 9 J. Wienke
* programming language requirements
12 12 J. Wienke
** desired set of languages
13 12 J. Wienke
** natural feeling in each language by using native mechanisms
14 9 J. Wienke
* basis for describing and analyzing systems required
15 11 J. Wienke
* open architecture required
16 1 J. Wienke
** specifications for data format and transport protocols
17 11 J. Wienke
** use of existing (and open) naming services
18 8 J. Wienke
19 7 J. Wienke
h2. Sebastian's Aims
20 1 J. Wienke
21 10 J. Wienke
* XCF support ends
22 1 J. Wienke
** better solution required
23 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
24 12 J. Wienke
* variable dispatching mechanisms not forced by the framework
25 1 J. Wienke
26 15 J. Wienke
h2. Lessons learned (from other frameworks, e.g. XCF, YARP, ROS, NaoQi)
27 1 J. Wienke
28 15 J. Wienke
identified problems:
29 15 J. Wienke
30 15 J. Wienke
* Footprint too large for embedded systems
31 15 J. Wienke
* Architectural erosion
32 15 J. Wienke
* Unmaintainable code base
33 15 J. Wienke
* important parameters and implicit assumptions should not be hidden in the code for analysis
34 15 J. Wienke
* missing introspection functionalities
35 15 J. Wienke
* bad error handling strategies, e.g. missing transparency for the client (i.e. swallowed exceptions)
36 15 J. Wienke
37 15 J. Wienke
lessons learned:
38 15 J. Wienke
39 15 J. Wienke
* layered architecture with improved functional decomposition in distinct libraries, layers:
40 15 J. Wienke
** core (bus realization across different transports)
41 15 J. Wienke
** tools
42 15 J. Wienke
** XML compatibility layer
43 15 J. Wienke
** XCF API adapters
44 15 J. Wienke
* clear dependency statements:
45 15 J. Wienke
** core must survive with the least amount of external libraries
46 15 J. Wienke
** different language implementation should not depend on a single base implementation (reduce development and deployment complexity, increase usability of the framework)
47 15 J. Wienke
* development process
48 15 J. Wienke
** developer team ;)
49 15 J. Wienke
** clear testing strategies
50 15 J. Wienke
** continuous integration
51 15 J. Wienke
* allow more flexibility through defined interfaces and protocols
52 15 J. Wienke
** allow different transports, e.g. in-process
53 15 J. Wienke
** encoding flexibility for user data to meet domain and performance requirements
54 15 J. Wienke
* provide additional system structures like services to aggregate coherent functionality
55 7 J. Wienke
56 17 J. Wienke
h2. Functional properties (so far):
57 2 J. Wienke
58 1 J. Wienke
* Event-driven middleware with broadcast semantics
59 17 J. Wienke
** Additional communication patterns implemented on top of this base functionality
60 1 J. Wienke
* logically unified bus across multiple transports
61 1 J. Wienke
** currently a spread-based and an in-process transport are available
62 4 J. Wienke
** extensible to other transports -> compatibility to existing frameworks
63 1 J. Wienke
* Bus is structured by hierarchical channels
64 1 J. Wienke
** / receives all messages of sub-scopes like /a/test
65 16 J. Wienke
* Support for filtering events:
66 16 J. Wienke
** content-based
67 16 J. Wienke
** on meta-data
68 16 J. Wienke
69 16 J. Wienke
Adopted concepts (from XCF):
70 16 J. Wienke
* event-driven
71 16 J. Wienke
* broadcast semantics
72 16 J. Wienke
* content-based filtering
73 16 J. Wienke
* introspection
74 2 J. Wienke
75 17 J. Wienke
h2. Non-functional properties (so far):
76 2 J. Wienke
77 17 J. Wienke
* lightweight (will remain [for the core]):
78 2 J. Wienke
** small dependency footprint for the core layer
79 2 J. Wienke
** Targeting at embedded systems (e.g. Nao)
80 2 J. Wienke
* Languages: cpp, java, python, common lisp
81 2 J. Wienke
** real implementations, no bindings to provide natural interfaces in each language
82 2 J. Wienke
* No single wire type like XML:
83 2 J. Wienke
** instead arbitrary client data is serialized to different wire types using (user-installed) converters
84 6 J. Wienke
*** default set of converters exists (e.g. source:/trunk/cpp/core/src/rsb/converter/StringConverter.cpp)
85 3 J. Wienke
** provide flexible and fast serialization mechanisms
86 3 J. Wienke
** XML support layer as additional library
87 18 J. Wienke
* performance requirements on network-based (UDP) and in-process transport
88 18 J. Wienke
** no hard real-time
89 18 J. Wienke
** avoid serialization when possible
90 3 J. Wienke
91 3 J. Wienke
h2. Planned functionality:
92 3 J. Wienke
93 3 J. Wienke
* naming and discovery
94 3 J. Wienke
* introspection tools
95 3 J. Wienke
* model-based setup