Skip to Content
アーキテクチャセマンティックアーキテクチャ

セマンティックアーキテクチャ

このページでは、IronFlockのデータモデル(コアアセットとその相互関係)について説明します。アーキテクチャ概要ではシステムの物理的なレイヤー(エッジ、クラウド、メッセージブローカー)を扱いますが、ここでは論理構造 — プロジェクト、デバイス、アプリ、データ間の関係に焦点を当てます。

エンティティ概要

アカウント ├─ アプリ │ └─ リリース └─ プロジェクト ├─ デバイス ──────────┐ │ └─ アプリエッジコンポーネント ├─ グループ ─────────┘ ├─ リリースインストール ├─ Fleetデータベース │ └─ データテーブル ├─ ダッシュボード └─ アラーム

コアアセット

アカウント

アカウントは最上位のアイデンティティ — IronFlockにサインインした個人または組織です。アカウントはプロジェクトアプリを所有します。アプリとプロジェクトはどちらもアカウントの直接の子ですが、互いに独立して存在します。

アプリ

アプリはデプロイ可能なソフトウェアパッケージです。アプリはプロジェクトではなくアカウントに属します — 1つのアプリを多くの異なるプロジェクトにインストールできます。アプリ自体は実行されません。リリースをデバイスにインストールできるカタログエントリとして機能します。

リリース

リリースはアプリの不変でバージョン管理されたビルドです。READY状態のリリースのみがデバイスにインストールできます。リリースは不変です — アプリの動作を変更するには、新しいリリースが公開されます。

プロジェクト

プロジェクトは主要な分離境界です。プロジェクト内のすべて — デバイス、グループ、インストール、データ、ダッシュボード、アラーム — は他のプロジェクトからは見えません。各プロジェクトにはメッセージブローカー上の独自のWAMPレルム、専用のFleetデータベース、独自のデバイス、グループ、インストール、ダッシュボード、アラームがあります。

デバイス

デバイスはIronFlockエージェントを実行する物理または仮想のLinuxマシンです。各デバイスはちょうど1つのプロジェクトに属します。デバイスはインストールされたリリースのエッジコンポーネント — ハードウェア上でローカルに実行されるコンテナ — をホストします。デバイスは複数のリリースのエッジコンポーネントを同時にホストでき、複数のグループのメンバーになれます。

グループ

グループはプロジェクト内のデバイスの論理的なコレクションで、一括操作に使用されます。デバイスは複数のグループに所属できます(多対多)。グループにリリースがインストールされると、各メンバーデバイスはグループの設定を継承するか、ローカルで上書きできるインストールを受け取ります。

リリースインストール

リリースインストールは特定のデバイス上の特定のリリースの実行中インスタンスです。プロジェクト内でデバイスとリリースを結合するものです。グループ経由でインストールされた場合、各デバイスのインストールはグループの設定を継承または上書きでき、フリート全体のデフォルトとデバイスごとの例外を提供します。

グループインストール ├─ デバイスA → グループから継承 ├─ デバイスB → グループから継承 └─ デバイスC → カスタム設定で上書き

Fleetデータベース

各プロジェクトには専用のFleetデータベース — 時系列データ用のTimescaleDB拡張機能を備えたPostgreSQLデータベースがあります。デバイス上のエッジコンポーネントがWAMP経由でテレメトリを公開し、FleetDBサービスがプロジェクトのデータベースに書き込み、データはダッシュボード、AIクエリサービス、外部ツールから照会できます。

ダッシュボード

ダッシュボードはプロジェクトのFleetデータベースからのデータを視覚化します。ダッシュボードはプロジェクトに属し、複数のアプリとデバイスのデータを1つのビューに統合できます。

アラーム

アラームはプロジェクト内のしきい値ベースのアラートルールです。アラームはFleetデータベースのデータを監視し、条件が満たされたときに通知をトリガーします。

エンティティ関係図

┌──────────┐ │ アカウント │ └──┬───┬───┘ │ │ │ │ 所有 1:N │ ▼ │ ┌─────────────────────┐ │ │ アプリ │ │ └────────┬────────────┘ │ │ 含む 1:N │ ▼ │ ┌─────────────────────┐ │ │ リリース │ │ └─────────────────────┘ │ ▲ │ │ 参照 │ 所有 1:N │ ▼ │ ┌──────────────────────────────────────────────────────────────────┐ │ プロジェクト │ │ │ │ ┌──────────┐ N:N ┌──────────┐ │ │ │ デバイス │◆──────────◆│ グループ │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ ホスト │ メンバーデバイスに │ │ │ エッジコンポーネント │ インストール │ │ │ 1:N │ │ │ │ ▼ │ │ │ ┌──────────────┐ │ │ └──────────────►│ リリース │ (グループを継承 │ │ │ インストール │ または上書き) │ │ └──────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Fleetデータベース │ │ │ │ (TimescaleDB) │ │ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │テーブル│ │テーブル│...│ │ │ │ └─────┘ └─────┘ │ │ │ └───────────────────────┘ │ │ ▲ │ │ │ 照会元 │ │ ┌───────────┴───────────┐ │ │ │ ダッシュボード │ │ │ └───────────────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ アラーム │ │ │ │ (FleetDB監視) │ │ │ └───────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘

関係の概要

関係タイプ説明
アカウント → プロジェクト1:N1つのアカウントが複数のプロジェクトを所有
アカウント → アプリ1:N1つのアカウントが複数のアプリを所有(プロジェクトとは独立)
アプリ → リリース1:Nアプリは複数のバージョン管理されたリリースを含む
プロジェクト → デバイス1:N各デバイスはちょうど1つのプロジェクトに属する
プロジェクト → グループ1:Nグループは1つのプロジェクトに属する
デバイス ↔ グループN:Nデバイスは複数のグループに所属可能、グループは複数のデバイスを含む
プロジェクト → Fleetデータベース1:1各プロジェクトに専用のデータベース
プロジェクト → ダッシュボード1:Nダッシュボードはプロジェクトに属し、Fleetデータベースを照会
プロジェクト → アラーム1:Nアラームはプロジェクトに属し、Fleetデータベースを監視
デバイス → リリースインストール1:Nデバイスは複数のリリースインストールのエッジコンポーネントをホスト
リリースインストール → リリースN:1各インストールは特定のリリースバージョンを参照
Last updated on