Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iox-#743 Add architecture article #1203

Merged
Merged
97 changes: 97 additions & 0 deletions doc/design/diagrams/iceoryx_components_diagram_v2_0_0.puml
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
34 changes: 34 additions & 0 deletions doc/design/diagrams/iceoryx_software_layers_v2_0_0.puml
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
63 changes: 63 additions & 0 deletions doc/website/concepts/architecture.md
Original file line number Diff line number Diff line change
@@ -1 +1,64 @@
# 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](iceoryx_hoofs.md).
mossmaurice marked this conversation as resolved.
Show resolved Hide resolved

### 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 [SoA](https://en.wikipedia.org/wiki/Service-oriented_architecture)
mossmaurice marked this conversation as resolved.
Show resolved Hide resolved
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` contain classes which compose the RouDi daemon.
mossmaurice marked this conversation as resolved.
Show resolved Hide resolved

### 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.
mossmaurice marked this conversation as resolved.
Show resolved Hide resolved

For more information, refer to the [icecrystal example](icecrystal.md).
mossmaurice marked this conversation as resolved.
Show resolved Hide resolved
Loading