Skip to content

Redis Key 命名规范

适用范围:CubeMaster、CubeProxy 共享的 Redis 实例;CubeAPI 未来接入时亦须遵循本规范。

1. 概述

CubeSandbox 多个服务(CubeMaster、CubeProxy,以及未来可能接入的 CubeAPI)共用同一 Redis 实例。为避免 key 碰撞、误删、误覆盖,以及便于 SCAN 治理与审计,所有 Redis key 必须遵循统一的命名空间约定。

核心原则

  • 禁止裸实体 ID 直接作为顶层 key。
  • 所有 key 须经各服务统一的 key 构造模块生成,禁止散落字面量拼接。
  • 跨服务共享的数据使用 shared 命名空间,变更须多端协同。

2. 命名格式

cube:{ver}:{scope}:{resource}[:{sub}...]:{id}
说明取值
cube固定产品前缀,杜绝与第三方 key 碰撞常量 cube
verschema 版本;value 结构发生破坏性变更时升版当前 v1
scope归属命名空间(按 key 的归属/共享关系,而非编程语言)见 §3
resource[:sub]业务实体,全小写,冒号分段node:metricinstance:info
id实体 ID(sandboxID、nodeID、taskID 等)禁止省略

示例cube:v1:shared:sandbox:proxy:7c8fbcd45ffe450fb8f7fb223ad45507

3. Scope 枚举

scope含义读写方
masterCubeMaster 私有数据仅 CubeMaster
proxyCubeProxy 私有数据仅 CubeProxy
apiCubeAPI 私有数据(预留)仅 CubeAPI
shared跨服务共享契约多个服务协同读写

shared 下的 key 是跨服务契约:新增、改名或变更数据结构时,所有读写方必须同步变更,不得单方面修改。

4. 强制规则

  1. 集中构造:CubeMaster 使用 CubeMaster/pkg/base/rediskey/rediskey.go;CubeProxy 使用 CubeProxy/lua/redis_keys.lua。新增 key 时先在这两处(或 CubeAPI 对应模块)注册构造函数,再在业务代码中调用。
  2. TTL 显式声明:缓存类 key 必须设置 TTL;生命周期由业务显式 DEL 管理的 key(如沙箱路由)默认不设 TTL,仅在具备续期路径或 TTL 大于实体最大存活时间时才可启用兜底 TTL。
  3. 保留语义段(新增锁、幂等等 key 时沿用):
    • 分布式锁:cube:v1:{scope}:lock:{resource}:{id}
    • 幂等键:cube:v1:{scope}:idemp:{resource}:{id}
  4. 治理友好:同类 key 必须可用 SCAN cube:v1:{scope}:{resource}:* 枚举;禁止把可变 ID 嵌入前缀中间导致无法批量匹配。
  5. 版本演进:仅当 value 的数据结构发生破坏性变化时升 ver;新增 Hash field、扩展字段不升版。
  6. ID 安全id 段不得包含未转义的 :;构造前应对实体 ID 做格式校验,防止 key 注入导致越权读取。

5. 已注册 Key 清单

以下为当前系统中已注册的标准 key(v1)。新增业务 key 须在本节补充登记。

业务含义Key 模式数据结构scope写入方读取方TTL
节点资源指标cube:v1:master:node:metric:{nodeID}HashmasterCubeMasterCubeMaster刷新式(心跳续期,默认 600s)
沙箱代理路由cube:v1:shared:sandbox:proxy:{sandboxID}HashsharedCubeMasterCubeProxy无(生命周期由 DEL 管理)
实例信息cube:v1:master:instance:info:{insID}HashmasterCubeMasterCubeMaster
Describe 任务结果cube:v1:master:task:describe:{taskID}HashmasterCubeMasterCubeMaster / 外部86400s(可配置)
实例 metadata(预留)cube:v1:master:instance:meta:{...}string / listmasterCubeMasterCubeMaster
沙箱 lifecycle 注册表cube:v1:shared:sandbox:lifecycle:metaHashsharedCubeMastercube-proxy-sidecar无(生命周期由 HDEL 管理)
沙箱 lifecycle 事件流cube:v1:shared:sandbox:lifecycle:eventsStreamsharedCubeMastercube-proxy-sidecarMAXLEN ~ 100000
沙箱 lifecycle 状态cube:v1:shared:sandbox:lifecycle:state:{sandboxID}Stringsharedcube-proxy-sidecarcube-proxy-sidecarSET TTL(默认 60s)

