12 KiB
Earth Compute Center BGP-Style Plan
Goal
这份文档定义如何按照 BGP 模块的产品方式,把“算力中心”提升为 Earth 上的一级能力。
这里的“按 BGP 方式”指的是:
- 有独立的数据语义和接口入口
- 有独立的 Earth 图层与图例
- 有独立的 hover / click / 选中态 / 详情卡
- 有独立的统计口径与后续专题页扩展空间
这里的“按 BGP 方式”不指:
- 机械复制 BGP 的 anomaly / incident / collector 三层事件模型
- 为静态算力设施强行引入不必要的复杂告警语义
算力中心本质上更接近“长期基础设施分布层”,不是“高频动态异常层”。 因此应该复用 BGP 的模块化方法,而不是照搬 BGP 的事件结构。
Why
当前仓库里已经有算力相关基础:
- 后端已有
top500和epoch_ai_gpu数据采集 - 可视化接口已有
/api/v1/visualization/geo/supercomputers和/api/v1/visualization/geo/gpu-clusters - Earth 信息卡已对
supercomputer和gpu_cluster做了基础类型兼容
但当前能力还停留在“数据可取到”的阶段,没有形成像 BGP 那样完整的可视化模块:
- Earth 缺少独立的算力图层加载模块
- 缺少算力 marker 体系和视觉层级
- 缺少算力图例、统计、开关和搜索接入
- 缺少与海缆、BGP、卫星的关系表达
- 缺少算力专题页和后续告警/研判扩展入口
所以当前真正的缺口不是“有没有数据”,而是“有没有产品级模块”。
Core Principle
算力中心应当采用和 BGP 一致的模块化分层:
- 数据层:稳定的数据契约和 GeoJSON 输出
- 渲染层:独立的 Earth 图层、marker 和视觉状态管理
- 交互层:hover、click、锁定态、详情卡、图例和统计
- 扩展层:后续专题页、关系分析、告警和 AI 研判
但语义上必须保持算力中心自身的特点:
site / center是主对象,不是事件capacity / rank / vendor / operator / status是主信息,不是异常严重度distribution / concentration / dependency是后续分析方向,不是第一阶段必须项
Recommended Scope
第一版“算力中心”建议统一承载两类对象:
supercomputergpu_cluster
并在 Earth 上收口为一个主题层:compute_centers
这样做有几个好处:
- 用户看到的是统一的“算力基础设施”语义,而不是零散数据源
- 后端仍可保留
top500和epoch_ai_gpu的来源差异 - 前端可以在一个图层里再细分两种 marker 语言
Current Gap
和 BGP 对比,当前差距主要在下面几层。
1. Data Contract Gap
现在的算力 GeoJSON 还是通用 collected_data 输出思路,字段较轻:
gpu_cluster只有基础名称和地点supercomputer只暴露一部分性能字段- 缺少统一的
site_type / operator / capacity_band / source / updated_at / confidence - 缺少统一的算力层聚合出口
2. Earth Rendering Gap
当前 Earth 里没有类似 bgp.js 的算力模块:
constants.js没有算力 API 路径和视觉配置main.js没有算力加载、拾取、状态同步和 HUD 更新controls.js没有算力图层开关和启动加载优先级layer-startup-tasks.js没有算力启动任务legend.js/ui.js没有算力统计与图例模式
3. Interaction Gap
虽然 info-card.js 支持基础字段,但还没有形成 BGP 那种完整交互链路:
- 没有 hover / selected / dimmed 的视觉状态
- 没有算力对象专属 tooltip 与摘要文案
- 没有锁定后与其他基础设施的联动高亮
- 没有搜索、统计卡和详情组织方式
4. Product Expansion Gap
当前还没有“算力中心”专题页与分析语义:
- 没有全球分布/国家聚合/厂商聚合视图
- 没有算力与海缆/BGP/区域的关系表达
- 没有 AI brief / assessment 的后续落点
Architecture Direction
推荐把算力中心做成“BGP 同级能力”,但采用更适合静态基础设施的结构。
Backend
建议新增统一聚合接口,例如:
/api/v1/visualization/geo/compute-centers
它的职责是把:
top500epoch_ai_gpu
统一转换成一个主题层输出,同时保留对象细分类型:
site_type: supercomputer | gpu_cluster
建议统一字段至少包括:
idnamesite_typecountrycitylatitudelongitudeoperatorvendorcapacity_valuecapacity_unitcapacity_bandranksourceupdated_atlocation_precisiongeography_modeis_estimatedestimated_reasonmetadata
这里建议优先做“统一聚合出口”,而不是一开始就新增独立数据库表。
原因:
- 当前源数据更新频率低,先复用
collected_data成本更低 - 可以先把 Earth 产品体验做完整
- 如果后续要做历史趋势、关系推断、告警,再评估是否拆成独立模型
Frontend Earth
建议新增独立模块,例如:
frontend/public/earth/js/compute-centers.js
职责参照 bgp.js:
- 拉取算力中心 GeoJSON
- 创建 marker
- 管理 hover / selected / dimmed 状态
- 输出图例项
- 输出统计摘要
- 提供 overlay 和详情格式化辅助函数
推荐视觉分层:
supercomputer用更稳定、更规整的设施型符号gpu_cluster用更活跃、更现代的密度型符号- 选中态通过 halo / ring / related infrastructure highlight 表达
视觉上应避免把算力中心做成“BGP 事件点”那种高频脉冲风格。 它应该更像长期存在的高价值设施。
Phases
Phase 1: Unified Earth Layer
目标:
- 先把算力中心做成 Earth 上可用、可点、可解释的一级图层
工作项:
- 新增统一算力 GeoJSON 接口
- 新增
compute-centers.js - 在
constants.js增加 API 路径和视觉配置 - 在
controls.js增加算力图层开关与启动元数据 - 在
layer-startup-tasks.js增加算力启动加载任务 - 在
main.js接入算力拾取、hover、click、锁定态和 HUD 统计 - 在
ui.js/legend.js/index.html增加算力统计与图例入口 - 在
info-card.js提升算力详情字段组织 - 对无法精确定位、但可按国家或弱线索推测的大概位置,仍然生成地图点位
- 这类对象必须带显式“估算位置”状态,例如图标问号角标与详情说明
完成标准:
- Earth 上能独立显示/隐藏算力中心
- 两类对象有可区分的视觉表达
- hover / click / 详情卡 / 图例 / 统计全部打通
- 精确位置与估算位置在图标或文案上可区分,不会误导为同一精度
- 不干扰现有海缆、卫星、BGP 的交互链路
Phase 2: Relationship Layer
目标:
- 让算力中心不只是“点”,而是和其他基础设施产生上下文关系
工作项:
- 建立算力中心与国家/区域聚合摘要
- 增加与附近海缆登陆点的关系提示
- 增加与 BGP 事件/观测范围的空间邻近提示
- 增加与卫星覆盖或区域连通性的实验性提示
完成标准:
- 点击算力中心时,用户能看到“它和哪些基础设施相关”
- 信息表达以辅助判断为主,不做夸张推断
Phase 3: Compute Center Observatory
目标:
- 把算力中心从 Earth 图层扩展成独立专题观测能力
工作项:
- 新增算力中心专题页
- 提供国家/厂商/类型/容量分布统计
- 支持列表、筛选、详情和历史快照
- 预留 AI brief / assessment 入口
完成标准:
- 算力中心不再只是 Earth 上的视觉点位
- 能作为独立业务上下文进入日常观察与研判
Phase 4: Alerts And Assessment
目标:
- 在不滥造“假动态告警”的前提下,引入真正有价值的变化感知
候选方向:
- 新增大规模算力中心
- 既有中心容量显著变化
- 国家/区域集中度显著变化
- 高价值中心与关键网络基础设施关系变化
完成标准:
- 告警来自可解释的结构变化
- 不把静态数据硬做成噪声式实时事件流
Implementation Notes
建议按下面顺序推进:
- 先统一 GeoJSON 契约
- 再做 Earth 独立模块和图层开关
- 再补详情卡、图例和统计
- 最后才做关系层和专题页
这样可以避免一开始把范围摊得过大。
Unknown Location Strategy
由于部分算力数据源不会直接提供经纬度,未知位置补全不能只依赖“继续找 API 字段”。 更稳妥的方式是做成一条分层富化链路,而不是单一猜测规则。
推荐按下面优先级推进:
- 直接源信息
- 源记录显式给出
latitude / longitude - 源记录给出
city / region / facility / campus / operator - 源页面详情、内嵌 JSON、结构化元数据、新闻稿链接里能抽出地点线索
- 名称与机构归一化
- 建立
canonical_name / aliases / operator / facility归一化表 - 把
cluster name、operator、campus name归一到同一个实体 - 优先解决同一对象多写法导致的命中失败,而不是先扩大猜测范围
- 本地位置注册表
- 用仓库内可维护的 registry 保存高价值对象的位置知识
- 每条记录至少包含:
canonical_name、aliases、operator、country、region、city、lat、lon、confidence、source_note - 转换层优先读取 registry,避免地点知识长期散落在转换代码里
- 分层回退定位
preciseestimated_siteestimated_cityestimated_regionestimated_national_hubestimated_country
这里建议把“国家内主要算力城市”作为国家质心之前的一层。 例如没有美国精确位置时,优先考虑已知的主要算力/数据中心城市候选,而不是直接落在几何质心。
- 候选证据富化
- 如果源 API 无地点信息,可以允许采集链路读取公开辅助证据
- 例如机构官网、数据中心介绍页、新闻稿、百科型页面、公开 PDF
- 但只提取“地点线索”,不把外部页面上的经纬度当真值直接写回
- 人工校验闭环
- 对高价值且仍然未知的对象输出待核验清单
- 把人工确认结果回写到位置注册表
- 后续采集继续优先复用这层人工确认结果
Additional Solution Paths
除了静态映射表,还可以考虑下面这些办法:
- 基于国家和运营方建立“主要园区候选集”,用稳定散列把同国未知节点分散到若干可信城市,而不是全部压到一个点
- 基于数据中心/云厂商公开 region 列表建立
operator -> city set候选映射,用于云 GPU 集群类对象 - 把“估算依据”结构化,例如
matched_alias、matched_operator、matched_city_text、fallback_country_hub - 给位置补全增加
last_verified_at,便于后续按时间重新校验老旧映射 - 单独维护“不可可靠定位”状态;这类对象仍可在国家级聚合统计中出现,但可以允许用户在地图上过滤掉
- 后续如果你们愿意投入更多,可把这条链路做成小型 enrichment pipeline,而不是仅在 API 转换时临时判断
Non-Goals
第一阶段不建议做这些内容:
- 不复制 BGP 巡航模式到算力中心
- 不先做复杂实时 websocket 推送
- 不先引入独立
compute_center_incident一类模型 - 不先做全量 AI 分析面板
原因是算力中心的第一需求是“被看清楚”,不是“被实时播报”。 但“被看清楚”不等于“只显示精确坐标对象”。 对于没有精确经纬度、但能推测到国家或区域级位置的算力中心,应优先以上图并标注估算状态的方式处理,而不是直接在地图上消失。
Acceptance Checklist
- 后端存在统一的算力中心 GeoJSON 出口
- Earth 有独立算力图层模块,而不是散落在
main.js - 页面上有清晰的算力开关、图例和统计
supercomputer和gpu_cluster在视觉和详情上都可区分- 估算位置对象在地图和详情中都有明确状态提示
- 现有 BGP / 海缆 / 卫星功能无回归
- 代码结构上为后续专题页和关系分析留出了明确扩展点
Summary
这项工作的本质不是“再多画几个点”。
它应该把算力中心从已有数据源,升级成与 BGP 同级的 Earth 观测主题:
- 有独立语义
- 有独立图层
- 有独立交互
- 有后续分析扩展能力
推荐先完成 Phase 1,把算力中心做成真正可用的 Earth 一级模块,再继续推进关系层和专题页。