语义架构
本页描述IronFlock的数据模型:核心资产及其相互关系。架构概述介绍了系统的物理层(边缘、云、消息代理),而本页重点关注逻辑结构 — 项目、设备、应用和数据之间的关系。
实体概览
账户
├─ 应用
│ └─ 发布
└─ 项目
├─ 设备 ────────────┐
│ └─ 应用边缘组件
├─ 组 ──────────────┘
├─ 发布安装
├─ Fleet数据库
│ └─ 数据表
├─ 仪表盘
└─ 告警核心资产
账户
账户是顶层身份 — 在IronFlock中登录的个人或组织。账户拥有项目和应用。应用和项目都是账户的直接子级,但彼此独立存在。
应用
应用是可部署的软件包。应用属于账户而非项目 — 同一个应用可以安装到多个不同的项目中。应用本身不会运行;它作为目录条目,其发布可以安装到设备上。
发布
发布是应用的不可变版本化构建。只有READY状态的发布才能安装到设备上。发布是不可变的 — 要更改应用的行为,需要发布新版本。
项目
项目是主要的隔离边界。项目内的所有内容 — 设备、组、安装、数据、仪表盘、告警 — 对其他项目不可见。每个项目在消息代理上有自己的WAMP域、专用的Fleet数据库,以及自己的设备、组、安装、仪表盘和告警。
设备
设备是运行IronFlock代理的物理或虚拟Linux机器。每个设备恰好属于一个项目。设备托管已安装发布的边缘组件 — 在硬件上本地运行的容器。一个设备可以同时托管多个发布的边缘组件,并且可以是多个组的成员。
组
组是项目内设备的逻辑集合,用于批量操作。设备可以属于多个组(多对多)。当发布安装到组上时,每个成员设备会收到一个安装,可以继承组的配置或在本地覆盖。
发布安装
发布安装是特定设备上特定发布的运行实例。它是项目内设备和发布之间的连接。通过组安装时,每个设备的安装可以继承或覆盖组的配置,提供舰队级默认值和设备级例外。
组安装
├─ 设备A → 从组继承
├─ 设备B → 从组继承
└─ 设备C → 使用自定义配置覆盖Fleet数据库
每个项目有一个专用的Fleet数据库 — 带有TimescaleDB扩展的PostgreSQL数据库,用于时序数据。设备上的边缘组件通过WAMP发布遥测数据,FleetDB服务将其写入项目数据库,数据可由仪表盘、AI查询服务和外部工具查询。
仪表盘
仪表盘可视化项目Fleet数据库中的数据。仪表盘属于项目,可以将多个应用和设备的数据整合到单一视图中。
告警
告警是项目内基于阈值的警报规则。告警监控Fleet数据库中的数据,在满足条件时触发通知。
实体关系图
┌──────────┐
│ 账户 │
└──┬───┬───┘
│ │
│ │ 拥有 1:N
│ ▼
│ ┌─────────────────────┐
│ │ 应用 │
│ └────────┬────────────┘
│ │ 包含 1:N
│ ▼
│ ┌─────────────────────┐
│ │ 发布 │
│ └─────────────────────┘
│ ▲
│ │ 引用
│ 拥有 1:N │
▼ │
┌──────────────────────────────────────────────────────────────────┐
│ 项目 │
│ │
│ ┌──────────┐ N:N ┌──────────┐ │
│ │ 设备 │◆──────────◆│ 组 │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ 托管 │ 安装到 │
│ │ 边缘组件 │ 成员设备 │
│ │ 1:N │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────►│ 发布安装 │ (继承或 │
│ │ │ 覆盖组配置) │
│ └──────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Fleet数据库 │ │
│ │ (TimescaleDB) │ │
│ │ ┌─────┐ ┌─────┐ │ │
│ │ │ 表 │ │ 表 │ ... │ │
│ │ └─────┘ └─────┘ │ │
│ └───────────────────────┘ │
│ ▲ │
│ │ 被查询 │
│ ┌───────────┴───────────┐ │
│ │ 仪表盘 │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 告警 │ │
│ │ (监控FleetDB) │ │
│ └───────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘关系概要
| 关系 | 类型 | 说明 |
|---|---|---|
| 账户 → 项目 | 1:N | 一个账户拥有多个项目 |
| 账户 → 应用 | 1:N | 一个账户拥有多个应用(独立于项目) |
| 应用 → 发布 | 1:N | 一个应用包含多个版本化发布 |
| 项目 → 设备 | 1:N | 每个设备恰好属于一个项目 |
| 项目 → 组 | 1:N | 组归属于一个项目 |
| 设备 ↔ 组 | N:N | 设备可以属于多个组;组可以包含多个设备 |
| 项目 → Fleet数据库 | 1:1 | 每个项目有自己的专用数据库 |
| 项目 → 仪表盘 | 1:N | 仪表盘属于项目并查询其Fleet数据库 |
| 项目 → 告警 | 1:N | 告警归属于项目并监控其Fleet数据库 |
| 设备 → 发布安装 | 1:N | 设备托管多个发布安装的边缘组件 |
| 发布安装 → 发布 | N:1 | 每个安装引用特定的发布版本 |