熔断器
大约 2 分钟componentcircuit breakeradaptive
概述
熔断机制是一种容错机制,当服务出现故障或响应时间过长时,会自动切断流量,保护系统的可用性和稳定性。支持熔断后降级处理,降低系统的损失。
开启熔断功能
配置
在 sponge 创建的 web 或 gRPC 服务中,熔断功能默认处于关闭状态。如需启用,请在configs
目录下的 YAML 配置文件中进行设置:
app:
enableCircuitBreaker: true # 是否开启自适应熔断,true:开启, false:关闭
在 Web 服务设置
默认熔断条件:
- 仅对 HTTP 500 和 503 错误码触发熔断
自定义配置:
- 可扩展触发熔断的错误码范围
- 支持自定义降级处理逻辑
- 配置位置:
internal/routers/routers.go
// circuit breaker middleware if config.Get().App.EnableCircuitBreaker { r.Use(middleware.CircuitBreaker( //middleware.WithBreakerOption( //circuitbreaker.WithSuccess(75), // default 60 //circuitbreaker.WithRequest(100), // default 100 //circuitbreaker.WithBucket(20), // default 10 //circuitbreaker.WithWindow(time.Second*3), // default 3s //), //middleware.WithDegradeHandler(handler), // 添加降级处理 //middleware.WithValidCode(http.StatusRequestTimeout), // 添加超时错误码也可以触发熔断 )) }
在 gRPC 服务设置
默认熔断条件:
- 仅对 gRPC 状态码 Internal(13) 和 Unavailable(14) 触发熔断
自定义配置:
- 可扩展触发熔断的错误码范围
- 支持自定义降级处理逻辑
- 配置位置:
internal/server/grpc.go
// circuit breaker interceptor if config.Get().App.EnableCircuitBreaker { unaryServerInterceptors = append(unaryServerInterceptors, interceptor.UnaryServerCircuitBreaker( //interceptor.WithBreakerOption( //circuitbreaker.WithSuccess(75), // default 60 //circuitbreaker.WithRequest(100), // default 100 //circuitbreaker.WithBucket(10), // default 10 //circuitbreaker.WithWindow(time.Second*3), // default 3s //), //interceptor.WithUnaryServerDegradeHandler(handler), // 添加降级处理 //interceptor.WithValidCode(codes.DeadlineExceeded), // 添加超时错误码也可以触发熔断 )) }