成为赞助商——支持中文 Agent 生态

了解赞助
库Agent场景库
← 返回用例列表

Stripe:图搜索自动愈合 MongoDB 分片

对照 Stripe 工程实践:把分片状态建成可遍历图,用 BFS/Dijkstra 在模拟层规划再经 Temporal 执行;不做你的生产改票/重建。

飞书DeepSeekClaudeChatGPT🛠️ 开发者工具🏢 企业协作

场景说明

面向平台/SRE:把「静态插件式自愈扛不住组合故障」写成图搜索自愈叙事,区别于单机 OOM 分诊与通用 DLQ 毒丸。

案例叙事

01他们做了什么

Stripe.dev《How Stripe uses graph search and state machines to auto-remediate a global database fleet》(datePublished 可核)写明:Document Database 舰队约 2000 个 MongoDB 分片、40+ 布局;过去值班常为降级分片起床,单次人工护理可达数小时。V1 自愈是单步硬编码插件按固定优先级转——多故障叠加、插件隐式依赖、布局耦合与中途取消留下的中间态,都会把系统逼回人工。

重构把分片健康建成有向图:节点属性含投票、优先级、隐藏、oplog、地域与法定人数等;边是原子操作(改票/优先级、隐藏、重建、扩 oplog)。目标态来自 Source of Truth;非法态(偶数票、健康投票节点少数等)在搜索中剪枝。先用 BFS 找最短合法序列;再演进到带权 Dijkstra(边权≈误配置分数×预估耗时),在无法完全健康时仍可「部分愈合」到误配置最低的可达态。规划在内存模拟(CommonContext 抽象,与 Temporal 生产执行共用业务逻辑)中毫秒级展开,执行仍走 Temporal 耐久工作流。效果:pager 约降 30%(约少 200 次/年)、每年少约 12 天分片困在不健康态,新布局接入可零改代码。本场景据此输出「图搜索自愈」提纲。禁止对你的集群下发操作。

02实际效果

  • 源披露约 30% pager 下降、每年约 12 天舰队健康回收、新布局零改代码接入等;数字属于 Stripe 舰队,不可直接当作你环境的承诺。
  • 能把「再写一个 if 插件」与「不变量+操作集+搜索」拆开。
  • 为模拟保真、部分愈合与取消后续规划提供提问清单。

03值得知道

  • 强依赖可建模的状态与可安全自动化的原子操作;建模错了会系统化做错。
  • Temporal/模拟双后端是实现细节,换编排器也可以,但「模拟即执行」保真不可省。
  • 上面写的是 Stripe 公开工程叙事,不是对你库的诊断结论。

04可复制提示词

状态机自愈建模简报

你是基础设施自愈建模助手。只根据用户描述做图搜索建模提问清单,不要连接真实集群。

资源类型:{{resource_type}}
已知原子操作:{{atomic_ops}}
安全不变量:{{invariants}}
现有痛点:{{pain}}

输出 Markdown:
1. 状态字段候选
2. 合法/非法态例子
3. BFS vs 带权最短路适用场景
4. 模拟层与执行层如何共用逻辑
禁止生成可直接对生产执行的命令序列当「已批准变更」。

多故障卡住时的部分愈合提纲

自愈在组合故障下卡住或只完成一部分,请写复盘提纲。

症状:{{symptom}}
已自动步骤:{{done_steps}}
仍异常项:{{remaining}}

输出:
1. 是否存在完整路径,还是应接受部分愈合
2. 哪些中间态可能由取消/超时留下
3. 人工接管前要核对的不变量
4. 是否该加新的误配置计分规则
不要伪造「舰队已全部健康」。

怎么做

  1. 粘贴现有自愈是「插件优先级」还是人工 runbook、故障是否常多因子叠加、以及是否有状态模拟层
  2. Agent 按公开实践输出:状态/边建模→安全不变量→模拟与执行同逻辑→部分愈合提问清单
  3. 人工在自有控制面设计;Agent 不连接你的数据库、不改投票或隐藏节点

实用提示

  • 源帖关键句:别再问「眼下最重要修哪个」,要问「哪条操作序列能在不违反不变量的前提下回到健康」
  • 与 ecs-oom-killer-log-triage-agent / sqs-dlq-poison-message-triage 不同:本条是全球分片拓扑图搜索自愈,不是单机 OOM 或队列毒丸分诊
#Stripe#MongoDB#自愈#图搜索#SRE