[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f6ALjUIO1fROkXLuvH-dwvA5PDCmAR7iT7-O9or0SCr0":3},{"item":4,"related":48},{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":39,"sourceName":40,"sourceUrl":41,"status":42,"seoTitle":7,"seoDescription":9,"canonicalUrl":39,"isFeatured":43,"sno":44,"sortOrder":45,"publishedAt":46,"updatedAt":47,"createdAt":47},"cd0e6488-ef7a-4e2f-a600-3a19b667560f","article","Circuit Breaker：服务连续报错时，为什么要主动断路？","circuit-breaker-distributed-resilience-explained","Circuit Breaker 通过 Closed、Open、Half-Open 状态限制持续故障的远程调用，防止重试把局部问题扩大成级联故障。本文解释它与超时、重试、限流和降级的关系，以及 Agent 调用外部工具时的用法。","调用远程服务时，失败不一定是瞬间发生的。依赖服务可能持续超时、返回错误，或者正在恢复但还没有能力接收更多请求。如果客户端仍然不断重试，就会把局部故障扩大成级联故障。Circuit Breaker，中文常译为“熔断器”或“断路器”，就是在依赖明显不健康时主动停止调用。\n\n## 三种状态\n\nClosed 状态下，请求正常通过，断路器统计近期失败。当失败次数或比例超过阈值，状态切换为 Open，后续请求会快速失败、返回缓存或走降级逻辑，不再等待一个大概率超时的远程调用。\n\n经过一段冷却时间后，断路器进入 Half-Open，只放行少量试探请求。如果试探成功，说明依赖可能恢复，回到 Closed；如果再次失败，则重新 Open。这种状态机让恢复过程受到控制，而不是突然把全部流量重新压给刚恢复的服务。\n\n## 它和重试的关系\n\n重试假设故障可能是短暂的，希望下一次成功；熔断器假设故障已经持续，应该暂时停止尝试。两者可以组合，但重试必须尊重熔断状态，否则每个请求内部重复几次，系统整体仍可能过载。\n\n断路器也不是越敏感越好。阈值太低会把偶发网络抖动当成故障，阈值太高又会错过保护窗口。还要区分业务错误和基础设施错误：参数校验失败通常不应该通过重试解决。\n\n## AI Agent 为什么需要它\n\nAgent 往往会调用多个模型、搜索服务和外部 API。没有熔断机制时，一个不可用工具可能让整个任务反复等待。成熟设计会为不同依赖设置独立断路器，记录状态变化，并为非核心工具准备有限降级路径。\n\n## 读者应该记住\n\nCircuit Breaker 的核心不是“遇到错误就拒绝”，而是用状态机限制故障扩散，并给依赖留出恢复空间。它应该和超时、重试、限流及降级策略一起设计。\n\n资料：[Microsoft Azure Architecture Center：Circuit Breaker](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Farchitecture\u002Fpatterns\u002Fcircuit-breaker)","\u002Fuploads\u002F2026-09-20\u002F8067408e-5510-47a1-a38e-a9026841715a.jpg",[],[],"Foundit","https:\u002F\u002Ffoundit.cn","foundit-ai-editorial",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31,35],{"id":24,"name":25,"slug":26},"88d2bc27-0e0f-468a-b907-2991cb97b87b","人工智能","ai",{"id":28,"name":29,"slug":30},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":32,"name":33,"slug":34},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":36,"name":37,"slug":38},"4c2bbea6-eab7-40a8-8447-1de478ff7749","分析","analyse",null,"Microsoft Azure Architecture Center：Circuit Breaker","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Farchitecture\u002Fpatterns\u002Fcircuit-breaker","published",false,54,0,"2026-09-20T00:00:00.000Z","2026-09-20T03:58:10.337Z",[49,57,67],{"id":50,"type":6,"title":51,"slug":52,"summary":53,"coverUrl":54,"authorName":14,"sno":55,"publishedAt":46,"createdAt":56},"67479210-59f6-4368-8ef0-307bb03e51d7","Hedged Requests：为什么同一个请求有时会被同时发两次？","hedged-requests-tail-latency-explained","Hedged Requests 在主请求短暂变慢时向另一个副本发起备用请求，用少量额外流量降低长尾延迟。本文区分对冲请求与普通重试，解释它的适用边界、幂等要求和 AI 服务中的使用场景。","\u002Fuploads\u002F2026-09-20\u002F487383e7-976a-480b-98e8-83fbc8e23446.jpg",48,"2026-09-20T03:58:11.850Z",{"id":58,"type":6,"title":59,"slug":60,"summary":61,"coverUrl":62,"authorName":63,"sno":64,"publishedAt":65,"createdAt":66},"9c77fbc0-6422-4ae3-bf41-9a592e3a53e1","A2UI：AI Agent 为什么不应该只返回一段文字","a2ui","A2UI 把 Agent 的界面意图与客户端的组件实现分开：模型选择要展示的卡片、表单或动作，宿主应用负责白名单、权限、渲染和安全。本文用订票场景讲清 A2UI 的四层结构、跨端复用、流式更新与落地护栏。","\u002Fuploads\u002F2026-08-05\u002Fb6291296-7a17-44a7-b288-83ebc0072068.jpg","Foundit AI",67,"2026-08-02T00:00:00.000Z","2026-08-05T02:12:50.323Z",{"id":68,"type":6,"title":69,"slug":70,"summary":71,"coverUrl":72,"authorName":14,"sno":73,"publishedAt":74,"createdAt":75},"9ccde95c-d754-4808-91f7-488f392e3eeb","你的品牌在AI眼里到底存不存在？这套系统说了算","automated-geo-monitoring-system","靠手动抽查来验证GEO效果，本质上是在跟概率玩游戏。赢一次，不代表能一直赢。","\u002Fuploads\u002F2026-08-07\u002Fdf111c0d-f14a-4b2a-8347-141e96b71654.jpg",1,"2026-08-07T00:00:00.000Z","2026-08-07T04:31:30.843Z"]