Skip to content

Conversation

@b1tamara
Copy link
Contributor

@b1tamara b1tamara commented Nov 4, 2025

No description provided.

Copy link
Contributor

@peanball peanball left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some wording, some questions.


- **Configurable via Per-Route Options**: Easily set up Hash-Based Routing using application route options
- **Consistent Hashing**: Implements the Maglev consistent hashing algorithm as outlined in the paper "Maglev: A Fast and Reliable Software Network Load Balancer" (https://storage.googleapis.com/gweb-research2023-media/pubtools/2904.pdf)
- **Minimal Rehashing**: Uses the Maglev lookup table to map application instances by hash, minimizing the need to recalculate the entire table when instances are added or removed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the recalculation is not the expensive part. The really expensive part is the resulting shift of specific hashes to other instances. This rehashing minimization makes sure that happens as little as possible and keeps the "allocation" of hash values to their instances as stable as possible.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right. I did not like the word recalculation either, I wanted to say the same what you mentioned.
Maybe:

**Minimal Rehashing**: Uses the Maglev lookup table to map application instances by hash, ensuring that hash positions are shifted to other instances as little as possible when application instances are added or removed."

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds great!


Hash-Based Routing implements a clear precedence hierarchy:

1. **Sticky Sessions**: First checks if a sticky session is used and the sticky session endpoint is available
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is the sticky session counted towards the balance / in-flight requests or not?

Copy link
Contributor Author

@b1tamara b1tamara Nov 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All in-flight requests will be counted (incl. sticky session requests). It happens via {RoundRobin Iterater | HashBased Iterator | LeastConnection Iterator}.PreRequest logic

Comment on lines 31 to 35
While Session Affinity offers a solution for maintaining session consistency, it poses scalability challenges, as Session Affinity is confined to a single instance. It increases the risk that large customers could be routed to the same instance by chance. On the other hand, enabling Session Affinity requires additional implementation effort on the application side to return a sticky session cookie in responses.

In contrast, Hash-Based Routing provides a more scalable and balanced approach by consistently distributing requests based on a hash of a specific HTTP header value (e.g., `X-Resource-ID` or `Tenant-ID`). This hash value determines the appropriate application instance for each request, ensuring that requests with the same hash are consistently routed to the same instance, but might be routed to another predetermined instance when the current one is saturated (find more about Handling imbalanced loads below).

This makes it especially suitable for applications requiring high scalability and performance, such as microservices architectures or multi-tenant applications, when dealing with limited or memory-intensive resources in backend services.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These paragraphs are very wordy and a bit meandering. LLM?

Either way, the main point is:
Session affinity works on session level. Heavy users may end up on the same instance and through session affinity pin to it, thus overloading it. Identifying sessions for web applications is usually done via session cookie and does not pose too much implementation burden. CF only supports a single cookie name however, defaulting to JSESSIONID.

With hash based routing, identifiers other than the session ID can be used, and spill-over to other instances is possible with the balance factor (see next section).

b1tamara and others added 2 commits November 4, 2025 11:02
Co-authored-by: Alexander Lais <Alexander.lais@me.com>
Copy link
Contributor

@hoffmaen hoffmaen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rephrasing key features


## <a id="key-features"></a> Key Features

- **Configurable via Per-Route Options**: Easily set up Hash-Based Routing using application route options
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe add a link to per-route-options documentation?

Copy link
Contributor

@hoffmaen hoffmaen Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **Configurable via Per-Route Options**: Easily set up Hash-Based Routing using application route options
- **Configurable via Per-Route Options**: Easily configurable via per-route options

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is the same words twice.
WDYT about
Configurable via Per-Route Options: Hash-Based load-balancing setup through application route options

## <a id="key-features"></a> Key Features

- **Configurable via Per-Route Options**: Easily set up Hash-Based Routing using application route options
- **Consistent Hashing**: Implements the Maglev consistent hashing algorithm as outlined in the paper "Maglev: A Fast and Reliable Software Network Load Balancer" (https://storage.googleapis.com/gweb-research2023-media/pubtools/2904.pdf)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **Consistent Hashing**: Implements the Maglev consistent hashing algorithm as outlined in the paper "Maglev: A Fast and Reliable Software Network Load Balancer" (https://storage.googleapis.com/gweb-research2023-media/pubtools/2904.pdf)
- **Consistent Hashing**: Consistent hashing via the Maglev Algorithm (see [Maglev: A Fast and Reliable Software Network Load Balancer](https://storage.googleapis.com/gweb-research2023-media/pubtools/2904.pdf) for details)


- **Configurable via Per-Route Options**: Easily set up Hash-Based Routing using application route options
- **Consistent Hashing**: Implements the Maglev consistent hashing algorithm as outlined in the paper "Maglev: A Fast and Reliable Software Network Load Balancer" (https://storage.googleapis.com/gweb-research2023-media/pubtools/2904.pdf)
- **Minimal Rehashing**: Uses the Maglev lookup table to map application instances by hash, minimizing changes to hash assignments when application instances are added or removed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **Minimal Rehashing**: Uses the Maglev lookup table to map application instances by hash, minimizing changes to hash assignments when application instances are added or removed
- **Minimal Rehashing**: The Maglev Algorithm minimizes changes to the mapping table (header->instance), when application instances are added or removed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would remove the (header->instance) bit, or at least change it to (hash -> instance).

- **Minimal Rehashing**: Uses the Maglev lookup table to map application instances by hash, minimizing changes to hash assignments when application instances are added or removed
- **Configurable Hash Header**: Allows specifying which HTTP header to use for hashing via the `hash_header` property
- **Session Affinity Precedence**: Prioritizes session affinity, or sticky sessions, over hash-based routing when available
- **Handling imbalanced loads**: Implements detection and mitigation of higher request loads on single instances due to different usage patterns for specific hashes. This avoids overloading a single instance while keeping instances for a particular hash at a minimum.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **Handling imbalanced loads**: Implements detection and mitigation of higher request loads on single instances due to different usage patterns for specific hashes. This avoids overloading a single instance while keeping instances for a particular hash at a minimum.
- **Handling imbalanced loads**: Imbalanced load on a subset of instances is avoided. This avoids overloading a single instance while keeping instances for a particular hash at a minimum.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"is avoided" is passive voice and that should be avoided ;-)

b1tamara and others added 2 commits November 7, 2025 09:12
Co-authored-by: Clemens Hoffmann <clemens.hoffmann@sap.com>
@anita-flegg
Copy link
Contributor

@ameowlia , is this something we also need to add to the TPCF commercial docs?

@anita-flegg
Copy link
Contributor

Note to myself -- CF OSS docs only.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants