セマンティックアーキテクチャ
このページでは、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:N | 1つのアカウントが複数のプロジェクトを所有 |
| アカウント → アプリ | 1:N | 1つのアカウントが複数のアプリを所有(プロジェクトとは独立) |
| アプリ → リリース | 1:N | アプリは複数のバージョン管理されたリリースを含む |
| プロジェクト → デバイス | 1:N | 各デバイスはちょうど1つのプロジェクトに属する |
| プロジェクト → グループ | 1:N | グループは1つのプロジェクトに属する |
| デバイス ↔ グループ | N:N | デバイスは複数のグループに所属可能、グループは複数のデバイスを含む |
| プロジェクト → Fleetデータベース | 1:1 | 各プロジェクトに専用のデータベース |
| プロジェクト → ダッシュボード | 1:N | ダッシュボードはプロジェクトに属し、Fleetデータベースを照会 |
| プロジェクト → アラーム | 1:N | アラームはプロジェクトに属し、Fleetデータベースを監視 |
| デバイス → リリースインストール | 1:N | デバイスは複数のリリースインストールのエッジコンポーネントをホスト |
| リリースインストール → リリース | N:1 | 各インストールは特定のリリースバージョンを参照 |