正在统计访客…
浏览全部文档
开始 · 9找到适合你的 Runifold 学习路径45 分钟掌握 Runifold理解完整的 Runifold 平台第一次可信运行选择正确的执行 API选择 Crate 与 Cargo Feature构建常见 Runifold 应用Runifold 常见问题排查 Runifold 应用故障
执行内核 · 7理解 RunContext安全协调外部副作用使用预算与取消限制工作安全地处理错误与重试事件、Journal 与执行证据设计 Capability 安全执行从 Checkpoint 安全恢复
模型与服务商 · 7在避免重复输出的前提下路由模型选择并配置模型服务商使用服务商中立的模型协议基于 Provider Runtime 契约构建使用 OpenAI 控制面与 Realtime API测试与 Benchmark Provider Adapter配置 OpenAI、Anthropic、Gemini 与 Ollama
Agent · 7构建并配置 Agent为 Agent 添加类型化工具加入会话与语义记忆安全地委派给子 Agent返回结构化 Rust 值在不丢失语义的前提下流式输出使用检索为 Agent 提供事实依据
持久工作流 · 7组合确定性工作流让工作流持久化运行持久工作流 Worker协调 Timer、Signal 与持久等待运行多租户工作流基础设施运行并行 Branch 与安全 Race对持久 Workflow 进行版本管理
集成 · 7通过 MCP 连接外部能力选择存储与持久化边界通过 MCP Tasks 暴露持久工作构建并评估检索流水线使用 MCP Resources、Prompts 与 Sampling在不跨越权限的前提下缓存 MCP 响应在 Rust Web Service 中部署 Runifold
质量与运维 · 10在没有网络的情况下测试评估质量并阻止回归观测完整运行树在浏览器与边缘环境安全运行准确理解可靠性声明在 CI 中运行可复现评测使用 SLO 运维 Runifold治理 Task 保留与删除把审计证据归档到 S3-Compatible WORM 存储管理兼容性与可信发布
文档/质量与运维
第一次使用?通过 45 分钟核心课程建立完整心智模型
质量与运维

把审计证据归档到 S3-Compatible WORM 存储

使用应用自有预签名、稳定 Object Key、条件写、Checksum、Object Lock 与不确定后的 HEAD 协调。

实践指南·12 min

归档边界

WorkflowTaskTombstoneArchive 接收精确有序 Tombstone Batch,以及从 Tenant 与 Cursor Range 派生的稳定 Idempotency Key。它必须持久化精确 Batch 或 Replay 原始 Receipt。只有 Receipt 返回后,数据库 Export Watermark 才推进。

Archive 是证据交付,不是普通日志;失败会阻止之后的 Purge Authority。

Object 契约

S3-Compatible Adapter 把 Canonical JSON 写入稳定 Object Key,使用条件 If-None-Match: *、SHA-256 Checksum Request 与持久 Checksum Metadata、必须的 Server-side Encryption,以及可选 GOVERNANCE 或 COMPLIANCE Object Lock。

Receipt 只包含 Bucket、Object Key 与 Checksum。需要在 Object Store 验证 Retention 配置; Request Header 不能证明 Bucket Policy 接受了 WORM 语义。

凭证模型

Runifold 使用应用自有 Pre-signing,而不是保存长期 Cloud Credential。Pre-signer 通过短期 URL,只授予一个 Object 和有界 PUT 或 HEAD Operation 的权限。

绝不能持久化或记录 Signing Credential 与 Pre-signed URL。Pre-signer 自身的网络和凭证 I/O 要与 Archive Request Timeout 分开限制。

不确定 PUT 恢复

Response 丢失不能证明 Object 没有提交。Runifold 不会在同一次 Archive Call 中盲目发送第二 次 PUT,而是获得独立 HEAD Authority;只有 Stored Checksum Metadata 与稳定 Payload 精确 匹配时才接受成功。

Timeout、Authorization、Unavailable、Integrity、Ambiguous、Configuration 与 Other Failure 保持区分和低基数。Message 排除 URL、Credential、Payload 与 Tenant Identity。

合规检查

  • 最终确定 Bucket Policy 前启用 Versioning 与需要的 Object Lock;
  • 选择 Encryption 与 KMS Ownership;
  • 限制 URL Lifetime 与 Allowed Header;
  • 测试条件 Replay 与 Response-loss Reconciliation;
  • 在真实 Object Store 验证 Retention 与 Legal Hold;
  • 监控 Export Watermark Lag 与 Archive Failure Kind;
  • 记录 Restore、Audit Access、删除例外与 Key Rotation Policy。

创建 S3 归档

启用 archive-s3 Feature,并在 Workflow Worker 外部构造策略和凭据。下面 使用适合 MinIO 的 path-style 地址;生产环境应按对象存储提供商调整。

use runifold::archive_s3::{
    S3ArchiveEncryption, S3ObjectLock, S3ObjectLockMode, S3SigV4Credentials,
    S3SigV4Presigner, S3SigV4PresignerConfig, S3TombstoneArchive,
    S3TombstoneArchiveConfig,
};
use std::{num::NonZeroU32, sync::Arc, time::Duration};
 
let policy = S3TombstoneArchiveConfig::new("audit-bucket", "runifold", S3ArchiveEncryption::Aes256)?
    .with_request_timeout(Duration::from_secs(30))?
    .with_object_lock(S3ObjectLock {
        mode: S3ObjectLockMode::Compliance,
        retention_days: NonZeroU32::new(365).expect("retention is non-zero"),
    });
let signer = S3SigV4Presigner::new(
    S3SigV4PresignerConfig::new(endpoint, "us-east-1", 300, true)?,
    S3SigV4Credentials::new(access_key, secret_key, session_token)?,
);
let archive = S3TombstoneArchive::new(policy, Arc::new(signer));

上线前必须执行真实 MinIO 或 AWS 的重放测试:PUT 已成功但响应丢失时,系统 应通过 HEAD 与校验和一致性完成对账;任何不一致都必须阻止导出水位推进, 从而阻止清除。