Skip to content

Commit

Permalink
Merge pull request #1203 from ApexAI/iox-#743-add-architecture-article
Browse files Browse the repository at this point in the history
iox-#743 Add architecture article
  • Loading branch information
mossmaurice authored Mar 3, 2022
2 parents 1e62939 + 981d311 commit b4fec12
Show file tree
Hide file tree
Showing 6 changed files with 294 additions and 1 deletion.
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
64 changes: 64 additions & 0 deletions doc/website/concepts/architecture.md
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).
Loading

0 comments on commit b4fec12

Please sign in to comment.