如何选择合适的负载均衡算法来分配请求

爱站 昨天 2 0条评论
摘要: 选择合适的负载均衡算法需要考虑以下因素:通常情况下,轮询算法是一个不错的选择,可以满足大多数场景的需求。服务器性能差异较大,可以考虑加权轮询。对于需要保持会话亲和性的应用,可以使用...

选择合适的负载均衡算法需要考虑以下因素:

通常情况下,轮询算法是一个不错的选择,可以满足大多数场景的需求。服务器性能差异较大,可以考虑加权轮询。对于需要保持会话亲和性的应用,可以使用源地址哈希算法。对响应时间敏感,则可以选择延迟敏感算法。


分布式系统常用的一致性算法有哪些

在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。 其中哈希算法是最为常用的算法.典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。 常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i,然后将请求分发到编号为i的机器。 但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有N /(N+1)的服务器的缓存数据需要进行重新计算。 对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移)。 那么,如何设计一个负载均衡策略,使得受到影响的请求尽可能的少呢?在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了Consistent Hashing算法,可以...在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。 其中哈希算法是最为常用的算法.典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。 常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i,然后将请求分发到编号为i的机器。 但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有N /(N+1)的服务器的缓存数据需要进行重新计算。 对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移)。 那么,如何设计一个负载均衡策略,使得受到影响的请求尽可能的少呢?在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了Consistent Hashing算法,可以说Consistent Hashing 是分布式系统负载均衡的首选算法。 1、Consistent Hashing算法描述 下面以Memcached中的Consisten Hashing算法为例说明。 由于hash算法结果一般为unsigned int型,因此对于hash函数的结果应该均匀分布在[0,232-1]间,如果我们把一个圆环用232 个点来进行均匀切割,首先按照hash(key)函数算出服务器(节点)的哈希值, 并将其分布到0~232的圆上。 用同样的hash(key)函数求出需要存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器(节点)上。 Consistent Hashing原理示意图新增一个节点的时候,只有在圆环上新增节点逆时针方向的第一个节点的数据会受到影响。 删除一个节点的时候,只有在圆环上原来删除节点顺时针方向的第一个节点的数据会受到影响,因此通过Consistent Hashing很好地解决了负载均衡中由于新增节点、删除节点引起的hash值颠簸问题。 Consistent Hashing添加服务器示意图虚拟节点(virtual nodes):之所以要引进虚拟节点是因为在服务器(节点)数较少的情况下(例如只有3台服务器),通过hash(key)算出节点的哈希值在圆环上并不是均匀分布的(稀疏的),仍然会出现各节点负载不均衡的问题。 虚拟节点可以认为是实际节点的复制品(replicas),本质上与实际节点实际上是一样的(key并不相同)。 引入虚拟节点后,通过将每个实际的服务器(节点)数按照一定的比例(例如200倍)扩大后并计算其hash(key)值以均匀分布到圆环上。 在进行负载均衡时候,落到虚拟节点的哈希值实际就落到了实际的节点上。 由于所有的实际节点是按照相同的比例复制成虚拟节点的,因此解决了节点数较少的情况下哈希值在圆环上均匀分布的问题。 虚拟节点对Consistent Hashing结果的影响从上图可以看出,在节点数为10个的情况下,每个实际节点的虚拟节点数为实际节点的100-200倍的时候,结果还是很均衡的。 第3段中有这些文字:“但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;”为何是 (N-1)/N 呢?解释如下:比如有 3 台机器,hash值 1-6 在这3台上的分布就是:host 1: 1 4host 2: 2 5host 3: 3 6如果挂掉一台,只剩两台,模数取 2 ,那么分布情况就变成:host 1: 1 3 5host 2: 2 4 6可以看到,还在数据位置不变的只有2个: 1,2,位置发生改变的有4个,占共6个数据的比率是 4/6 = 2/3这样的话,受影响的数据太多了,势必太多的数据需要重新从 DB 加载到 cache 中,严重影响性能【consistent hashing 的办法】上面提到的 hash 取模,模数取的比较小,一般是负载的数量,而 consistent hashing 的本质是将模数取的比较大,为 2的32次方减1,即一个最大的 32 位整数。 然后,就可以从容的安排数据导向了,那个图还是挺直观的。 以下部分为一致性哈希算法的一种PHP实现。 点击下载

服务器集群的负载均衡算法有哪些

轮转(Round-Robin)算法加权轮转(Weighted Round Robin)算法最小连接数(Least Connections)算法加权最小连接数(Weighted Least Connections)算法目的地址哈希散列(Destination Hashing Scheduling)算法源地址哈希散列(Source Hashing Scheduling)算法随机(Random)算法

想做服务器的负载均衡 都有哪些方式?

最常见的一种方法,是在同一个机房的同一机柜上面租用多台机器.并把网站的数据库和页面分开.把数据库放在单独的一台高配置服务器上面.把网站前端页面复制成多份.放在不同的其他几台机器上面.然后用DNSPOD解析.把一个域名解析指向多个不同服务器的IP.这样就可以实现多台服务器负载均衡的功能.而且相对比较简单.海腾数据杨闯为你解答.个人建议.希望对你有帮助.

文章版权及转载声明:

作者:爱站本文地址:https://awz.cc/post/18862.html发布于 昨天
文章转载或复制请以超链接形式并注明出处爱网站

赞(0