--- 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 │ ├── LegIdentifier: UFI (唯一航班标识, 值对象) │ ├── LegData │ │ ├── ScheduledTimes (计划时间, SCT) │ │ ├── EstimatedTimes (预计时间, EST) │ │ ├── ActualTimes (实际时间, ACT) │ │ ├── PaxCount (旅客数) │ │ └── AircraftInfo (机型/注册号/尾号) │ └── Resources: List │ ├── Milestones: List (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, 航司/管制/服务商) │ ├── PreDeparturesequencing: List │ └── 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 再详细设计