Skip to content

数据层参考

控制面全部持久数据的单一事实源。

权威定义在代码中:PostgreSQL schema 为 apps/control-server/app/db/models/ 下的 SQLAlchemy ORM(迁移见 migrations/versions/),KV 与缓存的键由各 service 模块声明。本册逐字对照源码,代码中不存在的内容不予收录。

auth-server 与 registry-server 各持有独立的 PostgreSQL 库(dn42_auth / dn42_registry),schema 见各自的内部文档:认证服务 · registry 副本服务


三段结构

本册分三段,对应三种阅读目的:

目的适用场景
model/理解建模决策首次接触,或需要新增一类数据
tables/查表与键的定义日常检索
mechanics/理解运转与演进修改写入路径、排查性能、上线 schema 变更

一、model — 建模决策

文档内容
分层与存储角色五层数据模型、三个存储实例的角色与判据、db 编号分配、新数据的准入决策、备份边界
聚合根与关系三个聚合根、全部外键关系树、ER 图
时序建模通则桶口径、sum + count 形态、差分基准、保留期与裁剪、分区门控
全局约定命名约定、引擎与连接池、类型纪律、spec JSON + 索引列双层结构

二、tables — 表定义

按子系统分册,每册自足。一个子系统的数据通常跨层,单册即可看到它的全部落点(哪些表在 PostgreSQL、哪些键在 KV、保留期多长),无需跨文件拼接。层作为每张表的属性标注,不作为目录轴。

文档子系统表数
节点与网络节点身份、密钥、端口池、接入凭据、世代、Peering 聚合10
共享 DNSDNS 三级模型与组装规则3
账号、门户与自动对等两个信任域、审计、自动对等策略与请求8
健康与自观测对账健康、上报历史、agent 自观测存档4
路由观测路由全表、逐路由明细、差分基准、churn 时间线4
流量节点级与接口级流量:热窗口、5 min 存档、差分基准4
Flap 检测两级打分热态、转移历史、告警事件、速率与活跃度存档8

三、mechanics — 运转与演进

文档内容
写入路径materialize 与上报摄入两条路径、差分写、预提取、写入方一览
KV 与缓存键索引Valkey 与 Redis 中的每一个键:TTL、写入方、丢失后果、降级行为
性能与容量实测规模与增长维度、写热点、索引行为、死元组、扩展阈值
迁移与演进create_all 与 Alembic、生产实况、已知偏差、分区化、迁移链

全表速查

控制库共 41 张 ORM 表。规模一列取自参考基线,口径为活行数 / pg_total_relation_size。层的含义见分层与存储角色

保留规模
nodesL1常驻10 行 / 184 kBfleet
node_wireguard_keysL1常驻10 行 / 24 kBfleet
port_poolsL1常驻2 行 / 24 kBfleet
agent_tokensL1常驻13 行 / 56 kBfleet
enrollment_tokensL1常驻0 行 / 24 kBfleet
pending_registrationsL1常驻0 行 / 40 kBfleet
generationsL1每节点 100 代752 行 / 4096 kBfleet
peeringsL1常驻45 行 / 120 kBfleet
wg_interfacesL1常驻90 行 / 208 kBfleet
bgp_sessionsL1常驻46 行 / 152 kBfleet
dns_groupsL1常驻1 行 / 48 kBdns
dns_group_zonesL1常驻4 行 / 64 kBdns
dns_recordsL1常驻54 行 / 48 kBdns
admin_usersL1常驻1 行 / 40 kBaccess
admin_sessionsL1到期失效50 行 / 56 kBaccess
admin_audit_logL1无上限883 行 / 272 kBaccess
portal_login_transactionsL1(降级路径)30 min94 行 / 80 kBaccess
portal_sessionsL1会话 TTL54 行 / 320 kBaccess
autopeering_node_policiesL1常驻10 行 / 32 kBaccess
peering_requestsL1常驻30 行 / 128 kBaccess
autopeer_route_rollupL360 天54 418 行 / 9768 kBaccess
node_statusL2覆盖10 行 / 336 kBhealth
node_status_eventsL2每 (节点,种类) 100 条3 740 行 / 6768 kBhealth
node_metrics_rollupL360 天110 196 行 / 15 MBhealth
node_metrics_lastL2覆盖10 行 / 56 kBhealth
node_routingL2覆盖10 行 / 344 kBrouting
node_route_entriesL2跟随最新快照178 303 行 / 144 MBrouting
node_route_prefix_hashesL2覆盖10 行 / 1288 kBrouting
node_routing_eventsL2每节点 17 280 条37 265 行 / 7488 kBrouting
node_traffic_rollupL360 天119 306 行 / 15 MBtraffic
node_traffic_last_sampleL2覆盖10 行 / 56 kBtraffic
node_iface_traffic_rollupL360 天777 120 行 / 127 MBtraffic
node_iface_traffic_lastL2覆盖87 行 / 64 kBtraffic
flap_alerts事实已消警留 500 条539 行 / 408 kBflap
bgp_flap_transitions事实每节点 200 条1 649 行 / 472 kBflap
node_prefix_flap_metaL2覆盖10 行 / 56 kBflap
prefix_flap_rate_rollupL360 天462 604 行 / 61 MBflap
flap_activity_rollupL360 天49 590 行 / 4112 kBflap
bgp_flap_state降级路径覆盖136 行 / 104 kBflap
node_prefix_flaps降级路径整表替换1 802 行 / 528 kBflap
node_prefix_flap_paths降级路径整表替换1 547 行 / 984 kBflap

KV 与 Redis 中的键不在此表,逐键定义见 KV 与缓存键索引

生产库中的三张残留表

peering_challengespeering_sessions(挑战验证流迁至 auth-server 后废弃)与 registry_* 系列(副本拆为独立服务后废弃)已从 ORM 与迁移链移除,但现役生产库中仍保留着空表:该库由 create_all 建立,迁移中的 DROP TABLE 从未在生产执行。空表不占用资源、不参与读写,清理属于可选动作。原委见迁移与演进