3. 资源模型基础概念:资源定义、资源类型、资源实例、资源生命周期

在 IDP 自助门户中,资源模型是连接开发者意图与基础设施能力的核心抽象层。开发者无需关心底层 IaaS/PaaS 的 API 差异,只需通过门户声明“我需要什么”,平台便自动完成资源的创建、配置与交付。理解资源模型的四个基础概念——资源定义、资源类型、资源实例、资源生命周期——是设计可扩展、可治理的自助门户的起点。

3.1 资源定义(Resource Definition)

资源定义是资源模型的元描述,它规定了某类资源在平台中的“长相”和“行为”。可以将其理解为面向开发者的资源契约,包含以下核心要素:

  • 标识与元数据:唯一名称、版本号、显示名称、描述、所属域。
  • 输入参数(Input Schema):开发者创建资源时必须提供的参数,如名称、规格、网络配置等。
  • 输出属性(Output Attributes):资源创建成功后返回给开发者的信息,如连接地址、端口、凭证。
  • 生命周期钩子(Lifecycle Hooks):定义资源在创建、更新、删除等阶段执行的操作。
  • 治理策略(Governance Policies):配额限制、标签规范、成本归属规则。
关键原则:资源定义一旦发布,应遵循“向后兼容”策略。新增字段必须为可选,禁止删除或修改已有必填字段,否则会导致已有资源实例无法解析。

3.2 资源类型(Resource Type)

资源类型是资源定义的分类标签,用于在平台中对资源进行分组、搜索和权限控制。一个资源定义必须归属于一个资源类型。常见的资源类型包括:

资源类型 典型资源定义示例 治理关注点
计算 Kubernetes 集群、虚拟机、Serverless 函数 CPU/内存配额、运行时版本
存储 对象存储桶、文件系统、数据库实例 容量上限、备份策略、数据保留期
网络 负载均衡器、DNS 记录、VPC 网络 域名白名单、端口范围、跨域策略
中间件 消息队列、缓存集群、API 网关 连接数限制、版本兼容性
安全 证书、密钥、访问凭证 轮换周期、加密算法、审计日志

资源类型的设计直接影响门户的导航结构和权限模型。例如,可以为“生产环境数据库”资源类型设置“仅 DBA 可创建”的权限规则。

3.3 资源实例(Resource Instance)

资源实例是资源定义在特定环境中的具体化产物。当开发者在自助门户中填写参数并提交后,平台根据资源定义生成一个唯一的资源实例。每个资源实例包含:

  • 唯一标识(Instance ID):全局唯一的 UUID,用于追踪和关联。
  • 状态(Status):当前所处的生命周期阶段,如 Provisioning、Running、Failed、Deleting。
  • 运行时属性(Runtime Attributes):实际运行时的连接信息、监控指标、健康状态。
  • 归属信息(Ownership):创建者、所属项目、成本中心。
  • 标签(Labels):用于搜索和分类的键值对,如 env=prod、team=payment。
设计建议:资源实例的标签应自动继承自资源定义中的默认标签,并允许开发者追加自定义标签。这有助于后续的成本分摊和资源审计。

3.4 资源生命周期(Resource Lifecycle)

资源生命周期定义了资源实例从创建到销毁的全过程状态流转。一个标准化的生命周期模型是平台自动化运维的基础。下图展示了 IDP 中典型的资源生命周期状态机:

资源生命周期状态机 Pending Provisioning Running Failed Updating Deleting Deleted 说明: • Pending → Provisioning:参数校验通过,开始调度底层资源。 • Running → Updating:触发配置变更或扩缩容操作;更新完成后回到 Running。

生命周期中的关键状态说明:

状态 含义 平台行为
Pending 请求已提交,等待校验和调度 执行参数校验、配额检查、审批流程
Provisioning 正在创建底层基础设施 调用 Terraform/Crossplane 等 IaC 引擎执行资源编排
Running 资源就绪,可供开发者使用 返回连接信息,启动健康检查和监控
Updating 正在执行配置变更 执行原地升级或滚动更新,更新完成后回到 Running
Failed 创建或更新过程中发生错误 记录错误日志,触发告警,提供重试或回滚入口
Deleting 正在销毁资源 执行清理脚本,释放底层资源,移除 DNS 记录等
Deleted 资源已完全销毁 保留审计日志,资源实例进入归档状态

3.5 四者关系总结

下图展示了资源定义、资源类型、资源实例与生命周期之间的整体关系:

资源模型四要素关系图 资源类型 分类标签 / 权限边界 资源定义 契约 / Schema / 策略 资源实例 具体化产物 / 运行时 资源生命周期 状态机 / 流转规则 包含 实例化 驱动 一个资源类型可包含多个资源定义;一个资源定义可实例化出多个资源实例;每个资源实例都遵循资源定义中声明的生命周期规则。
常见设计误区:将资源类型与资源定义混为一谈。例如,将“MySQL 5.7”和“MySQL 8.0”分别定义为两个资源类型,而不是两个资源定义。正确的做法是:资源类型为“数据库”,资源定义为“MySQL 5.7”和“MySQL 8.0”,这样便于统一治理和版本管理。