hyx
hyx copied to clipboard
π§ββοΈ Lightweight fault tolerant primitives for your modern asyncio Python microservices
π§ββοΈοΈLightweight fault tolerance primitives for your resilient and modern Python microservices
Hyx (/ΛhΚΙͺx/) is a set of well-known stability patterns that are commonly needed when you build microservice-based applications. Hyx is meant to be Hystrix (Java), resilience4j (Java) or Polly (C#) but for the Python world.
Key Features
- Implements five commonly used resiliency patterns with various configurations based on advice and experience of industry leaders (e.g. AWS, Google, Netflix)
- Idiomatic Pythonic implementation based on decorators and context managers
- AsyncIO Native Implementation
- Lightweight. Readable Codebase. High Test Coverage
Requirements
- Python 3.9+
- AsyncIO-powered applications (no sync support?)
Installation
Hyx can be installed from PyPi:
pip install hyx
# or via poetry
poetry add hyx
Component Map
Component | Problem | Solution | Implemented? |
---|---|---|---|
π Retry | The failures happen sometimes, but they self-recover after a short time | Automatically retry operation on temporary failures | β |
πΎ Cache | |||
β‘οΈ Circuit Breaker | When downstream microservices have got overloaded, sending even more load can make the situation only worse. | Stop doing requests to your failing microservice temporarily if amount of errors exceeded expected thresholds. Then see if the given time helped the microservice to recover | β |
β± Timeout | Sometimes operations may take too much time. We cannot wait that long or after that time the success is unlikely | Bound waiting to a reasonable amount of time | β |
π° Bulkhead | If executed without control, some code can take too much resources and put down the whole application (and upstream services) or cause slowness of other places of the application | Fix the amount of calls to the code, queue other calls and fail calls that goes beyond your capacity | β |
πββοΈ Rate Limiter | The microservice can be requested with any rate even one that can put it down if happens by accident | Limit the rate your system can be accessed by | β |
π€ Fallback | Nothing can guarantee you that your dependencies will work. What would you do when it's failing? | Degrade gracefully by defining some default values or placeholders if your dependencies are down | β |
Inspired by Polly's Resiliency Policies