mcpField
I
integration-resilience-engineer

integration-resilience-engineer

github.com/jetbrains开发38537 次安装1 周前更新
代码仓库

关于 integration-resilience-engineer

integration-resilience-engineer 是为不可靠的 API、消息和调度边界设计可预测行为的技能。它帮助工程师定义故障模型、重试与超时策略、幂等性、可观测性和验证方案。

主要功能

  1. 01分类操作类型与故障模式
  2. 02制定超时和重试策略
  3. 03规划断路与限流机制
  4. 04设计去重和幂等处理
  5. 05定义运维信号与测试

适用场景

  1. 01审查外部 API 的重试行为
  2. 02处理重复消息投递
  3. 03规划死信队列处理与重放流程
  4. 04防止定时任务重叠运行

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jetbrains/skills --skill integration-resilience-engineer

安装后在 Claude Code 中输入/integration-resilience-engineer确认已加载。

附带文件agents/openai.yaml

详细介绍

集成韧性工程师

来源映射:源自 Kotlin_Spring_Developer_Pipeline.md(SK-12)的 Tier 2 高价值技能。

使命

确保集成在部分故障、超时、重试和重复投递的情况下仍能按预期运行。 将每个远程边界都视为不可靠,并将每次重试都视为可能放大负载的因素。

首先阅读

  • 外部 API 或消息契约,包括状态码或消息架构。
  • SLA、超时预算、速率限制规则和幂等性保证。
  • 当前客户端配置、重试逻辑、熔断器设置和调度配置。
  • 操作的业务重要性,以及可接受的降级行为。
  • 关于请求结果、重试次数、队列深度和 DLQ 的现有可观测性。

设计步骤

  1. 对操作进行分类:
    • 只读或会更改状态
    • 幂等或非幂等
    • 同步用户路径或异步后台路径
  2. 根据调用方的 SLO 反向设定超时预算。
  3. 确定哪些故障可以重试,哪些属于终止性故障。
  4. 确定必须在哪些位置强制执行去重或幂等性。
  5. 在故障可能放大时,添加熔断、舱壁隔离或速率限制。
  6. 添加指标、追踪和结构化结果日志。

HTTP 客户端规则

  • 明确设置连接超时和响应超时。
  • 仅当操作可以安全重放或明确具备幂等性时才进行重试。
  • 使用带抖动的指数退避,而不是固定间隔重试。
  • 遵循 429、Retry-After 和依赖项特定的限流语义。
  • 区分请求尚未到达服务器前发生的超时,以及副作用可能已经发生后才出现的超时。
  • 有意地将下游错误映射为本地语义。不要无意间泄露远程故障原始信息。

消息传递与调度规则

  • 除非端到端证明确有更强保证,否则应将消费者视为至少投递一次。
  • 如果重复投递会造成影响,应使用稳定键和持久化存储来设计去重机制。
  • 使用 DLQ 或有毒消息处理机制,而不是无限循环重新投递。
  • 明确顺序保证和分区键策略。
  • 如果多个节点可能运行同一任务,定时任务应通过分布式锁防止重叠运行。
  • 调度周期性工作时,应考虑时钟偏差、长时间运行的任务和部分完成的情况。

高级故障模式

  • 多层重试会呈爆炸式叠加。客户端重试策略加上平台重试和队列重试,可能引发流量风暴。
  • 如果熔断器缺乏合理的回退方案或运维人员可见性,通常只会改变故障表现形式。
  • 回退数据可能造成数据过时的正确性问题,而不只是用户体验下降。
  • 对更改状态的调用发生超时时,调用方可能无法确定远程端是否已成功执行。这是幂等性设计问题,而不只是超时问题。
  • 没有重放规范的 DLQ 会造成长期运维负担。
  • “恰好一次”通常是对系统属性的描述,而不是单个代码属性。对此应保持审慎并准确表述。
  • 如果预期会演进消息架构,应在首次变更发生前规划向后兼容的消费者。

特定边界的注意事项

  • 在业务逻辑产生明显影响之前,HTTP 连接池、DNS 缓存、TLS 握手和单主机限制就可能主导延迟。客户端传输设置至关重要。
  • 当依赖项的延迟不可预测时,相比同步的状态变更调用,采用 202 Accepted 加异步完成模式可能更安全。
  • Outbox 和 inbox 模式分别解决可靠性的不同部分。不要将其中一种说成同时涵盖发布和消费的幂等性。
  • Kafka 再平衡行为、消费者滞后和分区倾斜都属于韧性范畴,而不只是吞吐量调优问题。
  • 调度器既需要防止任务重叠,也需要业务级幂等性。分布式锁本身并不能保证任务在语义上安全。

专家启发式原则

  • 为每条集成路径设置重试预算。若重试次数超出预算,应立即失败,并清楚说明服务降级情况。
  • 如果依赖项响应缓慢但并未宕机,与其使用熔断机制,不如设置严格的超时并采用舱壁隔离。
  • 如果调用方无法安全判断远程写入是否成功,应设计对账流程,而不只是制定重试策略。
  • 如果队列消费者至关重要,应在出现第一条毒消息之前,明确操作人员如何重放死信队列(DLQ)。

输出约定

返回以下各节:

  • Failure model:此边界可能出现的问题。
  • Resilience policy:超时、重试、熔断、舱壁隔离、回退和去重。
  • Idempotency rule:如何处理重复投递或结果不确定的投递。
  • Operational signals:所需的指标、日志、追踪和告警。
  • Minimal implementation plan:需要进行的客户端、监听器、调度器或配置变更。
  • Verification:用于验证设计的混沌、集成或重放测试。

防护措施

  • 默认情况下,不要重试非幂等操作。
  • 不要在缺少抖动和重试预算的情况下添加重试。
  • 不要使用会悄然违反业务约束的回退方案。
  • 对超时的状态变更,不要让结果不明确却不作解释。
  • 不要构建运维人员无法观测的弹性策略。

质量标准

良好的执行结果会生成一套集成策略,使故障以可控、可解释的方式发生。 糟糕的执行结果则会到处添加重试和熔断机制,同时增加重复操作、延迟和运维混乱。

评论

支持 Markdown