IoTレイヤー — テクノロジースタック¶
目的¶
IoTレイヤーは、データプレーンサービスの基盤となるテクノロジースタックを定義します。各データプレーンサービスはオープンソースのIoTプラットフォームをラップし、FlexGalaxy APIの規約、マルチテナントアカウントスコーピング、およびアクセス制御を追加します。
これは、アイデンティティプレーンがDotIDを包括サービスとして定義し、KeycloakがOIDCプロバイダーとして基盤を担う構造と同様です。
テクノロジーマップ¶
データプレーンサービス |
IoTテクノロジー |
役割 |
|---|---|---|
デバイスレジストリ、接続性、テレメトリ取り込み、アラート |
||
データ処理、分析パイプライン、ダッシュボード、ウィジェット |
||
OTAアップデート、アーティファクト配信、ポリシー駆動型ロールアウト |
アーキテクチャ概要¶
FlexGalaxy.AI Platform
┌───────────────────────────────────────────────────────────────┐
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ DotID │ │ Policy │ │ Equator / Marie │ │
│ │ (Identity) │ │ Service │ │ (Spatial) │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬──────────┘ │
│ │ │ │ │
│ ┌──────▼─────────────────▼────────────────────▼──────────┐ │
│ │ Provisioning Service │ │
│ │ Device enrollment, credential issuance, tenant routing │ │
│ └──────┬─────────────────┬────────────────────┬──────────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌─────▼──────┐ ┌────────▼─────────┐ │
│ │ ThingsBoard │ │ hawkBit │ │ StreamPipes │ │
│ │ CE │ │ │ │ │ │
│ │ Device mgmt │ │ OTA update │ │ Stream analytics │ │
│ │ Telemetry │ │ Artifact │ │ ML inference │ │
│ │ Rule engine │ │ delivery │ │ IIoT processing │ │
│ └──────┬──────┘ └─────┬──────┘ └────────▲─────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ┌──────▼────────────────┘ │ │
│ │ Kafka Cluster A │ │
│ │ (ThingsBoard MSK) │ │
│ │ Telemetry, device events, commands │ │
│ └────────────────┬───────────────────────────┘ │
│ │ cross-cluster replication │
│ ┌────────────────▼───────────────────────────────────────┐ │
│ │ Kafka Cluster B │ │
│ │ (StreamPipes MSK) │ │
│ │ Analytics pipelines, processed results, sink outputs │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────┘
│ │
MQTT / CoAP DDI (HTTP)
LwM2M / HTTP polling
│ │
┌─────▼─────────────────▼───────┐
│ Edge Device │
│ ├── MQTT client (ThingsBoard) │
│ ├── Hara (polls OTAForge DDI) │
│ └── Local edge planner │
└────────────────────────────────┘
統合トポロジー¶
ThingsBoard CE → DeviceAdmin¶
DeviceAdminはThingsBoard CEをラップし、プラットフォームの統合デバイス管理インターフェースを提供します。ThingsBoardは内部サービスとして稼働し、開発者が直接操作することはありません。
DeviceAdminが公開する機能:
デバイス登録(プロビジョニングサービスに委譲)
アラート監視(ThingsBoard ルールエンジンのアラートを表示)
OTAステータス表示(hawkBitのデプロイ状態を読み取り)
ThingsBoardはEKS上でマイクロサービスモードで動作し、他のプラットフォームサービスと同じKubernetesクラスターを共有します。
Apache StreamPipes → ThingIO¶
ThingIOはApache StreamPipesをラップし、アカウントスコープのデータ処理とダッシュボードの可視化を提供します。アプリケーション(WES、ClearJanitor)はAPIを通じてカスタムダッシュボード、ウィジェット、データパイプラインを登録し、ThingIO React SDK(@flexgalaxy/thingIO-widgets)を使用して埋め込みます。
ThingIOが公開する機能:
ダッシュボード、ウィジェット、パイプライン管理用のREST API
アプリケーションにビジュアライゼーションを埋め込むためのReactコンポーネントライブラリ
データ処理パイプライン(パターン検出、ML推論、集約)
登録済みデバイスのテレメトリからのデータ取得
ThingsBoardとStreamPipesはKafkaを介して接続されます — ThingsBoard ルールエンジンがKafkaクラスターAにパブリッシュし、クロスクラスターレプリケーションによりテレメトリがKafkaクラスターBに配信され、StreamPipesアダプターがそれを消費します。
Eclipse hawkBit → OTAForge¶
OTAForgeはEclipse hawkBitをラップし、CI/CD統合とポリシー駆動型ロールアウト自動化によるOTAアーティファクト管理を提供します。
OTAForgeが公開する機能:
アーティファクト公開(ファームウェア、マップ、設定、MLモデル、証明書)
ディストリビューションセットの構成
ポリシー駆動型ロールアウト自動化(OTAForgeがDeviceAdminにデバイス状態をポーリングし、ポリシーを評価し、ロールアウトを自動作成)
CI/CD統合(Jenkins、GitHub Actions)用のアクセスキー(AK/SK)
プロキシされたDDIエンドポイント — デバイスはhawkBitではなくOTAForgeをポーリング
Webベースのアーティファクト管理用ディストリビューターポータル
イベントバックボーンとしてのKafka¶
Apache Kafkaは、すべてのIoTコンポーネントを接続する中央イベントバスとして機能します。プラットフォームは、ThingsBoardの高スループットテレメトリをStreamPipesの分析ワークロードから分離するために、2つの独立したMSKクラスターを使用します。
Kafkaクラスター A(ThingsBoard)¶
フロー |
トピックパターン |
説明 |
|---|---|---|
ThingsBoard → プラットフォーム |
|
デバイスからの生テレメトリ |
ThingsBoard → プラットフォーム |
|
デバイスライフサイクルイベント(接続、切断、アラーム) |
プラットフォーム → ThingsBoard |
|
デバイスコマンドおよびRPCコール |
Kafkaクラスター B(StreamPipes)¶
フロー |
トピックパターン |
説明 |
|---|---|---|
クラスターAからレプリケーション |
|
分析処理用にレプリケーションされたテレメトリ |
StreamPipes → プラットフォーム |
|
分析結果とアラート |
StreamPipes → Sinks |
|
外部宛先への処理済みデータ |
クラスターを分離する理由¶
懸念事項 |
クラスター分離 |
|---|---|
障害分離 |
ThingsBoardのテレメトリ取り込みはStreamPipesのパイプライン障害の影響を受けない |
スケーリングの独立性 |
テレメトリの量は分析ワークロードとは異なるスケーリングが必要 |
保持ポリシー |
生テレメトリと分析結果では異なる保持期間が必要な場合がある |
セキュリティ境界 |
ThingsBoardクラスターは生のデバイスデータを含み、StreamPipesクラスターは処理済み/エンリッチされたデータを含む |
クロスクラスターレプリケーション(Amazon MSK ReplicatorまたはMirrorMaker 2)により、クラスターAからクラスターBへ選択されたトピックが配信されます。
プロキシされたDDI¶
デバイスはOTAForgeのDDI(Device Domain Interface)エンドポイントをポーリングし、hawkBitのDDIに直接アクセスすることはありません。OTAForgeはテナントコンテキストの検証、レート制限の適用、およびすべてのインタラクションのログ記録を行った後、hawkBitにプロキシします。
Edge Device ──► OTAForge DDI Proxy ──► hawkBit DDI
(Hara) (tenant validation, (deployment actions,
audit logging, artifact downloads)
rate limiting)
クレデンシャルモデル¶
デバイスはプロビジョニング時に発行されたクレデンシャルを保持し、プロビジョニングシナリオにより異なります:
クレデンシャル |
発行者 |
目的 |
プロビジョニングシナリオ |
|---|---|---|---|
MQTTアクセストークン |
ThingsBoard |
テレメトリ取り込みとデバイス管理 |
全シナリオ |
DDIセキュリティトークン |
hawkBit(OTAForgeプロキシ経由) |
OTAアップデートポーリング |
全シナリオ |
M2M OIDCクライアント |
DotID (Keycloak) |
FlexGalaxyビジネスAPIアクセス |
組立および現場のみ |
X.509証明書 |
製造元CA |
登録IDの証明 |
工場および組立(ロボット) |
MQTTクレデンシャルはIoTデータプレーン用、DotIDクレデンシャルはプラットフォームAPIプレーン用です。DDIトークンはOTAアップデートポーリング用です。工場、組立、現場の各シナリオにおけるクレデンシャル発行フローの全体像については、デバイスプロビジョニングパターンを参照してください。
デプロイメント¶
コンポーネント |
テクノロジー |
デプロイメント |
ライセンス |
|---|---|---|---|
ThingsBoard CE |
Java (Spring) |
EKS (Helm) |
Apache 2.0 |
Apache StreamPipes |
Java |
EKS (Helm) |
Apache 2.0 |
Eclipse hawkBit |
Java (Spring Boot) |
EKS (Helm) |
EPL 2.0 |
Kafkaクラスター A |
Apache Kafka |
Amazon MSK(ThingsBoard) |
Apache 2.0 |
Kafkaクラスター B |
Apache Kafka |
Amazon MSK(StreamPipes) |
Apache 2.0 |
PostgreSQL |
— |
Amazon RDS |
PostgreSQL |
Cassandra / TimescaleDB |
— |
Amazon KeyspacesまたはEKS |
Apache 2.0 / Timescale |
すべてのコンポーネントは共有EKSクラスター内の分離されたネームスペースで実行されます。ThingsBoardのマイクロサービスモードには専用のKafkaクラスター(クラスターA)が必要です。StreamPipesはテレメトリトピックのクロスクラスターレプリケーションを備えた別のKafkaクラスター(クラスターB)を使用します。
検討された代替案¶
代替案 |
カテゴリ |
不採用の理由 |
|---|---|---|
Eclipse Ditto |
デジタルツインフレームワーク |
テレメトリストレージなし、ダッシュボードなし、ルールエンジンなし — 代替ではなく補完的 |
Eclipse Kura |
エッジゲートウェイ |
ゲートウェイ専用であり、クラウドプラットフォームではない |
EMQX |
MQTTブローカー |
ブローカーのみ — デバイス管理、ストレージ、ルールエンジンが別途必要 |
Magistrala(旧Mainflux) |
IoTプラットフォーム |
コミュニティが小規模、統合が少ない、本番実績が少ない |
AWS IoT Core |
マネージドIoT |
ベンダーロックイン、セルフホスト不可、APaaS原則に反する |