Skip to content

Hyx

Hyx

🧘‍♂️️ Lightweight fault tolerance primitives for your resilient and modern Python microservices

Package Version Downloads Supported Python Versions
Documentation Status Test Status Coverage


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.

Note

This project is under active development and testing in production. Your feedback and help are highly appreciated!

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

Warning

At this stage, Hyx prioritizes speed of development over API stability. This is going to change once we implement main features and use cases.

Requirements

Installation

Hyx can be installed from PyPi:

pip install hyx
poetry add hyx

Components

Here is a short overview of Hyx's components:

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

Stay Tuned

Hyx is a young but rapidly evolving project. There are tons of things we want to support and integrate with to make Hyx suitable for different frameworks and use cases.

If you don't want to miss our updates, consider the following options:

Thanks

Quote

We are staying on the shoulders of giants (c)

There are some open source projects and other resources that heavily influenced and inspired Hyx to emerge. Without those projects and people behind them, Hyx wouldn't have been created. So I wanted to pause for a moment to say a huge thanks wholeheartedly ❤ to:

License

This project is licensed under the terms of the Apache 2.0 license.