# 开源技术栈选型决策 ## 1. 决策目标与原则 本文档用于对 AODB 技术栈做唯一主选决策,避免多方案并列导致实施阶段反复。 决策原则: 1. 满足中型机场场景下的稳定性与可维护性。 2. 优先选择成熟开源生态和团队可落地能力。 3. 对核心路径采用单一主选,备选仅定义触发条件。 4. 支持私有化部署和后续多机场扩展。 ## 2. 技术栈总览(主选) | 分层 | 主选方案 | 说明 | | ------------ | ------------------------------------ | ---------------------------- | | 主数据存储 | PostgreSQL 16 | 关键业务数据强一致事务 | | 时序存储 | TimescaleDB | 里程碑与遥测时序数据 | | 缓存与实时态 | Redis 7 (Valkey) | 高频状态读取与短期流式缓存 | | 搜索分析 | OpenSearch 2.x | 全文检索、日志分析、开源友好 | | 事件总线 | Apache Kafka 3.x | 高吞吐与持久化事件骨干 | | 流处理 | Apache Flink 1.19 | 低延迟有状态流计算与 CEP | | 协议集成 | Apache Camel | AIDX/AFTN/SITA 协议适配 | | API 网关 | Kong Gateway OSS | 鉴权、限流、路由治理 | | GraphQL 层 | Hasura | 实时订阅与快速 API 暴露 | | 规则引擎 | Drools | 复杂规则可配置与可追溯 | | 工作流编排 | Temporal | 长事务与补偿流程编排 | | 认证授权 | Keycloak 24 | OIDC/OAuth2 与 RBAC | | 可观测性 | Prometheus + Grafana + Jaeger + Loki | 指标、追踪、日志统一观测 | | 容器平台 | Kubernetes + Helm | 标准化部署与扩缩容 | | 服务网格 | Linkerd | 轻量 mTLS 与服务治理 | | 对象存储 | MinIO | S3 兼容对象存储 | | 前端与终端 | React + TypeScript + PWA | 看板与移动访问统一前端栈 | ## 3. 关键决策与备选触发条件 | 决策项 | 主选 | 备选 | 触发备选条件 | 说明 | | ------------ | ---------- | ------------- | ---------------------------------------------------- | --------------------------------- | | 搜索引擎 | OpenSearch | Elasticsearch | 必须依赖特定商业插件时 | 优先开源许可证与成本可控 | | GraphQL 引擎 | Hasura | PostGraphile | 已有团队深度 PostgreSQL 函数驱动实践且无需订阅增强时 | Hasura 对实时订阅和权限模型更直接 | | 工作流引擎 | Temporal | Airflow | 主要需求转为离线批任务编排时 | AODB 更偏在线长事务与补偿 | | 服务网格 | Linkerd | Istio | 多集群高级流量治理和复杂策略显著增加时 | 中型机场先以轻量可运维为优先 | | 移动端策略 | PWA | React Native | 必须深度离线和原生硬件能力时 | PWA 可降低交付复杂度和维护成本 | ## 4. 分层选型理由(精要) ### 4.1 数据层 - PostgreSQL + TimescaleDB 统一 SQL 体验,降低多数据库运维复杂度。 - Redis 负责热点读和实时态缓存,减轻主库读取压力。 - OpenSearch 负责检索和日志分析,不承载强一致事务。 ### 4.2 消息与计算层 - Kafka 作为唯一事件骨干,保障事件可回放与可追溯。 - Flink 承担里程碑计算、异常检测和实时指标聚合。 - Temporal 承担长流程编排(例如异常补偿和人工复核闭环)。 ### 4.3 集成与接口层 - Camel 统一协议适配,减少自研连接器维护成本。 - Kong 提供统一北向入口及治理能力。 - Hasura 提供面向运营终端的订阅能力,降低 API 开发负担。 ### 4.4 安全与基础设施层 - Keycloak 提供统一身份与授权管理。 - Linkerd 提供轻量服务间 mTLS 与可观测能力。 - Kubernetes + Helm 提供标准化部署与环境一致性。 ## 5. 风险与缓解 | 风险 | 影响 | 缓解措施 | | ------------------------ | ------------------ | -------------------------------------------- | | Kafka/Flink 运维门槛高 | 实施初期效率下降 | 提供标准化模板、最小可运行拓扑和 SRE Runbook | | 多协议接入数据质量不稳定 | 里程碑计算误差 | 建立标准化校验、死信队列和人工复核流程 | | 规则引擎规则膨胀 | 告警误报或漏报 | 规则分层管理、灰度发布和回放测试 | | 文档与实现偏离 | 评审通过后落地失真 | 将关键决策同步为 ADR 并纳入变更流程 | ## 6. 版本与升级策略 - 技术栈版本采用“年度主版本评审 + 季度补丁更新”策略。 - 升级优先级:安全补丁 > 稳定性修复 > 新功能。 - 升级前必须完成回归测试、性能基线对比和回滚演练。 ## 7. 与架构文档的边界 - 本文档回答“选什么、为什么选、何时切备选”。 - 具体数据模型、事件契约、流程编排细节在 `开源机场运营数据库(AODB)高层设计文档.md` 中定义。