A Go library for building resilient applications with composable fault tolerance patterns like retry, circuit breaker, and rate limiting.
Failsafe-go is a fault tolerance and resilience library for Go that provides composable patterns to protect applications from failures in distributed systems. It wraps functions with policies like retry, circuit breaker, rate limiting, and fallback to handle transient errors and prevent cascading failures. The library helps developers build more reliable and resilient Go applications that can gracefully handle unreliable dependencies and network issues.
Go developers building microservices, distributed systems, or applications that depend on external services where network failures and timeouts are common. It's particularly useful for backend engineers working on cloud-native applications that require robust error handling.
Developers choose Failsafe-go because it offers a comprehensive, unified API for multiple resilience patterns with excellent composability. Unlike implementing these patterns manually, it provides battle-tested implementations with flexible configuration, making it easier to create sophisticated fault tolerance strategies without boilerplate code.
Fault tolerance and resilience patterns for Go
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Includes all major fault tolerance policies like retry, circuit breaker, rate limiter, and hedge, as listed in the key features, covering diverse failure scenarios in distributed systems.
Policies can be flexibly combined to create tailored strategies, emphasized in the philosophy section, allowing developers to address specific use cases without boilerplate code.
The README shows build status badges and links to detailed docs at failsafe-go.dev, indicating ongoing maintenance and reliable support for users.
Provides a consistent interface for all resilience patterns, reducing integration complexity compared to mixing separate libraries for retry, circuit breaking, etc.
The flexibility to compose multiple policies can lead to intricate setups that are hard to debug and maintain, especially in large-scale applications with many dependencies.
Wrapping functions with layers of policies may introduce latency and increased resource usage, which could be problematic for high-throughput or low-latency systems.
Adds an external dependency, which might not align with projects aiming for minimal vendor lock-in or strict compliance requirements without thorough auditing.