Skip to content

Comments

WIP: Document hash-based routing#569

Draft
b1tamara wants to merge 5 commits intocloudfoundry:masterfrom
sap-contributions:hash-based-docue
Draft

WIP: Document hash-based routing#569
b1tamara wants to merge 5 commits intocloudfoundry:masterfrom
sap-contributions:hash-based-docue

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.

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


- **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