Skip to content

Implement Hash-Based Routing Support in Cloud Controller #589

@b1tamara

Description

@b1tamara

Issue

Implement support for the hash-based routing in the cloud controller (see details in the RFC-0042 "Implementing a Hash-Based Load Balancing Algorithm for CF Routing").

Context

In the RFC-0042 "Implementing a Hash-Based Load Balancing Algorithm for CF Routing" it was decided to introduce hash-based routing as a load balancing algorithm to be used on a per-route basis. The implementation for the routing stack has been provided in the PR routing-release#519.
Cloud Controller provides an interface between CF users and the routing stack.

Expected results

  • Cloud Controller accepts hash as a valid property for loadbalancing per-route option at the relevant routes API endpoints and in the manifest.
  • Cloud Controller accepts the new per-route options hash_header and hash_balance at the relevant routes API endpoints.
  • Cloud Controller accepts the new per-route options hash_header and hash_balance in the manifest.
  • Cloud Controller performs validations:
    ** The hash_header property is mandatory when load balancing is set to hash
    ** The hash_balance property is optional when load balancing is set to hash. Leaving out hash_balance or setting it explicitly to 0 is allowed and it means the load situation will not be considered
    ** For load balancing algorithms other than hash, the hash_balance and hash_header properties MUST not be set
  • Cloud Controller tries to merge the per-route options object from the database (if exists) with the changes from the manifest. For example, the app admin wants to change only the hash_balance for already existing route which uses hash load-balancing algorithm.
  • Implement an operator-level feature flag to enable/disable the logic. Mark the feature as experimental, until everything is completed

Please raise your comments in this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions