mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-11 05:54:39 +00:00
6b2e11be1e
Consistent hashing provides some interesting advantages over common hashing. It avoids full redistribution in case of a server failure, or when expanding the farm. This has a cost however, the hashing is far from being perfect, as we associate a server to a request by searching the server with the closest key in a tree. Since servers appear multiple times based on their weights, it is recommended to use weights larger than approximately 10-20 in order to smoothen the distribution a bit. In some cases, playing with weights will be the only solution to make a server appear more often and increase chances of being picked, so stats are very important with consistent hashing. In order to indicate the type of hashing, use : hash-type map-based (default, old one) hash-type consistent (new one) Consistent hashing can make sense in a cache farm, in order not to redistribute everyone when a cache changes state. It could also probably be used for long sessions such as terminal sessions, though that has not be attempted yet. More details on this method of hashing here : http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/
41 lines
1.3 KiB
C
41 lines
1.3 KiB
C
/*
|
|
* include/proto/lb_chash.h
|
|
* Function declarations for Consistent Hash LB algorithm.
|
|
*
|
|
* Copyright (C) 2000-2009 Willy Tarreau - w@1wt.eu
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation, version 2.1
|
|
* exclusively.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _PROTO_LB_CHASH_H
|
|
#define _PROTO_LB_CHASH_H
|
|
|
|
#include <common/config.h>
|
|
#include <types/proxy.h>
|
|
#include <types/server.h>
|
|
|
|
void chash_init_server_tree(struct proxy *p);
|
|
struct server *chash_get_next_server(struct proxy *p, struct server *srvtoavoid);
|
|
struct server *chash_get_server_hash(struct proxy *p, unsigned int hash);
|
|
|
|
#endif /* _PROTO_LB_CHASH_H */
|
|
|
|
/*
|
|
* Local variables:
|
|
* c-indent-level: 8
|
|
* c-basic-offset: 8
|
|
* End:
|
|
*/
|