负载均衡算法的几种常用方案

总结下负载均衡的常用方案及适用场景

轮询调度

以轮询的方式依次请求调度不同的服务器;实现时,一般为服务器带上权重;这样有两个好处:

  1. 针对服务器的性能差异可分配不同的负载;
  2. 当需要将某个结点剔除时,只需要将其权重设置为0即可;

优点:实现简单、高效;易水平扩展;

缺点:请求到目的结点的不确定,造成其无法适用于有写的场景(缓存,数据库写)

应用场景:数据库或应用服务层中只有读的场景;

随机方式

请求随机分布到各个结点;在数据足够大的场景能达到一个均衡分布;

优点:实现简单、易水平扩展;

缺点:同Round Robin,无法用于有写的场景;

应用场景:数据库负载均衡,也是只有读的场景;

哈希:

根据key来计算需要落在的结点上,可以保证一个同一个键一定落在相同的服务器上;

优点:相同key一定落在同一个结点上,这样就可用于有写有读的缓存场景;

缺点:在某个结点故障后,会导致哈希键重新分布,造成命中率大幅度下降;

解决:一致性哈希 or 使用keepalived保证任何一个结点的高可用性,故障后会有其它结点顶上来;

应用场景:缓存,有读有写;

一致性哈希:

在服务器一个结点出现故障时,受影响的只有这个结点上的key,最大程度的保证命中率;

如twemproxy中的ketama方案;

生产实现中还可以规划指定子key哈希,从而保证局部相似特征的键能分布在同一个服务器上;

优点:结点故障后命中率下降有限;

应用场景:缓存;

根据键的范围来负载:

根据键的范围来负载,前1亿个键都存放到第一个服务器,1~2亿在第二个结点;

优点:水平扩展容易,存储不够用时,加服务器存放后续新增数据;

缺点:负载不均;数据库的分布不均衡;(数据有冷热区分,一般最近注册的用户更加活跃,这样造成后续的服务器非常繁忙,而前期的结点空闲很多)

适用场景:数据库分片负载均衡;

根据键对服务器结点数取模来负载:

根据键对服务器结点数取模来负载;比如有4台服务器,key取模为0的落在第一个结点,1落在第二个结点上。

优点:数据冷热分布均衡,数据库结点负载均衡分布;

缺点:水平扩展较难;

适用场景:数据库分片负载均衡;

纯动态结点负载均衡:

根据CPU、IO、网络的处理能力来决策接下来的请求如何调度;

优点:充分利用服务器的资源,保证个结点上负载处理均衡;

缺点:实现起来复杂,真实使用较少;

不用主动负载均衡:

使用消息队列转为异步模型,将负载均衡的问题消灭

负载均衡是一种推模型,一直向你发数据,那么,将所有的用户请求发到消息队列中,所有的下游结点谁空闲,谁上来取数据处理;转为拉模型之后,消息了负载的问题;

优点:通过消息队列的缓冲,保护后端系统,请求剧增时不会冲垮后端服务器;

水平扩展容易,加入新结点后,直接取queue即可;

缺点:不具有实时性;

应用场景:不需要实时返回的场景;

比如,12036下订单后,立刻返回提示信息:您的订单进去排队了…等处理完毕后,再异步通知;

时间: 11-25

负载均衡算法的几种常用方案的相关文章

负载均衡算法及手段

负载均衡器 可以是专用设备,也可以是在通用服务器上运行的应用程序. 分散请求到拥有相同内容或提供相同服务的服务器. 专用设备一般只有以太网接口,可以说是多层交换机的一种. 负载均衡器一般会被分配虚拟IP地址,所有来自客户端的请求都是针对虚拟IP地址完成的.负载均衡器通过负载均衡算法将来自客户端的请求转发到服务器的实际IP地址上. 负载均衡算法 private Map<String,Integer> serverMap = new HashMap<String,Integer>(){

几种简单的负载均衡算法及其Java代码实现

什么是负载均衡 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求.负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能. 负载均衡分为软件负载均衡和硬件负载均衡,前者的代

Citrix Netscaler负载均衡算法

众所周知,作为新一代应用交付产品的Citrix Netscaler具有业内领先的数据控制.应用交付的能力,然而作为根本内容之一的ADC功能,如果不具备强大的.多元化的均衡算法是不可能适应如此众多的应用场景,更无法做到好的应用交付产品.因此我们在此讨论一下比较常用的负载均衡算法就很有必要. 目前最新版本的Netscaler支持17种均衡算法,目前先讨论最常用的12种 1.轮询算法(Round Robin) 当NetScaler 使用轮询的负载均衡算法时,它会将来自客户端的请求轮流分配给后台中的服务

PostgreSQL高可用性、负载均衡、复制与集群方案介绍

目录[-] 一.高可用性.负载均衡.复制的几个方案比较: 二.多节点集群方案比较 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high-availability.html 复制.集群和连接池: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling 集群方案功能列表: http://blog.osdba.net/46.html

F5负载均衡算法及基本原理

原文:Intro to Load Balancing for Developers – The Algorithms 转载:http://blog.gesha.net/archives/205/ posted on Tuesday, March 31, 2009 11:02 PM Random: This load balancing method randomly distributes load across the servers available, picking one via ra

说一说负载均衡算法

    负载均衡算法可以分为两类:静态负载均衡算法,基于服务器的容量,就是高配置的服务器比低配置的服务器分配更多的请求:动态负载均衡算法根据服务器的状况,比如通过监控可以得到平均响应时间,或者CPU占用率,内存占用率按照某种方式进行计算,作为权重值 静态负载均衡算法 随机(Random):利用随机数生成算法选取一个服务器,然后把连接发送给他.虽然许多负载产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重. 轮询(Round Robin):按顺序把每个新的连接请求分配给

2种负载均衡算法

接口定义: public interface ILoadBalance<T> { T Balance(); } 实现: public class WeightObject<T> where T : class { int weight; T activator; public WeightObject(T activator, int weight) { Activator = activator; Weight = weight; } public int Weight { ge

负载均衡array的三种转发模式

array负载均衡设备支持三种转发模式: 1.Reverse Proxy Mode(反向代理模式) Array APV 的反向代理模式是指负载均衡接收到用户的请求后,以代理的方式转发给内部的服务器.因此,与后台服务器建连的源地址为APV的接口地址.反向代理模式下,无需对原有网络进行额外调整,同时结合TCP连接服用技术,对应用性能进行优化,但是不好的地方就是在服务器那里看不到客户端的IP地址,无法分析数据. 2.Transparent Mode (透明模式) Array APV的透明模式是指 Ar

负载均衡的常用算法

1.随机算法: 负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它.同样一个请求一会落到机器A,一会落到机器B上,Cache会被频繁淘汰,使得cache命中率低. 2.轮询算法: 轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器.轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度.连接速度和内存等方面不是完全均等,那么效果就会不好.当然cache命中率也不高 3.加权轮询算法: 每个机器接受