34 KiB
34 KiB
title, created, updated, type, tags, sources
| title | created | updated | type | tags | sources | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AODB 系统架构设计文档 | 2026-04-13 | 2026-04-13 | system-design |
|
|
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 关键索引设计
-- 航班唯一查询(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 审计日志
-- 审计日志表(防篡改)
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 容器化、双活架构 |
十、已知局限与待验证项
- VTT 模型精度:需要至少 6 个月历史数据才能达到商用精度(< 5min MAE)
- AIDX 全消息类型:当前优先实现
FlightLegNotifRQ/RS,其他类型(AIDX-PAX、AIDX-BAG)后续迭代 - PDS 算法:当前为规则驱动,Phase 3 考虑引入 RL 优化序列
- 国产数据库兼容性:GaussDB/达梦的 PG 兼容模式需实测验证
- 多机场模式:共享基础设施的多机场部署方案 Phase 2 再详细设计