GoShield是一个Go语言的统一弹性(Resilience)工具包,灵感来自Java的Resilience4j和.NET的Polly,为Go微服务提供生产级的容错能力。
在分布式系统中,服务间调用面临网络抖动、下游过载、瞬时故障等问题。GoShield提供了7种可组合的弹性模式:
Circuit Breaker(熔断器):当下游错误率超过阈值时自动熔断,防止级联故障。支持Closed/Open/HalfOpen三种状态机
Retry(重试):支持固定间隔、指数退避、斐波那契退避三种策略,可配置最大重试次数和可重试错误类型
Rate Limiter(限流):令牌桶和滑动窗口两种实现,支持突发流量处理
Timeout(超时):强制操作时间限制,防止慢请求占用资源
Bulkhead(隔舱):限制并发执行数,防止资源耗尽
Fallback(降级):当操作失败时提供兜底响应
组合模式:支持链式组合多种弹性策略,构建复杂的容错逻辑
技术亮点:
内置Prometheus指标,所有弹性模式自动暴露metrics
提供net/http中间件,一行代码接入HTTP服务
支持JSON配置文件 + 环境变量覆盖,支持热重载
完整的测试覆盖和性能基准测试
技术栈:Go 1.22+、Prometheus、Docker、GitHub Actions CI
个人负责:独立完成架构设计、7种弹性模式的实现、HTTP中间件开发、配置系统设计、文档编写。参考了Resilience4j的设计理念,但针对Go的goroutine模型做了原生适配。