Files
Qiniu/xinfra/architecture.md

13 KiB
Raw Permalink Blame History

tags, create time
tags create time
xinfra
architecture
infra
2026-07-13 16:00

XINFRA 架构文档

概述

本文档描述 XINFRA 平台的总体架构设计、技术选型、分层模型和系统集成关系。

核心概念

组内约定

概念 定义
主系统 XINFRA 平台自身的统管层,负责子系统无法覆盖的能力:统一门户(SSO 跳转入口)、资源大盘、登录审计与运维操作审计、资源指标面板、运维终端
子系统 XINFRA 纳管的专项平台(有独立 WebUI 和 API 服务),各司其职:Wayne(多集群容器管理)、CloudDM / open-cdm(数据库管理与 SQL 审核)、CacheCloud(Redis 缓存管理)、Apollo(配置中心)、Nightingale(统一告警引擎)
工具层 纳管的 CLI / IaC 工具,无常驻 WebUI,由运维人员通过命令行或脚本触发:Ansible Playbook(自动化部署与基础设施即代码)
业务线租户 基于 LDAP 组织信息自动生成的多租户隔离单元,每个业务线拥有独立的命名空间、节点池和资源配额

通用术语

概念 定义
APIKey Wayne 平台对外提供的 API 认证密钥,用于 CI/CD 流水线等自动化场景的身份认证,遵循最小权限原则
RBAC 基于角色的访问控制(Role-Based Access Control),通过角色分配权限,用户与角色关联实现权限隔离
RKE2 Rancher 发行的 Kubernetes 发行版,已通过 CIS Benchmark 安全加固,支持离线 air-gap 安装,默认启用加密和审计
Calico BGP Calico 采用纯路由模式(BGP),无隧道开销,每个集群配置独立 AS 号,构建跨机房扁平大二层网络
Ceph RBD 分布式块存储,供给 K8s PV 给 MySQL、Redis 等有状态服务
Nightingale 夜莺,统一告警聚合引擎,支持接入 Zabbix、VictoriaMetrics 等异构告警源,负责去重、收敛、分级,推送至 qpass
Apollo 携程开源配置中心,支持多机房 Cluster 部署、配置灰度、版本回滚和操作审计
Consul 各机房已有的服务注册发现系统,xinfra 通过 Catalog API 做只读聚合展示
CD 持续部署(Continuous Deployment),自动化服务上线的流水线;CI(持续集成)由团队已有 CI 系统负责
WAF Web 应用防火墙(Web Application Firewall),防护 SQL 注入、XSS、CSRF 等常见 Web 攻击
SLA 服务等级协议(Service Level Agreement),定义服务可用性的承诺指标
IaC 基础设施即代码(Infrastructure as Code),通过 Ansible Playbook 等工具实现基础设施自动化管理
SINA CMDB 公司内部 CMDB 系统,物理机与虚机资产数据的基础来源
open-cdm SQL 审核与变更平台,数据库上线统一审核
qpass 统一告警与值班通知平台
SSO 单点登录(Single Sign-On),主系统通过 LDAP 统一认证后跳转至各子系统

平台分层架构

总体分层

graph TB
    User["用户层<br/>LDAP SSO 统一认证"] --> Main["主系统层<br/>统一门户 + 功能模块"]
    Main --> Sub["子系统层<br/>独立部署,各自授权"]
    Main --> Infra["基础设施层<br/>计算 · 网络 · 存储 · 自动化"]
    Sub --> Infra

    style User fill:#f3e8fd,stroke:#9333ea
    style Main fill:#e0f2fe,stroke:#0284c7
    style Sub fill:#e8f0fe,stroke:#4285f4
    style Infra fill:#ecfdf5,stroke:#059669

主系统功能架构

graph TB
    Portal["统一门户<br/>LDAP SSO 跳转入口"]

    subgraph 全局视图
        DashBoard["资源大盘<br/>集群拓扑 · 节点方格图"]
        MonitorView["资源状态看板<br/>物理机/虚机/服务三层告警"]
    end

    subgraph 运维能力
        TaskCenter["任务中心<br/>Ansible/Wayne 实时日志"]
        OpsTerminal["运维终端<br/>Ansible / SSH<br/>仅管理员"]
    end

    subgraph 治理能力
        AuditDash["审计面板<br/>登录记录 · 运维操作日志"]
        CMDB["资源台账<br/>CMDB 多云同步"]
        SvcDir["服务目录<br/>Consul 只读聚合"]
    end

    Portal --> DashBoard & MonitorView & TaskCenter & AuditDash & CMDB & SvcDir
    SRE["SRE"] --> OpsTerminal

