学习路径 04课程 5 / 10

为云原生环境设计软件

贯通可重复的基础设施、可替换的进程、持久化状态和可观察行为。评估云原生设计,不止看容器打包。

实践12 分钟已审查

发布者 我们如何编写内容

检验理解平台在故障后替换报表任务处理进程。什么能让重试安全?完成练习
平台在故障后替换报表任务处理进程。什么能让重试安全?

你将学到什么

  • 区分容器打包与云原生行为。
  • 识别生成服务中的状态、重试和进程替换风险。
  • 定义人员和智能体都能验证的平台约定。

定义所需行为

云原生实践支持在公有、私有或混合环境中开展可重复的开发和运维。CNCF 强调系统应在变化中保持可管理、可观察和有韧性。容器和编排可以支持这种方式,但单靠它们不能证明具备所有特性。

从一个虚构报表服务开始。AI 工具创建了端点、任务处理进程(worker)和容器镜像。演示生成了正确的 PDF。进入生产前,团队必须回答另一个问题:任务执行期间,平台替换任务处理进程时会怎样?

这既是基础设施问题,也是应用设计问题。重启可能恢复进程,却丢失未完成工作。

将进程与持久化状态分开

原型将排队任务和已完成报表保存在容器磁盘上。替换容器可能同时丢失二者。增加任务处理进程数量后,也可能因接收请求的进程不同而得到不同结果。

修改后的设计使用持久化任务存储和获准的对象存储。请求记录任务标识。任务处理进程领取任务、生成结果并记录结果位置。用户下载报表时,访问检查仍然适用。

关注点报表服务需要回答的问题
状态进程替换后,哪些记录必须仍然保留?
配置同一个制品如何在各环境运行?
身份哪个服务身份可以读取任务并写入结果?
健康状态任务处理进程能否接收工作,又能否完成?
停止任务处理进程停止时,已领取任务会怎样?
容量哪项限制最先出现:任务处理进程、数据库、存储,还是其他服务?

不要将秘密信息放入镜像。通过获准的秘密信息系统提供它们。记录哪些配置修改需要新发布,或需要重启进程。

增加任务处理进程前先设计重试

假设任务处理进程保存 PDF 后,在确认任务之前停止。队列再次投递任务。第二次尝试不得向客户重复收费,也不得发送互相矛盾的完成消息。

在适当情况下采用幂等操作。重复同一个逻辑请求,应保持预期效果不变。定义稳定的请求标识,持久记录结果,并检查每个故障点会发生什么。AWS 在安全重试指南中介绍了这项技术。

重试也需要限制。使用超时、重试次数上限,以及避免同时重复请求的延迟。保留失败任务供检查,不要无限重试。

让期望状态可审查

声明式配置说明预期部署。控制器负责维持该状态。例如,Kubernetes Deployment 管理应用副本和受控更新。应用仍必须正确处理替换。

为基础设施和应用配置管理版本。通过正常交付流程审查修改。观察实际任务完成情况、队列中任务的等待时间、失败情况和依赖限制。进程即使仍在运行,也可能无法生成报表。

选择团队能够运维的平台

云原生不要求每个应用都拆成微服务。运行在托管运行时上的模块化应用,也可以满足要求。更多服务意味着更多接口、部署决策和运维工作。

向开发智能体提供实际平台约定:受支持的运行时、身份方式、数据服务、部署规则和必要证据。除了成功请求,也测试中断和替换行为。继续学习可用性与故障边界。

完成练习

一个虚构报表服务将任务和完成的文件保存在容器磁盘上。画出请求、任务、文件和下载的流程。标出持久化状态。定义任务处理进程写入文件后、确认任务前停止时会发生什么。

下载工作表(Markdown)
检验理解 ↑

继续学习

来源与延伸阅读

Taiga 相关阅读

← 上一课: 明确原型之外的基础设施