759 lines
34 KiB
Markdown
759 lines
34 KiB
Markdown
---
|
||
title: AODB 系统架构设计文档
|
||
created: 2026-04-13
|
||
updated: 2026-04-13
|
||
type: system-design
|
||
tags: [aodb, system-design, architecture, ddd, acdm]
|
||
sources: [参考: aodb-core, aodb-vendors, flight-data-exchange, a-cdm]
|
||
---
|
||
|
||
# AODB 系统架构设计文档
|
||
|
||
> **项目代号**: AeroCore AODB
|
||
> **设计依据**: 参考 SITA Operations Manager、Amadeus AODB、ADB SAFEGATE Cortex、AirportLabs SkyCore 等商用系统,结合 IATA A-CDM Toolkit 2025、IATA AIDX v22.1、SSIM 第36版标准
|
||
> **架构风格**: DDD(领域驱动设计)+ 事件驱动 + 微服务架构(可拆分为单体或微服务部署)
|
||
> **目标定位**: 对标商用 AODB(年旅客量 1000万~4000万级别),具备 A-CDM 全链路、SSIM/AIDX 原生支持、多源融合、AI 辅助决策能力
|
||
|
||
---
|
||
|
||
## 一、设计目标与验收标准
|
||
|
||
### 1.1 核心能力目标
|
||
|
||
| 能力维度 | 目标 | 对标商用系统 |
|
||
|---------|------|------------|
|
||
| 航班数据管理 | 全生命周期覆盖(计划→执飞→历史) | Amadeus AODB |
|
||
| A-CDM Milestone | 16项里程碑全自动触发 | SITA Operations Manager |
|
||
| SSIM 解析 | 第36版格式全字段解析 | IATA SSIM 标准 |
|
||
| AIDX XML 引擎 | v22.1 全消息类型支持 | IATA AIDX 标准 |
|
||
| 多源融合 | 最多支持 8 路数据源优先判定 | ADB SAFEGATE Cortex |
|
||
| VTT 预测 | 基于历史数据的 EXOT/EXIT ML 预测 | ADB SAFEGATE VTT |
|
||
| What-if 仿真 | 配置变更方案评估 | ADB SAFEGATE "What-if" |
|
||
| 高可用 | 99.99% 可用性(4个9) | Collins AirDB |
|
||
| 响应延迟 | API P99 < 200ms,事件推送 < 2s | PDC Aviation |
|
||
|
||
### 1.2 非功能目标
|
||
|
||
- **水平扩展**: 无状态服务层,存储层按需扩容,支持航班量 10x 增长
|
||
- **多租户**: 支持单机场 + 多机场集团模式,数据隔离
|
||
- **国产化**: 适配国产芯片(鲲鹏/飞腾)、国产数据库(GaussDB/达梦)、国产操作系统(麒麟/统信)
|
||
- **国际化**: 字符编码 UTF-8,支持 IATA Airport Code(3字母)、ICAO Code(4字母)双码制
|
||
- **合规**: 满足等保2.0三级、民航局 MH/T 5103-2020 标准
|
||
|
||
---
|
||
|
||
## 二、系统架构概览
|
||
|
||
### 2.1 四层架构总览
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────────────┐
|
||
│ 接入层(Access Layer) │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Web Console │ │ Mobile App │ │ 第三方API │ │ 报文网关 │ │
|
||
│ │ (运营控制) │ │ (移动操作) │ │ (REST/GraphQL)│ │ (SSIM/AIDX) │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 网关层(Gateway Layer) │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ API Gateway │ │ 消息网关 │ │ 规则引擎 │ │
|
||
│ │ (认证/限流) │ │ (AIDX/SSIM) │ │ (业务规则) │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 核心服务层(Core Services) │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Flight Domain│ │ Resource │ │ A-CDM │ │ Billing │ │
|
||
│ │ 航班领域服务 │ │ Domain │ │ 协同服务 │ │ Domain │ │
|
||
│ │ │ │ 资源领域服务 │ │ │ │ 计费领域 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ Messaging │ │ AI Engine │ │ Simulation │ │ Reference │ │
|
||
│ │ 消息交换服务 │ │ AI推理引擎 │ │ What-if仿真 │ │ Data │ │
|
||
│ │ │ │ (VTT/预测) │ │ │ │ 参考数据 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 数据层(Data Layer) │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ PostgreSQL │ │ Redis │ │ Kafka │ │ TimescaleDB │ │
|
||
│ │ 主数据存储 │ │ 热缓存/会话 │ │ 事件总线 │ │ 时序数据 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ MinIO/S3 │ │ Elasticsearch│ │ SQLite │ │
|
||
│ │ 文件存储 │ │ 日志检索 │ │ 嵌入式测试 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 技术选型
|
||
|
||
| 层级 | 组件 | 选型理由 | 备选 |
|
||
|------|------|---------|------|
|
||
| 主数据存储 | **PostgreSQL 16+** | ACID 强一致、JSONB 支持 GIS、时序插件、分区表 | GaussDB, 达梦 |
|
||
| 缓存/会话 | **Redis Cluster** | 集群模式、高并发缓存、Redis Streams 事件驱动 | |
|
||
| 消息总线 | **Apache Kafka** | 事件溯源、多消费者、 Exactly-once 语义 | RocketMQ |
|
||
| 时序分析 | **TimescaleDB** | 基于 PG 的时序扩展,航班历史趋势分析 | InfluxDB |
|
||
| 全文检索 | **Elasticsearch** | 日志分析、航班号/乘客名搜索 | |
|
||
| 文件存储 | **MinIO** | S3 兼容、国产化支持 | 华为 OBS |
|
||
| 搜索框 | **Blazor WebAssembly** | 运营控制台,技术栈统一 | React/Vue |
|
||
| 移动端 | **Flutter** | iOS/Android 双端,Low-code 表单 | |
|
||
| API 网关 | **Kong/Apache APISIX** | 开源、可插拔插件、mTLS | |
|
||
| 服务网格 | **Istio**(可选) | 微服务治理、流量管理、mTLS | |
|
||
| 容器平台 | **Kubernetes** | 可移植性、国产化(麒麟/达梦) | |
|
||
|
||
---
|
||
|
||
## 三、DDD 领域划分
|
||
|
||
### 3.1 限界上下文(Bounded Contexts)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ AeroCore AODB │
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │
|
||
│ │ Flight │ │ Resource │ │ Operations │ │ Billing │ │
|
||
│ │ Context │ │ Context │ │ Context │ │ Context │ │
|
||
│ │ │ │ │ │ │ │ │ │
|
||
│ │ - 航班计划 │ │ - 登机口 │ │ - A-CDM │ │ - 账单 │ │
|
||
│ │ - 航班动态 │ │ - 机位 │ │ - Milestone │ │ - 发票 │ │
|
||
│ │ - 机型机号 │ │ - 行李转盘 │ │ - PDS │ │ - 结算 │ │
|
||
│ │ - 旅客数据 │ │ - 设备 │ │ - VTT │ │ │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ └──────────┘ │
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ Messaging │ │ Reference │ │ Integration│ │
|
||
│ │ Context │ │ Context │ │ Context │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ - SSIM解析 │ │ - 机场基础 │ │ - AIDX引擎 │ │
|
||
│ │ - AIDX处理 │ │ - 航司数据 │ │ - 第三方API │ │
|
||
│ │ - 报文路由 │ │ - 机型字典 │ │ - Webhook │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Shared Kernel │ │
|
||
│ │ AirportCode(IATA/ICAO) | Time(UTC) | FlightNumber | Event │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 3.2 各领域核心实体
|
||
|
||
#### Flight Context(航班上下文)
|
||
|
||
```
|
||
Flight(航班聚合根)
|
||
├── FlightId (UUID, 业务ID)
|
||
├── FlightNumber (CA1234, 航司码+数字)
|
||
├── OperationalSuffix (A/B, 同一日重复航班)
|
||
├── AircraftId → Aircraft (实体)
|
||
├── AirlineId → Airline (实体)
|
||
├── OriginAirport (IATACode, 值对象)
|
||
├── DestinationAirport (IATACode, 值对象)
|
||
├── ServiceType (J/C/F/P/M, 值对象)
|
||
├── OperationalStatus (OP/NOP/DV/DX/RT/GRT/SQ, 枚举)
|
||
│
|
||
├── Legs: List<FlightLeg> (去程/回程, 聚合内实体)
|
||
│ └── FlightLeg
|
||
│ ├── LegIdentifier: UFI (唯一航班标识, 值对象)
|
||
│ ├── LegData
|
||
│ │ ├── ScheduledTimes (计划时间, SCT)
|
||
│ │ ├── EstimatedTimes (预计时间, EST)
|
||
│ │ ├── ActualTimes (实际时间, ACT)
|
||
│ │ ├── PaxCount (旅客数)
|
||
│ │ └── AircraftInfo (机型/注册号/尾号)
|
||
│ └── Resources: List<AssignedResource>
|
||
│
|
||
├── Milestones: List<FlightMilestone> (16项里程碑, 值对象集合)
|
||
│ └── FlightMilestone
|
||
│ ├── Code (ELDT/ALDT/EOBT/AOBT/TOBT/TSAT/TTOT/ATOT/CTOT/EXOT/EIBT/EXIT/AIBT/ATIGT/TTIGT/COBT)
|
||
│ ├── Time (时间戳)
|
||
│ ├── Source (来源系统)
|
||
│ ├── Provenance (数据溯源, 枚举: IATA_AIDX/SITA/ATC/_HANDLER)
|
||
│ └── Confirmed (是否已确认)
|
||
│
|
||
└── Domains Events
|
||
├── FlightCreatedEvent
|
||
├── FlightStatusChangedEvent
|
||
├── MilestoneUpdatedEvent
|
||
└── FlightCancelledEvent
|
||
```
|
||
|
||
#### Resource Context(资源上下文)
|
||
|
||
```
|
||
Gate(登机口聚合根)
|
||
├── GateId
|
||
├── IATACode (A1, B12)
|
||
├── TerminalId → Terminal
|
||
├── GateType (Domestic/International/Transfer)
|
||
├── ContactInfo (对讲机频道等)
|
||
└── CurrentAssignment → FlightLeg? (当前绑定航班)
|
||
|
||
Stand(机位聚合根)
|
||
├── StandId
|
||
├── IATACode (B12, 远机位编号)
|
||
├── TerminalId
|
||
├── StandType (Narrow/Wide/Heavy)
|
||
├── MaxAircraftSize (ICAO Wake Turbulence Category)
|
||
└── Equipment (400Hz/Pre-conditioned Air/jetway等)
|
||
|
||
BaggageCarousel(行李转盘)
|
||
├── CarouselId
|
||
├── IATACode (C1, 物理转盘编号)
|
||
├── TerminalId
|
||
├── CarouselType (Arrival/Departure)
|
||
└── CurrentAssignment → FlightLeg?
|
||
```
|
||
|
||
#### Operations Context(运营协同上下文)
|
||
|
||
```
|
||
ACDMCollaborativeSession(A-CDM 协同会话聚合根)
|
||
├── SessionId
|
||
├── AirportCode (IATA, 值对象)
|
||
├── Date (UTC 日期)
|
||
├── CDMPhase (PRE_DEPARTURE/INBOUND/ABNORMAL)
|
||
├── Participants (Set<Participant>, 航司/管制/服务商)
|
||
│
|
||
├── PreDeparturesequencing: List<PDSEntry>
|
||
│ └── PDSEntry
|
||
│ ├── Position (起飞序列位置)
|
||
│ ├── FlightLegId → FlightLeg
|
||
│ ├── CTOT (ATFM 分配)
|
||
│ ├── TSAT (目标启动许可时间)
|
||
│ ├── EXOT (预计滑出时间)
|
||
│ └── ConstraintViolation (违反约束列表)
|
||
│
|
||
├── VTTModel: VTTPredictor (滑行时间预测模型)
|
||
│ ├── HistoricalAverage
|
||
│ ├── TimeOfDayFactor
|
||
│ ├── WeatherFactor
|
||
│ └── TrafficFactor
|
||
│
|
||
└── Domain Events
|
||
├── SequencingUpdatedEvent
|
||
└── TTOTChangedEvent
|
||
```
|
||
|
||
---
|
||
|
||
## 四、核心模块详细设计
|
||
|
||
### 4.1 消息交换引擎(Messaging Engine)
|
||
|
||
#### 模块职责
|
||
|
||
- 接收并解析 SSIM 批次文件,构建航班季节性计划
|
||
- 接收并解析 AIDX XML 实时报文,更新航班动态
|
||
- 多源数据优先判定:同一时间字段出现多源冲突时,执行优先级裁定
|
||
- 事件发布:解析结果发布为领域事件,供下游服务消费
|
||
|
||
#### AIDX 处理流水线
|
||
|
||
```
|
||
AIDX XML Message (HTTP/SMTP/SFTP)
|
||
│
|
||
▼
|
||
┌───────────────────┐
|
||
│ Schema Validation│ ← XSD v22.1 校验 + 自定义规则
|
||
│ (javax.xml.bind) │
|
||
└───────────────────┘
|
||
│
|
||
▼
|
||
┌───────────────────┐
|
||
│ UFI 去重检查 │ ← 同一 UFI 30min 内去重
|
||
│ (Redis Cache) │
|
||
└───────────────────┘
|
||
│
|
||
▼
|
||
┌───────────────────┐
|
||
│ 多源优先判定 │ ← 配置优先表(见下表)
|
||
│ (Priority Engine) │
|
||
└───────────────────┘
|
||
│
|
||
▼
|
||
┌───────────────────┐
|
||
│ Flight Aggregate │ ← 更新聚合根 + 持久化
|
||
│ (JPA + Events) │
|
||
└───────────────────┘
|
||
│
|
||
▼
|
||
┌───────────────────┐
|
||
│ 发布领域事件 │ ← Kafka Topic: flight-events
|
||
│ (Domain Events) │
|
||
└───────────────────┘
|
||
```
|
||
|
||
#### 多源数据优先判定表
|
||
|
||
| 里程碑字段 | 第一优先 | 第二优先 | 第三优先 | 第四优先 |
|
||
|-----------|---------|---------|---------|---------|
|
||
| ALDT(实际落地) | ANSP(管制雷达) | 泊位传感器(Docking) | AODB 推算 | 航司报告 |
|
||
| AOBT(实际推出) | 地面服务商(GHD) | 登机口操作员 | 航司 | AODB |
|
||
| ATOT(实际起飞) | ANSP(塔台) | 跑道传感器 | AODB | 航司 |
|
||
| TOBT(目标推出) | 航司(空班) | 地面服务商 | AODB 计算 | |
|
||
| ELDT(预计落地) | NMOC(欧洲) | ANSP | 航司 FMS | AODB 推算 |
|
||
| EXOT(预计滑出) | AODB VTT 模型 | 历史均值 | 固定值 |
|
||
| EXIT(预计滑入) | AODB VTT 模型 | 历史均值 | 固定值 |
|
||
|
||
#### SSIM 解析器
|
||
|
||
- 支持 SSIM Chapter 6(SCR 报文)/ Chapter 7(SSR 报文)
|
||
- 批次导入模式:文件上传 → 后台任务解析 → 逐条入库 → 批量确认
|
||
- 冲突检测:同一航班号+日期出现多条,以 `Action Code` 判定(N=新增/C=变更/D=删除)
|
||
- 历史归档:SSIM 数据存入 TimescaleDB,供长期趋势分析
|
||
|
||
### 4.2 A-CDM 协同引擎
|
||
|
||
#### Milestone 管理
|
||
|
||
```
|
||
航班生命周期中16项里程碑全部由系统自动触发/接收:
|
||
|
||
ELDT ──[估算]──→ ALDT ──[实际]──┐
|
||
│
|
||
EOBT ──[计划]──→ AOBT ──[实际]──┤──→ TOBT ──[目标]──→ TSAT ──[许可]──→ TTOT ──[目标]──┐
|
||
│ │
|
||
COBT ←──[CTOT计算]── CTOT ──────┘ │
|
||
│
|
||
EIBT ──[预计靠桥]────────────────────────────┐ │
|
||
EXIT │
|
||
AIBT ──[实际靠桥]────────────────────────────┘ │
|
||
ATIGT │
|
||
TTIGT ──[目标靠桥]──────────────────────────────┘
|
||
|
||
触发规则:
|
||
- ACT(实际)类里程碑:收到 AIDX 报文中的 Actual Time → 自动写入
|
||
- EST(预计)类里程碑:AODB VTT 模块持续计算更新(每60秒重算)
|
||
- SCT(计划)类里程碑:来自 SSIM 导入或航班创建时写入
|
||
- TTIGT:基于 EXIT + 标准靠桥时间(按机型/机位计算)
|
||
```
|
||
|
||
#### PDS(Pre-Departure Sequencer)算法
|
||
|
||
```
|
||
输入:
|
||
- CTOT(来自 ATFM/NMOC)
|
||
- 管制离港率(Departure Rate, 架次/小时)
|
||
- TOBT 列表(各航班目标推出时间)
|
||
- 机位-跑道距离(Stand to Runway Matrix)
|
||
- VTT 预测值(EXOT)
|
||
- 约束条件(最小间隔、航司优先级、特殊航班)
|
||
|
||
输出:
|
||
- TSAT(目标启动许可时间)
|
||
- 起飞序列(PDS Entry List)
|
||
- COBT(计算推出时间)
|
||
|
||
算法:改进版 Shortest Processing Time(SPT)+ 约束满足
|
||
1. 按 TTOT 升序排列候选航班
|
||
2. 对每架航班,计算 earliest_start = max(TOBT, CTOT - EXOT - taxi_time)
|
||
3. 插入序列,检查与前机尾随间隔(Wake Turbulence分离)
|
||
4. 若违反约束,触发重排(re-sequencing)
|
||
5. 输出最终 TSAT 和序列位置
|
||
```
|
||
|
||
#### VTT(Variable Taxi-Time)预测
|
||
|
||
```
|
||
模型类型:梯度提升回归(XGBoost),特征包括:
|
||
|
||
特征维度(24维):
|
||
- time_of_day(小时,周期性编码)
|
||
- day_of_week(周一~周日)
|
||
- month(季节性)
|
||
- runway_config(跑道运行模式:独立进/独立出/混合)
|
||
- qty_departures(当前离港队列长度)
|
||
- qty_arrivals(当前进港队列长度)
|
||
- visibility(能见度:CAT I/II/III 或 VFR/IFR)
|
||
- wind_speed / wind_dir(风速/风向)
|
||
- temperature(温度)
|
||
- precipitation(降水:是/否)
|
||
- visibility_meters(能见度,米)
|
||
- historical_avg_EXIT / EXOT(同小时历史均值)
|
||
- airport_load_level(机场负载等级:低/中/高/饱和)
|
||
|
||
预测输出:
|
||
- EXOT(Expected Taxi-Out Time):预计滑出时间
|
||
- EXIT(Expected Taxi-In Time):预计滑入时间
|
||
- EIBT(Expected In-Block Time):预计靠桥时间 = ELDT + EXIT
|
||
|
||
重算策略:
|
||
- 正常情况:每 60 秒批量重算所有活跃航班
|
||
- 事件触发:收到 AOBT/ALDT/天气变化 → 立即重算相关航班
|
||
- 模型更新:每日使用前30天历史数据重训练
|
||
```
|
||
|
||
### 4.3 What-if 仿真模块
|
||
|
||
#### 功能定位
|
||
|
||
对标 ADB SAFEGATE Cortex 的 "What-if" 仿真能力,支持运营场景假设分析。
|
||
|
||
#### 仿真场景
|
||
|
||
| 场景 | 输入 | 模拟输出 |
|
||
|------|------|---------|
|
||
| 跑道关闭 | 关闭跑道号、开始时间、持续时长 | 各航班 CTOT/TSAT 变化、延误传播链 |
|
||
| 大面积延误 | 延误航班数量、延误量级 | 受影响航班列表、恢复时间估算 |
|
||
| 临时增加航班 | 新航班时刻表 | 资源冲突告警(机位/登机口/设备)|
|
||
| 极端天气 | 天气类型、持续时间、能见度 | VTT 重算结果、对离港率影响 |
|
||
| 资源调配 | 临时调整机位分配 | 新 TSAT 序列、旅客连接影响 |
|
||
|
||
#### 技术实现
|
||
|
||
```
|
||
What-if Scenario 创建 → 快照当前状态(Flight/Resource/A-CDM)
|
||
→ 应用假设变更(ScenarioMutation)
|
||
→ 在独立 Simulation Sandbox 中运行 VTT + PDS 算法
|
||
→ 生成对比报告(与基线偏差)
|
||
→ 可选:发布为正式变更(Commit)或丢弃(Discard)
|
||
```
|
||
|
||
### 4.4 AI 决策辅助模块
|
||
|
||
#### 能力矩阵
|
||
|
||
| 能力 | 算法 | 输入 | 输出 |
|
||
|------|------|------|------|
|
||
| VTT 滑行时间预测 | XGBoost | 天气/流量/时间 | EXOT/EXIT 预测值 |
|
||
| 过站时间预测 | LSTM | 历史过站数据/天气/机型 | 预计过站时长 |
|
||
| 延误链传播分析 | 图神经网络 | 航班衔接关系 | 受影响航班列表 |
|
||
| 异常预警 | 孤立森林 | 全量实时数据流 | 异常事件告警 |
|
||
| 资源冲突预测 | 约束求解+RL | 资源分配状态 | 冲突概率/建议调整 |
|
||
|
||
---
|
||
|
||
## 五、API 设计
|
||
|
||
### 5.1 REST API 概览
|
||
|
||
```
|
||
API Version Prefix: /api/v1
|
||
|
||
认证: OAuth 2.0 (JWT Bearer Token)
|
||
内容类型: application/json
|
||
字符编码: UTF-8
|
||
时间格式: ISO 8601 UTC (2026-04-13T14:30:00Z)
|
||
```
|
||
|
||
#### 核心资源
|
||
|
||
| 资源 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| Flight | `/flights` | 航班 CRUD |
|
||
| Flight Leg | `/flights/{flightId}/legs` | 航段管理 |
|
||
| Milestone | `/flights/{flightId}/milestones` | 里程碑管理 |
|
||
| Gate | `/gates` | 登机口管理 |
|
||
| Stand | `/stands` | 机位管理 |
|
||
| Carousel | `/carousels` | 行李转盘 |
|
||
| PDS Sequence | `/pds/sequences` | 起飞排序 |
|
||
| TOBT | `/tobt` | 目标推出时间上报 |
|
||
| SSIM Import | `/imports/ssim` | SSIM 文件上传 |
|
||
| AIDX Webhook | `/webhooks/aidx` | AIDX 消息接收 |
|
||
| Simulation | `/simulations` | What-if 仿真 |
|
||
| Reports | `/reports` | 运营报告 |
|
||
|
||
#### 关键 API 设计示例
|
||
|
||
**TOBT 上报(航司/地面服务商)**
|
||
|
||
```
|
||
POST /api/v1/tobt
|
||
{
|
||
"flightLeg": {
|
||
"airline": "CA",
|
||
"flightNumber": "1234",
|
||
"originDate": "2026-04-13",
|
||
"departureAirport": "PEK"
|
||
},
|
||
"tobt": "2026-04-13T14:30:00Z",
|
||
"reason": "PASSENGER_BOARDING_COMPLETE",
|
||
"submittedBy": "HANDLER_CA_PEK",
|
||
"submittedAt": "2026-04-13T14:00:00Z"
|
||
}
|
||
|
||
响应 200:
|
||
{
|
||
"tobt": "2026-04-13T14:30:00Z",
|
||
"tsat": "2026-04-13T14:35:00Z", // AODB 基于 TSAT=TTOT-EXOT 重算
|
||
"revision": 3,
|
||
"status": "CONFIRMED"
|
||
}
|
||
```
|
||
|
||
**航班动态查询(支持过滤条件)**
|
||
|
||
```
|
||
GET /api/v1/flights?date=2026-04-13&airport=PEK&status=OP,DX,DV&page=0&size=50
|
||
|
||
响应 200:
|
||
{
|
||
"content": [
|
||
{
|
||
"flightId": "f-uuid-001",
|
||
"flightNumber": "CA1234",
|
||
"operationalStatus": "OP",
|
||
"currentLeg": {
|
||
"departureAirport": "PEK",
|
||
"arrivalAirport": "PVG",
|
||
"etd": "2026-04-13T14:30:00Z",
|
||
"eta": "2026-04-13T15:45:00Z",
|
||
"stand": "B12",
|
||
"gate": "A12",
|
||
"carousel": "C5"
|
||
},
|
||
"milestones": {
|
||
"ELDT": { "time": "2026-04-13T15:40:00Z", "confirmed": true },
|
||
"TOBT": { "time": "2026-04-13T14:30:00Z", "confirmed": true },
|
||
"TSAT": { "time": "2026-04-13T14:35:00Z", "confirmed": false }
|
||
}
|
||
}
|
||
],
|
||
"totalElements": 842,
|
||
"page": 0,
|
||
"size": 50
|
||
}
|
||
```
|
||
|
||
### 5.2 事件订阅(Webhook / Kafka)
|
||
|
||
```
|
||
外部系统可通过 Webhook 订阅 AODB 事件:
|
||
|
||
POST /api/v1/webhooks
|
||
{
|
||
"name": "FIDS系统订阅",
|
||
"url": "https://fids.airport.com/webhook/aodb",
|
||
"events": [
|
||
"flight.created",
|
||
"flight.status_changed",
|
||
"flight.milestone_updated",
|
||
"flight.gate_assigned",
|
||
"pds.sequencing_updated"
|
||
],
|
||
"secret": "whsec_xxxxx",
|
||
"active": true
|
||
}
|
||
|
||
签名机制: HMAC-SHA256(RequestBody, secret) → X-Signature 头
|
||
```
|
||
|
||
---
|
||
|
||
## 六、数据模型设计
|
||
|
||
### 6.1 核心实体 ER 图(简化)
|
||
|
||
```
|
||
Airport (1) ──< (N) Terminal (1) ──< (N) Gate
|
||
│
|
||
├──< (N) Stand
|
||
│
|
||
└──< (N) BaggageCarousel
|
||
|
||
Airline (1) ──< (N) Flight
|
||
│
|
||
└──< (N) Aircraft
|
||
|
||
Flight (1) ──< (N) FlightLeg
|
||
│
|
||
├──< (N) FlightMilestone
|
||
├──< (N) AircraftAssignment
|
||
└──< (N) Pax (旅客数据)
|
||
|
||
FlightLeg (N) ──> (1) Gate (可选)
|
||
FlightLeg (N) ──> (1) Stand (可选)
|
||
FlightLeg (N) ──> (1) BaggageCarousel (可选)
|
||
|
||
ACDM_Session (1) ──< (N) PDS_Entry
|
||
│
|
||
└──< VTT_Model (滑行时间预测)
|
||
```
|
||
|
||
### 6.2 关键索引设计
|
||
|
||
```sql
|
||
-- 航班唯一查询(UFI 组合索引)
|
||
CREATE UNIQUE INDEX idx_flight_leg_ufi
|
||
ON flight_legs (airline_code, flight_number, departure_airport, origin_date);
|
||
|
||
-- 航班日计划查询(高频)
|
||
CREATE INDEX idx_flight_leg_date
|
||
ON flight_legs (origin_date, departure_airport, operational_status)
|
||
WHERE origin_date >= CURRENT_DATE;
|
||
|
||
-- 里程碑查询(按航班+时间范围)
|
||
CREATE INDEX idx_milestone_flight_code
|
||
ON flight_milestones (flight_leg_id, milestone_code, event_time);
|
||
|
||
-- 资源当前分配(实时查找)
|
||
CREATE INDEX idx_stand_current
|
||
ON stand_assignments (stand_id, actual_off_blocks)
|
||
WHERE actual_on_blocks IS NULL;
|
||
|
||
-- 时序数据(TimescaleDB hypertable)
|
||
CREATE MATERIALIZED VIEW v_flight_punctuality
|
||
WITH (timescaledb.continuous) AS
|
||
SELECT time_bucket('5 min', event_time) AS ts,
|
||
airport_code,
|
||
count(*) FILTER (WHERE abs(ATOT - TTOT) > 900) AS delayed_count,
|
||
avg(extract(EPOCH FROM (ATOT - TTOT))) FILTER (WHERE ATOT IS NOT NULL) AS avg_delay_seconds
|
||
FROM flight_milestones
|
||
WHERE milestone_code = 'ATOT'
|
||
GROUP BY ts, airport_code;
|
||
```
|
||
|
||
---
|
||
|
||
## 七、安全与运维体系
|
||
|
||
### 7.1 零信任安全架构
|
||
|
||
```
|
||
安全原则:
|
||
1. 最小权限(Least Privilege):每个微服务仅拥有完成其任务所需的最低权限
|
||
2. 默认拒绝(Default Deny):未明确授权的请求一律拒绝
|
||
3. 永不信任(Never Trust):所有跨服务调用均需验证 JWT,即使在内部网络
|
||
4. 始终加密(Always Encrypt):传输加密(mTLS)+ 存储加密(AES-256)
|
||
|
||
认证体系:
|
||
- 用户认证:OAuth 2.0 + OpenID Connect(支持 SAML 2.0 企业 SSO)
|
||
- 机器认证:mTLS(服务间)+ API Key(第三方系统)
|
||
- 多因素认证:TOTP(运营人员)+ 证书(管制系统)
|
||
|
||
权限模型:RBAC + ABAC 混合
|
||
- RBAC:角色(Airport Admin / Airline Ops / Ground Handler / ATC / Viewer)
|
||
- ABAC:属性(机场代码 × 可操作资源范围 × 时间窗口)
|
||
```
|
||
|
||
### 7.2 审计日志
|
||
|
||
```sql
|
||
-- 审计日志表(防篡改)
|
||
CREATE TABLE audit_log (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
event_id UUID NOT NULL DEFAULT gen_random_uuid(),
|
||
timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
actor_id VARCHAR(64) NOT NULL, -- user_id 或 system_id
|
||
actor_type VARCHAR(16) NOT NULL, -- USER / SYSTEM / EXTERNAL
|
||
action VARCHAR(64) NOT NULL, -- flight.update / gate.assign
|
||
resource JSONB NOT NULL, -- 受影响的资源快照
|
||
changes JSONB, -- 变更前后差异(Before/After)
|
||
ip_address INET,
|
||
user_agent TEXT,
|
||
request_id UUID, -- 关联 HTTP 请求
|
||
integrity TEXT GENERATED ALWAYS AS (encode(sha256((event_id||timestamp||actor_id||action||resource)::text::bytea), 'hex')) STORED
|
||
);
|
||
|
||
-- 审计日志不可直接 DELETE/UPDATE(用 DB RULE 拦截)
|
||
CREATE RULE audit_log_no_delete AS ON DELETE TO audit_log DO INSTEAD NOTHING;
|
||
CREATE RULE audit_log_no_update AS ON UPDATE TO audit_log DO INSTEAD NOTHING;
|
||
```
|
||
|
||
### 7.3 高可用架构
|
||
|
||
```
|
||
部署模式:主动-待机双活(Active-Active 或 Active-Standby 可配置)
|
||
|
||
┌──────────────────┐ ┌──────────────────┐
|
||
│ AZ-1(主) │ │ AZ-2(备) │
|
||
│ ┌────────────┐ │ │ ┌────────────┐ │
|
||
│ │ K8s Node 1 │◄┼─────┼─►│ K8s Node 3 │ │
|
||
│ └────────────┘ │ │ └────────────┘ │
|
||
│ ┌────────────┐ │ │ ┌────────────┐ │
|
||
│ │ K8s Node 2 │◄┼─────┼─►│ K8s Node 4 │ │
|
||
│ └────────────┘ │ │ └────────────┘ │
|
||
│ ┌────────────┐ │ │ ┌────────────┐ │
|
||
│ │ PG Primary │ │ ←───│──│ PG Standby │ │
|
||
│ └────────────┘ │ 同步 │ └────────────┘ │
|
||
└──────────────────┘ └──────────────────┘
|
||
│ │
|
||
└─────────┬───────────────┘
|
||
▼
|
||
┌────────────────┐
|
||
│ MinIO S3 │ (跨 AZ 复制)
|
||
└────────────────┘
|
||
|
||
RTO(恢复时间目标): < 30 秒(自动故障转移)
|
||
RPO(恢复点目标): < 1 分钟(同步复制)
|
||
```
|
||
|
||
---
|
||
|
||
## 八、部署与运维
|
||
|
||
### 8.1 Kubernetes 部署结构
|
||
|
||
```
|
||
namespace: aerocore-aodb
|
||
├── ConfigMap: aodb-config(环境配置)
|
||
├── Secret: aodb-secrets(数据库密码/证书)
|
||
├── Ingress: aodb-ingress(域名 + TLS)
|
||
│
|
||
├── Deployment: aodb-api(无状态服务,3+ 副本)
|
||
├── Deployment: aodb-message-engine(AIDX/SSIM 处理,2 副本)
|
||
├── Deployment: aodb-acdm-engine(A-CDM/PDS,2 副本)
|
||
├── Deployment: aodb-vtt-predictor(AI 推理服务,GPU 节点)
|
||
├── Deployment: aodb-simulation(What-if 仿真,按需扩缩)
|
||
├── Deployment: aodb-scheduler(Cron 任务,SSIM 导入等)
|
||
│
|
||
├── StatefulSet: postgresql(主从,1 副本)
|
||
├── StatefulSet: redis(集群模式,3 副本)
|
||
├── StatefulSet: kafka(3 副本)
|
||
└── DaemonSet: log-collector(Fluent Bit → Elasticsearch)
|
||
```
|
||
|
||
### 8.2 国产化适配清单
|
||
|
||
| 组件层 | 商业版 | 国产化替代 |
|
||
|-------|-------|-----------|
|
||
| 操作系统 | RHEL/Ubuntu | 麒麟 Kylin OS、统信 UOS |
|
||
| 数据库 | PostgreSQL | 华为 GaussDB、达梦 DM8 |
|
||
| 缓存 | Redis | 华为云 DCS(Redis 兼容)|
|
||
| 消息队列 | Apache Kafka | 华为云 DMS、Apache RocketMQ |
|
||
| 对象存储 | MinIO/S3 | 华为云 OBS、阿里云 OSS |
|
||
| 容器平台 | Kubernetes | 麒麟容器云、阿里云 ACK |
|
||
| 网关 | Kong | Apache APISIX(国产分支)|
|
||
|
||
---
|
||
|
||
## 九、模块开发优先级
|
||
|
||
### Phase 1(MVP,3个月)
|
||
|
||
| 模块 | 产出 |
|
||
|------|------|
|
||
| Flight Context(核心) | 航班 CRUD、实体、REST API |
|
||
| Messaging Engine(简化版)| AIDX XML 解析 + SSIM 解析 |
|
||
| Reference Data | 机场/航司/机型基础数据 |
|
||
| 基础安全 | JWT 认证、RBAC |
|
||
|
||
### Phase 2(6个月)
|
||
|
||
| 模块 | 产出 |
|
||
|------|------|
|
||
| A-CDM Engine | 16项 Milestone 追踪、PDS 算法 |
|
||
| Resource Context | Gate/Stand/Carousel 分配 |
|
||
| VTT 预测 | XGBoost EXOT/EXIT 预测 |
|
||
| 多租户 | 多机场数据隔离 |
|
||
|
||
### Phase 3(9个月)
|
||
|
||
| 模块 | 产出 |
|
||
|------|------|
|
||
| What-if 仿真 | 场景编辑器 + 沙箱引擎 |
|
||
| AI 决策辅助 | 延误传播图分析、异常预警 |
|
||
| 完整审计日志 | 防篡改审计链 |
|
||
| 高可用部署 | K8s 容器化、双活架构 |
|
||
|
||
---
|
||
|
||
## 十、已知局限与待验证项
|
||
|
||
1. **VTT 模型精度**:需要至少 6 个月历史数据才能达到商用精度(< 5min MAE)
|
||
2. **AIDX 全消息类型**:当前优先实现 `FlightLegNotifRQ/RS`,其他类型(AIDX-PAX、AIDX-BAG)后续迭代
|
||
3. **PDS 算法**:当前为规则驱动,Phase 3 考虑引入 RL 优化序列
|
||
4. **国产数据库兼容性**:GaussDB/达梦的 PG 兼容模式需实测验证
|
||
5. **多机场模式**:共享基础设施的多机场部署方案 Phase 2 再详细设计
|