5.1 Hash 字段约定

node:metric(节点指标)

field含义
ins_id节点 ID
update_at指标更新时间
quota_cpu_usageCPU 配额用量(milli-cpu)
quota_mem_mb_usage内存配额用量(MB)
mvm_num虚拟机数量
nic_queues网卡队列数
data_disk_usage_per / storage_disk_usage_per / sys_disk_usage_per磁盘使用率(%)

sandbox:proxy(沙箱路由,跨服务契约)

field含义
HostIP宿主机 IP
SandboxIP沙箱内网 IP(可选)
CreatedAt创建时间
{containerPort}容器端口 → 宿主机映射端口(动态 field)

instance:info(实例信息)

CubeMaster/pkg/base/types/redis.goInstanceInfoMapredis tag 定义。

task:describe(异步任务)

field含义
task_id任务 ID
status任务状态
error_code错误码
error_message错误信息

sandbox:lifecycle:meta(沙箱 lifecycle 注册表,跨服务契约)

field含义
{sandboxID}JSON 编码的 SandboxLifecycleMeta(见 CubeMaster/pkg/lifecycle/schema.go

sandbox:lifecycle:state(暂停/恢复协调)

value含义
running沙箱运行中
pausing暂停过渡中
paused沙箱已暂停
resuming恢复过渡中

6. TTL 策略

Key 类型策略说明
node:metric刷新式 TTL每次心跳写入后 EXPIRE(默认 600s);活跃节点持续续期,下线节点自动过期清理
sandbox:proxy无 TTL仅在沙箱创建时写入、无续期路径;生命周期由 CubeMaster 在沙箱销毁时 DEL禁止设置短于沙箱最大存活时间的 TTL
task:describe固定 TTL写入后 EXPIRE,默认 86400s(describe_task_expire_time
instance:info / instance:meta无 TTL随实例生命周期管理;后续可按需补充
sandbox:lifecycle:meta无 TTL沙箱创建时写入,销毁时 HDEL
sandbox:lifecycle:eventsMAXLEN ~每次 XADD 时裁剪(默认 ~100000)
sandbox:lifecycle:stateSET TTL每次写入带 EX(sidecar 默认 60s);回滚或沙箱删除时释放
缓存类(未来新增)必须设 TTL写入时显式声明,并在文档中登记

7. 各服务实现约定

CubeMaster(Go)

CubeProxy(OpenResty / Lua)

CubeAPI(Rust,预留)

CubeAPI 当前不使用 Redis。若未来接入,须遵循:

  • 私有数据:cube:v1:api:{resource}:{id}
    • 会话:cube:v1:api:session:{token}
    • 限流:cube:v1:api:ratelimit:{apikey}
    • 配置缓存:cube:v1:api:setting:{setting_key}
  • 共享数据:复用 cube:v1:shared:*,不得新造无前缀 key
  • 须实现与 CubeMaster / CubeProxy 对等的 key 构造模块

8. 新增 Key 流程

  1. 在本文档 §5 登记 key 模式、数据结构、scope、读写方、TTL。
  2. 在对应服务的 key 构造模块中新增构造函数(Go rediskey / Lua redis_keys)。
  3. 若为 shared scope,同步修改所有读写方并补充集成测试。
  4. 确认 SCAN cube:v1:{scope}:{resource}:* 可正确枚举。

附录:历史 Key 对照表

以下为从不规范命名迁移到本规范时的对照关系,供排查存量数据、日志或运维脚本时参考。新代码只允许使用右侧的标准 key。

业务含义历史 key(已废弃)标准 key数据结构scope
节点资源指标{nodeID}(裸 ID)cube:v1:master:node:metric:{nodeID}Hashmaster
沙箱代理路由bypass_host_proxy:{sandboxID}cube:v1:shared:sandbox:proxy:{sandboxID}Hashshared
实例信息cube_instance_info:{insID}cube:v1:master:instance:info:{insID}Hashmaster
Describe 任务结果describetask:{taskID}cube:v1:master:task:describe:{taskID}Hashmaster
实例 metadatainstance:metadata:{...}cube:v1:master:instance:meta:{...}string / listmaster