最近做 Agent,越来越需要理解基础设施。服务连不上数据库、容器启动后找不到文件,或者页面刷新后进度消失时,应该从哪一层查起?沿着这些问题继续梳理,就会遇到 VPC、网段、镜像、队列、K8s、Serverless 这些概念。

之前写过一篇 Devops概念梳理,从开发者的视角认识 Docker 和 K8s。这次沿着一个 Agent 任务,把网络、运行环境和执行状态连接起来。目标是能解释服务怎样运行、问题可能发生在哪一层,以及怎样验证自己的设计。

本系列由 AI 辅助整理,技术资料核对于 2026 年 11 月。文中的系统结构、配置片段和容量计算用于说明机制;未将示例部署到真实业务环境,也没有进行生产吞吐量压测。涉及云产品的执行时限、实例类型与计费,应以实际选用产品的官方文档和配置为准。

用一个任务贯穿这组文章

假设用户上传一份 Excel,让 Agent 分析数据并生成报告。

API 校验用户和文件,创建任务;Worker 获取任务,调用模型决定分析步骤;需要运行代码时,交给隔离沙箱;报告保存到对象存储;前端持续接收执行事件。如果分析过程需要用户补充口径,任务就进入人工等待。

flowchart TD
    U["用户与前端"] --> E["域名、HTTPS 与入口"]
    E --> A["API:鉴权、任务入口、事件输出"]
    A --> Q["任务队列"]
    Q --> W["Worker:执行 Agent"]
    A --> D[("数据库:状态、检查点、事件")]
    W --> D
    W --> M["模型 API 与业务工具"]
    W --> S["隔离沙箱:分析代码"]
    S --> F[("对象存储:输入与报告")]

这是一种面向长任务的逻辑拆分。小型服务可以合并部署其中一些组件;选择托管平台时,也可能由平台提供队列、事件或任务状态能力。需要明确的是每一项职责由谁承担。

这里统一使用几个名称:

  • API:接收请求、校验身份、创建任务、提供查询和事件接口。
  • Worker:实际推进 Agent 执行的工作进程。
  • 沙箱:运行分析代码或浏览器操作的受限环境。
  • run_id:标识一次任务执行,用来关联状态、事件、日志和产物。

各种基础设施分别解决什么

VPC 决定资源所在的私有网络,路由决定流量往哪里走,安全规则决定哪些访问被允许。Docker 将程序和运行依赖打包为镜像,K8s 管理容器工作负载,Serverless 则将部分实例与容量管理交给平台。这些能力可以组合使用。VPC 文档、Docker 镜像概念、Kubernetes 概览分别描述了这些职责。

放到这个例子里,可以对应为:

问题 需要理解的知识 应有的判断能力
Worker 为什么连不上数据库 DNS、网段、VPC、路由、安全规则 分清地址、路径和身份权限
程序为什么启动失败或被结束 进程、容器、配置、资源限制 解释启动、退出和文件生命周期
多个实例怎样运行和更新 K8s、Serverless、健康检查 理解平台接管了哪些工作
重启后任务从哪里继续 队列、检查点、幂等、事件记录 分清重启、恢复和重复执行
用户多了以后如何维护 监控、配额、扩容、发布、备份 找到瓶颈,控制故障范围和成本

对 Agent 来说,还要补上一层:执行结果是否真的完成了用户目标。HTTP 请求成功、进程存活和报告正确,是需要分别观察的指标。

系列目录与路由

这组文章沿用博客的 /posts/ 路由,并归入“技术”分类。各篇可以单独阅读,连起来则是一条从网络到运行维护的路径。

篇目 主要内容 路由
导读:从本地运行到线上服务 系统结构、职责边界与学习顺序 /posts/agent-infra-overview/
一:从一次请求理解网络 IP、CIDR、VPC、DNS、入口、出口与连接排查 /posts/agent-infra-network/
二:进程、容器与沙箱 Linux 进程、镜像、文件、退出和隔离 /posts/agent-infra-runtime/
三:K8s 与 Serverless 的运行边界 Pod、Service、资源、探针、冷启动与平台选择 /posts/agent-infra-k8s-serverless/
四:让长任务能够恢复 队列、状态、检查点、幂等、SSE 与人工等待 /posts/agent-infra-durable-execution/
五:监控、扩容与上线维护 可观测性、容量、模型配额、成本、发布与恢复 /posts/agent-infra-production/

怎样边做边学

我倾向于用同一个小项目逐步增加能力。这样遇到一个概念,就能找到它对应的现象。

第一步,把服务之间的连接弄清楚。 本地启动 API、Redis 和数据库,分别尝试服务名、内网地址与错误端口。记录解析失败、连接拒绝、连接超时和认证失败有什么差别。

第二步,把任务从页面连接中独立出来。 API 返回 run_id,Worker 在后台推进任务,状态和关键事件写入持久存储。刷新页面后,仍然能够查询当前进度。

第三步,把同一套程序部署到实际使用的平台。 使用 FC,就检查函数类型、网络、并发与实例生命周期;使用 K8s,就检查 Deployment、Service、探针和资源配置。先走通一条完整部署路径。

第四步,主动制造中断。 重启 Worker,模拟工具超时,让同一条消息重复投递,再让任务等待人工确认后恢复。观察系统有没有丢状态、重复写入或留下未回收的沙箱。

检查点与业务幂等值得放在这里一起学习。持久化执行可以帮助恢复状态,但外部写操作成功、成功结果尚未记录时发生故障,仍可能触发重复尝试。Temporal 的 Activity 文档专门解释了这个失败窗口。

完成这些练习后,再根据实际瓶颈深入自动扩缩容、多可用区、基础设施即代码或更强的沙箱隔离,会更容易知道每项技术在解决什么问题。

从 第一篇:从一次请求理解网络 开始。