知行札记
专题程序与软件系统任务生命周期与协作执行

任务生命周期与协作执行

定义工作单元、状态和完成点,解释队列、重试、幂等、调度、补偿与跨服务流程。

一个工作单元包含什么

任务是一份需要处理的工作,具有输入、处理者、状态和结果。发送确认邮件是任务,邮件正文和收件目标是输入,处理者调用发送服务,结果说明接收方是否接受发送请求。实际到达收件箱需要更后面的证据。

任务身份帮助把多次尝试接回同一工作。输入应足以在执行时重建所需上下文,同时避免保存不必要的凭据和过期事实。延迟执行时,原先的权限、对象状态或期限可能已经变化,应决定重新检查哪些条件。

接受、执行和完成各在何处

同步接口可以等结果再返回,后台接口可以接收工作后返回任务编号。后一种返回说明已接受到某个保证点,执行可能尚未开始。把任务写入持久队列,通常比仅放进当前进程内存有更明确的重启恢复条件。

图是教学状态模型。具体系统还可能需要取消、超时、部分完成或人工处理。状态转换要说明由谁执行、何时提交;处理者死亡后如何发现未完成,也属于任务的保证。

队列把生产和处理分开

生产者提交工作,队列保存或传递,消费者取得工作并确认。确认过早会在执行失败时丢失工作,确认过晚则可能导致重投。租约或可见性期限使处理者取得暂时执行权,过期后其他消费者可以恢复处理。

多个消费者提供并发能力,也带来同一业务对象的交错。按任务编号去重只能处理同一任务的重复;同一订单的两个不同任务仍可能互相冲突。并发上限、业务分组、速率限制和状态版本需要按实际效果设计。

队列积压说明提交速度超过处理能力或处理失败。扩容前先分辨外部限流、CPU、数据库、任务尺寸和毒消息。无法继续处理的任务应保留失败原因、输入身份与人工处理入口,避免无限重试。

重试怎样保留一个效果

超时后调用方不知道效果是否发生。安全重试需要让接收方辨认同一个逻辑意图,并保存能够恢复的处理结果。幂等效果表示同一操作重复执行仍保持声明的结果性质;它需要被实现和限定。

客户端生成操作标识,服务端把标识、关键参数和结果关联。相同标识而参数不同,应有明确拒绝策略;标识记录过期后,迟到重试也需要政策。去重记录与实际写入若分开提交,崩溃可能留下“记过标识却未执行”或“执行过但没记标识”。AWS Builders’ Library 的原始工程说明讨论了这些请求身份和语义等价条件,本页采用其问题,不声称拥有所有服务的统一实现。AWS,Making retries safe with idempotent APIs

退避和抖动减少重试集中冲击;最大尝试次数和总期限控制成本。不可恢复的权限拒绝或非法输入,通常需要修正输入或策略,而非等待更久。

跨服务流程怎样取得结果

订单、扣款和通知可能分别由不同参与者完成。每步有自己的提交点,后一步失败不能自动撤销前一步。流程需要记录进度、决定继续重试还是补偿,并让使用方看见真实完成程度。

补偿是另一项业务动作,例如对已扣款交易申请退款。它有自己的权限、期限和失败,不能被理解为无条件恢复原始世界。补偿也应可恢复、可观察。

事务型发件箱把业务状态和待发送事件放在同一存储事务中,再由发布者发送。它解决提交业务却丢失发布意图的一类间隙;发布者仍可能重复发送,消费者需处理重复。整个系统的效果保证由多个边界组合得到。

调度、取消和恢复

定时调度决定什么时候产生工作。时间区、夏令时、错过时刻、重叠执行和多实例重复调度都需要政策。周期任务可以把某个业务周期作为身份,避免只依靠墙上时钟产生重复结果。

取消可能发生在排队前、排队后或效果产生后。尚未执行时可以终止,执行中需要协作检查,已发生效果可能需要补偿。恢复时依据持久状态和幂等条件继续,不能仅由“进程重启成功”推断业务已经恢复。

本页综合 TS 队列、邮件、支付、消息协作及错误建模材料,建立普通工作执行的主线。具体 Node/Nest/Next 接线在服务实践,模型参与持续决策的智能体循环在 AI 专题。

最后更新于

本页目录