Using round robin for load balancing if hash key is empty

Niklas Keller me at kelunik.com
Thu May 23 17:54:46 UTC 2019


> > I'd like to propose falling back to round robin if the hash key is
> > empty. This allows using hashed cookie values for sticky sessions
> > while using round robin for all requests that do not carry any session
> > information and thus do not need the stickiness. While Nginx Plus
> > allows to use the learning mode, this patch avoids the need for
> > synchronization between multiple instances.
> >
>
> Can you please elaborate on balancing/sticky scheme you are using?
>
> Say, first request without cookie is balanced by round-robin, arrives
> at some backend, which responds with cookie.
> Next time, the request with cookie is balanced by hash algorithm,
> and the result can be easily another backend. How do you deal with this?

Very few requests depend on the stickiness in our application. The
main use case is showing success messages once after a form is
submitted.

In these cases, the usual flow is:
 - GET /form → Server assigns cookie
 - POST /form → Client sends cookie, a different server might be
selected, but doesn't matter
 - GET /form?_key=abc → Client sends cookie again, success message is
shown and removed from the session, same server as in the previous
request is selected

For cookie-less clients, e.g. crawlers and webhooks, the stickiness
doesn't matter at all, so these shouldn't be sticky to avoid peaks on
single backend nodes.

@Roman: Patch looks good to me, thanks!

Regards,
Niklas


More information about the nginx-devel mailing list