[!tip] 主系统不替代子系统,只自建子系统无法覆盖的能力:全局视图、运维兜底、登录与运维审计、资源台账。


子系统集成关系

graph LR
    Portal["XINFRA 主系统"]

    subgraph 子系统
        Wayne["Wayne<br/>多集群容器管理"]
        CloudDM["open-cdm<br/>SQL 审核"]
        CacheCloud["CacheCloud<br/>Redis 管理"]
        Apollo["Apollo<br/>配置中心"]
    end

    Portal -.->|SSO 跳转| Wayne & CloudDM & CacheCloud & Apollo

    Wayne -->|Client-Go| RKE2["RKE2 集群"]
    CloudDM -->|SQL 审核| MySQL[("MySQL")]
    CacheCloud -->|Agent| Redis[("Redis")]
    Apollo -->|ConfigService| RKE2

[!tip] 子系统各自独立部署和授权,主系统只做 SSO 跳转入口,各子系统自行维护操作审计。


基础设施层

graph TB
    subgraph 计算
        RKE2["RKE2 集群 × 7 机房<br/>CIS 安全加固"]
    end

    subgraph 网络
        Calico["Calico BGP<br/>每集群独立 AS 号<br/>跨机房扁平互通"]
    end

    subgraph 存储
        Ceph["Ceph RBD<br/>MySQL/Redis 有状态服务 PV"]
    end

    subgraph 自动化
        Ansible["Ansible Playbook<br/>节点初始化 · 服务部署<br/>WebSocket 实时日志"]
    end

    RKE2 --> Calico
    RKE2 --> Ceph
    Ansible -->|SSH| RKE2

[!tip] RKE2 是计算底座,Calico BGP 构建跨机房扁平网络,Ceph RBD 提供有状态服务的持久化存储,Ansible 贯穿自动化运维。


监控告警数据流

graph LR
    subgraph 采集源
        RKE2["RKE2 集群"]
        Zabbix["Zabbix<br/>硬件监控"]
    end

    subgraph 指标存储
        VM[("VictoriaMetrics<br/>容器/业务指标")]
    end

    subgraph 可视化
        Grafana["Grafana 仪表盘"]
    end

    subgraph 告警链路
        Nightingale["夜莺<br/>去重 · 收敛 · 分级"]
        QPass["qpass<br/>企业 IM 推送"]
    end

    RKE2 -.->|Metrics| VM
    VM --> Grafana
    VM --> Nightingale
    Zabbix --> Nightingale
    Nightingale --> QPass

[!tip] VictoriaMetrics 承载容器和业务指标,Zabbix 覆盖物理机硬件监控,夜莺作为统一告警聚合层,最终推送至 qpass 通知。


技术选型与架构决策

层级 选型 说明
前端框架 Vue 3 + Element Plus 企业级 UI 方案,与七牛内部技术栈一致
后端框架 Go + Gin 高性能 HTTP 框架,与 Wayne/Open-CDM 生态一致
前后端通信 混合模式 前端 REST/JSON,服务间 gRPC;API 版本管理采用 URL 路径版本 /api/v1/...
主系统数据库 MySQL 8.0 存储任务记录、审计日志、资源台账、用户会话等
缓存 Redis 分布式缓存和会话存储
前端部署 Nginx 托管前端静态文件 + 反向代理后端 API
主系统部署 K8s 内部署 以 Deployment 方式运行在 RKE2 集群内
SSO 协议 SAML 企业统一认证,主系统做 SSO 跳转入口
告警数据源 仅 Nightingale API 主系统不直接对接 Zabbix/VictoriaMetrics,统一通过夜莺获取告警数据
Ansible 调度 AWX 通过 AWX API 提交 Playbook 任务,由 AWX 管理执行和日志
实时推送 原生 WebSocket 任务日志实时推送,基于 gorilla/websocket 库
接口文档 Swagger/OpenAPI 后端生成 Swagger 文档供前端开发
界面语言 纯中文 不需要国际化
测试策略 后端测试为主 单元测试 + 集成测试

基础服务交付流程

sequenceDiagram
    actor User as 业务人员
    participant Portal as XINFRA 服务目录
    participant Ansible as Ansible Playbook
    participant Infra as RKE2 / 主机
    participant Sub as 子系统注册

    User->>Portal: 选择服务卡片(MySQL/Redis/...)<br/>填写业务线、规格、架构模式
    Portal->>Portal: 实时预览 playbook 参数(YAML)
    User->>Portal: 确认部署
    Portal->>Ansible: 提交 playbook 任务
    Ansible->>Infra: 内核初始化 · containerd · 加入集群
    Ansible-->>Portal: 任务状态 → WebSocket 实时日志
    Portal->>Sub: 自动注册(open-cdm / CacheCloud)
    Portal-->>User: 部署完成,跳转任务中心

[!tip] 用户通过服务卡片填参 → 后台 Ansible 自动化部署 → 部署完成后自动注册到对应子系统,全程任务日志可在任务中心实时查看。


多租户隔离模型

graph TB
    LDAP["企业 LDAP"] -->|部门 DN| BL["业务线租户<br/>(Kodo / LAS / 灵矽 / ...)"]

    BL --> NS["Kubernetes Namespace<br/>+ ResourceQuota + LimitRange"]
    BL --> NP["物理节点池<br/>node-label + taint"]

    NS -.->|Pod 只能调度到<br/>本业务线节点| NP

    style LDAP fill:#f3e8fd,stroke:#9333ea
    style BL fill:#e0f2fe,stroke:#0284c7
    style NS fill:#ecfdf5,stroke:#059669
    style NP fill:#fef3c7,stroke:#d97706

[!tip] 双重隔离:节点层通过 business-line=xxx 标签 + Taint 确保 Pod 只调度到本业务线节点;命名空间层通过 ResourceQuota / LimitRange 限制资源用量上限。


系统集成关系

关键集成点:

源 目标 接口方式 说明
企业 LDAP 各子系统 + 主系统 LDAP Bind / SSO 统一身份认证,主系统做 SSO 跳转入口
SINA CMDB 资源台账 REST API 物理机/虚机基础数据来源
阿里云 / AWS / 七牛 LAS 资源台账 OpenAPI 云上虚机增量同步
Consul × 7 DC 服务目录 Catalog API 只读聚合,不改变原有链路
Nightingale 资源状态看板 API 统一告警数据源
Zabbix Nightingale 告警接入 硬件监控告警
VictoriaMetrics Nightingale 告警接入 容器/业务指标告警
GitLab CI Wayne REST API(APIKey 认证) 自动触发部署
GitLab CI Harbor Docker Push 镜像推送
Wayne RKE2 Client-Go(K8s API) 容器编排操作
CloudDM / open-cdm MySQL / PG 等 Sidecar SQL 代理 SQL 审核执行
CacheCloud Redis Agent 实例生命周期管理
Apollo 各业务线 Config Service API 配置下发与灰度发布
Ansible 各主机 SSH 基础设施初始化部署
企业 LDAP 主系统 LDAP Bind 登录事件记录至审计面板
各子系统 + 基础设施 VictoriaMetrics HTTP / Exporter Metrics 采集
VictoriaMetrics Grafana PromQL 监控指标可视化(直接复用)
Nightingale qpass 告警推送 统一告警通知

风险与约束

风险 影响 缓解措施
RKE2 版本升级可能引入不兼容变更 集群稳定性 先在测试环境验证,灰度发布
Wayne 开源版本维护活跃度不确定 功能迭代受限 内部 Fork 并保持核心模块可维护
七机房网络链路故障 跨机房服务中断 网络冗余 + BGP 自动切换 + 告警监控
SQL 审核规则误判 合法 SQL 被拦截 白名单机制 + 规则持续调优
Redis 大 Key / 热 Key 性能劣化 CacheCloud 诊断工具 + 应用侧治理
Apollo 多机房配置一致性 配置下发错误 本地缓存降级 + 灰度发布验证
Consul 跨机房同步延迟 服务发现不一致 30 秒轮询 + 健康状态标注
云平台 API 限流/不可用 资源同步中断 增量同步 + 重试机制 + 状态告警

运维分层模型

故障按层级自愈,跨层操作需主系统管理员权限。

故障层级 处理方 工具链 权限要求
应用发布异常 子系统自愈 Wayne 一键回滚 项目成员
中间件故障 子系统自恢复 CacheCloud / CloudDM 内置运维能力 子系统运维角色
配置变更异常 Apollo 回滚 Apollo 版本回滚 + 灰度发布 配置管理员
基础设施故障 主系统管理员 Ansible Playbook / SSH 终端 仅主系统管理员
机房级故障 主系统管理员 Ansible + 大内网链路切换 仅主系统管理员

[!warning] 安全约束 Ansible / SSH 终端等基础设施级操作仅对主系统管理员角色可见,普通用户菜单中不包含此项。所有跨层操作全程审计留痕。


关联笔记