跳转到内容

工件注册和不可变发布

权威来源:AetherCloud。此页面镜像到统一的 AetherIoT 文档中。

AetherCloud 将 Pack、配置、模型、规则和应用程序修订版发布为不可变的内容寻址事实。发布使修订符合以后所需状态参考的条件;它不会在 AetherEdge 运行时部署、下载或应用任何内容。

  • AetherCloud 对于工件元数据、验证和发布状态、签名者策略以及发布通道引用具有权威性。
  • 内容存储对于 SHA-256 标识的不可变字节具有权威性摘要。
  • AetherEdge 对于本地兼容性检查、缓存状态以及是否接受和应用修订版保持权威。
  • 发布通道是受管理的参考。不是可变内容,也不是部署证据。
  • 签名验证和发布审计是业务需求;采样的 OpenTelemetry 信号无法替代其中任何一个。

域包定义有界 ID、规范的 uint64 十进制修订版和内容长度值、SHA-256 摘要、兼容性要求、签名元数据和此不可变状态机:

draft -> validated -> published -> deprecated -> withdrawn
\---------------------> withdrawn

每次转换都会返回冻结的新修订版,并保留身份、内容摘要、兼容性、依赖项、签名和发布时间戳。发布不能跳过验证。撤回会保留之前的发布证据,而不是删除历史记录。

应用程序包实现了 artifact.revision.publishartifact.revision.get。发布是一个高风险、明确确认、过期、幂等、经过审计的租户/项目命令。它准确地解码外部输入,通过应用程序拥有的端口验证内容和签名,然后才要求仓库以原子方式保存已发布的修订、通道引用、幂等性证据、审计证据和发件箱证据。

内存适配器是一个一致性实现。它证明:

  • 精确重试返回原始修订版,而无需重复的审核/发件箱证据;
  • 重用具有更改的发布身份冲突的幂等密钥;
  • 无法替换修订版身份;
  • 发布通道竞争无法默默地替换其当前修订版;
  • 内容长度/摘要和可信签名检查失败已关闭;
  • 持久性失败不会写入任何修订、通道、审核或发件箱证据;
  • 租户/项目范围的查找不会显示另一个租户的修订。

生产设计将三个部分分开职责:

存储 职责
PostgreSQL 工件/修订元数据、发布状态、通道引用、幂等性记录、授权范围、审计和事务发件箱
对象存储 不可变内容、签名材料、出处、SBOM 和大型验证证据摘要
边缘缓存 AetherEdge 策略下本地验证的内容和应用程序证据

当前实现没有 PostgreSQL 或对象存储适配器。内存适配器的 putContent 和可信签名助手是测试装置,而不是上传、KMS、CA 或生产签名者 API。

内容丢失、摘要/长度不匹配、签名无效、验证器/存储不可用、修订冲突、发布通道冲突和幂等性冲突都是类型化失败。没有一次失败会转化为成功的出版物。未来生产路线的 HTTP 超时可以通过重放相同的幂等性密钥来解决;客户端必须查询而不是发明发布结果。

发布事件当前仅存在于原子内存适配器中。仅当持久事务写入真正的发件箱后,artifact.revision-published.v1 才会成为生产集成事件。

  • 上传/最终确定和不可变的对象存储适配器;
  • PostgreSQL元数据、审计、幂等性、通道和发件箱事务;
  • 生产签名者策略、KMS 集成、出处、SBOM和恶意软件验证;
  • 弃用、撤回和通道移动应用程序命令;
  • HTTP、CloudLink、导出和 MCP 接口;
  • AetherEdge 工件下载和验证对应项;
  • 所需/报告/应用的部署和推出。

请参阅 ADR-0009 了解决策,并参阅 CloudLink 和核心状态机 了解发布与部署的区别。