Files
airport-wiki/systems-design/aodb-system-architecture.md
T
2026-04-15 14:48:14 +08:00

759 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 Code3字母)、ICAO Code4字母)双码制
- **合规**: 满足等保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(运营协同上下文)
```
ACDMCollaborativeSessionA-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 6SCR 报文)/ Chapter 7SSR 报文)
- 批次导入模式:文件上传 → 后台任务解析 → 逐条入库 → 批量确认
- 冲突检测:同一航班号+日期出现多条,以 `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 + 标准靠桥时间(按机型/机位计算)
```
#### PDSPre-Departure Sequencer)算法
```
输入:
- CTOT(来自 ATFM/NMOC
- 管制离港率(Departure Rate, 架次/小时)
- TOBT 列表(各航班目标推出时间)
- 机位-跑道距离(Stand to Runway Matrix
- VTT 预测值(EXOT
- 约束条件(最小间隔、航司优先级、特殊航班)
输出:
- TSAT(目标启动许可时间)
- 起飞序列(PDS Entry List
- COBT(计算推出时间)
算法:改进版 Shortest Processing TimeSPT+ 约束满足
1. 按 TTOT 升序排列候选航班
2. 对每架航班,计算 earliest_start = max(TOBT, CTOT - EXOT - taxi_time)
3. 插入序列,检查与前机尾随间隔(Wake Turbulence分离)
4. 若违反约束,触发重排(re-sequencing
5. 输出最终 TSAT 和序列位置
```
#### VTTVariable 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(机场负载等级:低/中/高/饱和)
预测输出:
- EXOTExpected Taxi-Out Time):预计滑出时间
- EXITExpected Taxi-In Time):预计滑入时间
- EIBTExpected 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-engineAIDX/SSIM 处理,2 副本)
├── Deployment: aodb-acdm-engineA-CDM/PDS2 副本)
├── Deployment: aodb-vtt-predictorAI 推理服务,GPU 节点)
├── Deployment: aodb-simulationWhat-if 仿真,按需扩缩)
├── Deployment: aodb-schedulerCron 任务,SSIM 导入等)
├── StatefulSet: postgresql(主从,1 副本)
├── StatefulSet: redis(集群模式,3 副本)
├── StatefulSet: kafka3 副本)
└── DaemonSet: log-collectorFluent Bit → Elasticsearch
```
### 8.2 国产化适配清单
| 组件层 | 商业版 | 国产化替代 |
|-------|-------|-----------|
| 操作系统 | RHEL/Ubuntu | 麒麟 Kylin OS、统信 UOS |
| 数据库 | PostgreSQL | 华为 GaussDB、达梦 DM8 |
| 缓存 | Redis | 华为云 DCSRedis 兼容)|
| 消息队列 | Apache Kafka | 华为云 DMS、Apache RocketMQ |
| 对象存储 | MinIO/S3 | 华为云 OBS、阿里云 OSS |
| 容器平台 | Kubernetes | 麒麟容器云、阿里云 ACK |
| 网关 | Kong | Apache APISIX(国产分支)|
---
## 九、模块开发优先级
### Phase 1MVP3个月)
| 模块 | 产出 |
|------|------|
| Flight Context(核心) | 航班 CRUD、实体、REST API |
| Messaging Engine(简化版)| AIDX XML 解析 + SSIM 解析 |
| Reference Data | 机场/航司/机型基础数据 |
| 基础安全 | JWT 认证、RBAC |
### Phase 26个月)
| 模块 | 产出 |
|------|------|
| A-CDM Engine | 16项 Milestone 追踪、PDS 算法 |
| Resource Context | Gate/Stand/Carousel 分配 |
| VTT 预测 | XGBoost EXOT/EXIT 预测 |
| 多租户 | 多机场数据隔离 |
### Phase 39个月)
| 模块 | 产出 |
|------|------|
| 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 再详细设计