-
Notifications
You must be signed in to change notification settings - Fork 402
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1203 from ApexAI/iox-#743-add-architecture-article
iox-#743 Add architecture article
- Loading branch information
Showing
6 changed files
with
294 additions
and
1 deletion.
There are no files selected for viewing
97 changes: 97 additions & 0 deletions
97
doc/design/diagrams/iceoryx_components_diagram_v2_0_0.puml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
@startuml | ||
|
||
title Eclipse iceoryx Component Overview v2.0.0 | ||
|
||
skinparam BackgroundColor transparent | ||
skinparam componentStyle uml2 | ||
|
||
skinparam component { | ||
backgroundColor<<namespace>> yellow | ||
} | ||
|
||
skinparam package { | ||
backgroundColor green | ||
} | ||
|
||
skinparam frame { | ||
backgroundColor chocolate | ||
} | ||
|
||
' PlantUML package: CMake package | ||
' PlantUML frame: CMake library | ||
|
||
' HOOFS: Helpful Objects Optimised For Safety | ||
' Library containing modern C++ STL constructs | ||
package iceoryx_hoofs { | ||
frame "hoofs library" { | ||
component concurrent <<namespace>> | ||
component cxx <<namespace>> { | ||
component newtype <<namespace>> | ||
component set <<namespace>> | ||
component algorithm <<namespace>> | ||
} | ||
component DesignPattern <<namespace>> | ||
component log <<namespace>> { | ||
component ffbb <<namespace>> | ||
} | ||
component units <<namespace>> { | ||
component duration_literals <<namespace>> | ||
|
||
} | ||
component posix <<namespace>> | ||
component rp <<namespace>> | ||
} | ||
} | ||
|
||
' POSH: POSIX SHared memory | ||
' Publish/subscribe IPC communication infrastructure based on shared memory | ||
package iceoryx_posh { | ||
frame "core library" { | ||
component popo <<namespace>> | ||
component capro <<namespace>> | ||
component mepoo <<namespace>> | ||
component version <<namespace>> | ||
component build <<namespace>> | ||
component runtime <<namespace>> | ||
component helper <<namespace>> | ||
} | ||
|
||
frame "gateway library" { | ||
component gw <<namespace>> | ||
} | ||
|
||
frame "RouDi library" { | ||
component roudi <<namespace>> | ||
} | ||
|
||
frame "config library" { | ||
component config <<namespace>> | ||
} | ||
} | ||
|
||
' DDS: Data Distribution Service | ||
' | ||
package iceoryx_dds { | ||
component dds <<namespace>> | ||
component gw <<namespace>> as gateway_dds | ||
} | ||
|
||
' C-Binding | ||
package iceoryx_binding_c { | ||
component cpp2c <<namespace>> | ||
component c2cpp <<namespace>> | ||
} | ||
|
||
|
||
' Introspection | ||
package iceoryx_introspection { | ||
component client <<namespace>> { | ||
component introspection <<namespace>> | ||
} | ||
} | ||
|
||
iceoryx_posh ..> iceoryx_hoofs : use | ||
iceoryx_dds ..> iceoryx_posh : use | ||
iceoryx_binding_c ..> iceoryx_posh : use | ||
introspection ..> iceoryx_posh : use | ||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
@startuml | ||
|
||
title Eclipse iceoryx software layers (v2.0.0) | ||
|
||
skinparam BackgroundColor transparent | ||
skinparam componentStyle uml2 | ||
|
||
skinparam component { | ||
backgroundColor<<namespace>> yellow | ||
} | ||
|
||
skinparam package { | ||
backgroundColor green | ||
} | ||
|
||
skinparam frame { | ||
backgroundColor chocolate | ||
} | ||
|
||
[iceoryx_hoofs] | ||
[iceoryx_posh] | ||
[iceoryx_binding_c] | ||
[C user app] | ||
[C++ user app] | ||
|
||
note right of iceoryx_hoofs : Basic building block library | ||
note right of iceoryx_posh : Shared memory transport (POsix SHared memory) | ||
note left of iceoryx_binding_c : C API for iceoryx_posh | ||
|
||
[iceoryx_posh] ..> [iceoryx_hoofs] | ||
[iceoryx_binding_c] ..> [iceoryx_posh] | ||
[C user app] ..> [iceoryx_binding_c] | ||
[C++ user app] ..> [iceoryx_posh] | ||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,65 @@ | ||
# Architecture | ||
|
||
This article provides an overview of the Eclipse iceoryx architecture and explains the rationale for it. | ||
|
||
## Software layers | ||
|
||
The main packages which Eclipse iceoryx is composed of are depicted below. | ||
|
||
![Software layers](../images/iceoryx_software_layers_v2_0_0.svg) | ||
|
||
The next sections briefly describe the components and their libraries one by one. | ||
|
||
## Components and libraries | ||
|
||
The different libraries and their namespaces are depicted below. | ||
|
||
![Component diagram](../images/iceoryx_components_diagram_v2_0_0.svg) | ||
|
||
### iceoryx hoofs | ||
|
||
Handy Objects Optimized For Safety (hoofs) is a library and contains various building blocks like fixed size containers, | ||
concurrency classes and modern, next-gen C++ constructs from upcoming C++ standard releases. | ||
|
||
For more information about the components, refer to its [detailed description](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_hoofs/README.md). | ||
|
||
### iceoryx posh | ||
|
||
The package `iceoryx_posh` (**PO**SIX **SH**ared memory) contains everything related to shared memory inter-process communication. | ||
|
||
#### Core library | ||
|
||
This section describes the namespaces of the core library. | ||
|
||
* `popo`: The namespace posh ports contains the user-API classes which are used to transfer data. | ||
* `capro`: The namespace canonical protocol implements the [canonical protocol pattern](https://en.wikipedia.org/wiki/Canonical_protocol_pattern) | ||
protocol, which is used by `iceoryx_posh` to connect and discover `popo::Publisher` and `popo::Server`. | ||
* `mepoo`: The namespace memory pool contains all memory-related classes. For example the `MemoryManager` or `SharedPointer`. | ||
* `version`: The namespace version contains ABI compatibilities checks. | ||
* `build`: The namespace build contains certain maximium values which can be changed before compilation. | ||
|
||
#### Gatway library | ||
|
||
* The gateway library and its namespace `gw` contain generic abstractions to create a gateway. They are used by `iceoryx_dds`. | ||
|
||
#### RouDi library | ||
|
||
* The library RouDi and its namespace `roudi` contains classes which are used by the RouDi middleware daemon. | ||
|
||
### iceoryx C binding | ||
|
||
The module `iceoryx_binding_c` makes the inter-process communication features of `iceoryx_posh` available in C. | ||
|
||
### iceoryx DDS | ||
|
||
The package `iceoryx_dds` provides a bi-directional DDS gateway using [Eclipse Cyclone DDS](https://cyclonedds.io/). | ||
The gateway can be used to send data over a network e.g. via Ethernet. | ||
|
||
For more information, refer to the [Readme](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_dds/README.md). | ||
|
||
### iceoryx introspection | ||
|
||
The introspection client can be used for live debugging and provides information of the current system like memory | ||
usage and established connections. | ||
|
||
For more information, refer to the [icecrystal example](../examples/icecrystal.md). |
Oops, something went wrong.