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

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

轮询调度

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

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

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

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

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

随机方式

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

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

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

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

哈希:

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

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

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

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

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

一致性哈希:

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

如twemproxy中的ketama方案;

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

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

应用场景:缓存;

根据键的范围来负载:

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

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

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

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

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

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

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

缺点:水平扩展较难;

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

纯动态结点负载均衡:

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

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

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

不用主动负载均衡:

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

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

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

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

缺点:不具有实时性;

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

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

时间: 2024-08-02 11:01:34

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

负载均衡算法及手段

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

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

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

那些NB哄哄的负载均衡算法到底是什么样子的?

前言 在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,其重要性不言而喻. 一.什么是负载均衡? 早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求.随着现在互联网的流量越来越大,稍微好一点的系统,访问量就非常大了,并且系统功能也越来越复杂,那么单台服务器就算将性能优化得再好,也不能支撑这么大用户量的访问压力了,这个时候就需要使用多台机器,设计高性

假如古代皇帝也懂负载均衡算法

本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... ??大家都知道古代皇帝各个都是后宫佳丽三千,而皇帝身上都天然的带着雨露均沾的精神,不想单独的宠爱一人! ??溺水三千,又怎舍得只取一瓢饮?据传皇帝们晚上睡觉个个都怕冷,因此每晚都需要有人侍寝,那么这么多后宫,该翻谁牌子.怎么分配侍寝名额呢? ??还别说,皇帝行房事竟还挺讲究的!早在<春秋>就有记载"晦阴惑疾,明谣心疾,以辟六气".九嫔以下,每九人中进御一人

Citrix Netscaler负载均衡算法

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

集群负载均衡算法原理

最近打算往互联网方向发展,研究了下集群的负载均衡.其实早就应该去了解学习了.如有理解不到位的地方,还望各大神指出. 负载均衡算法是集群在调度时,选择具体调度和分发方式的逻辑. 目前流行和常用的算法有:轮询算法,Hash算法,Session,最小连接数,最大空闲等. 1.轮询算法: 实现方式:把每一次的用户请求,按顺序循环分配给集群内部的一台服务器.优点是算法简洁,无状态. 2.权重轮询算法 由于服务器的处理能力不同,可以再给服务器加权.也就是权重轮询算法. 3.Hash算法 一般就是将请求中的某

spring-cloud-starter-ribbon提供客户端的软件负载均衡算法

Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等.简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器.我们也很容易使用Ribbon实现自定义的负载均衡算法. LB方案分类 目前主流的LB方案可分成两类:一种是集中式LB, 即在服

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

Haproxy 负载均衡算法介绍:

一.Haproxy配置介绍: 配置文件:/usr/local/haproxy/etc/haproxy.cfg balance roundrobin    # 负载均衡算法配置 二.Haproxy负载均衡算法介绍: balance roundrobin    # 轮询,软负载均衡基本都具备这种算法 balance static-rr    # 根据权重,建议使用 balance leastconn      # 最少连接者先处理,建议使用 balance source         # 根据请求