13种负载均衡算法

目录

  • 前言
  • (1)轮转调度(Round-Robin Scheduling)算法
  • (2)加权轮转调度(Weighted Round-Robin Scheduling)算法
  • (3)随机均衡调度(Random Scheduling)算法
  • (4)加权随机均衡调度(Weighted Random Scheduling)算法
  • (5)最小连接调度(Least-Connection Scheduling)算法
  • (6)加权最小连接调度(Weighted Least-Connection Scheduling)算法
  • (7)目标地址散列调度(Destination Hashing Scheduling)算法
  • (8)源地址散列调度(Source Hashing Scheduling)算法
  • (9)基于局部性的最少链接调度(Locality-Based Least ConnectionsScheduling)算法
  • (10)带复制的基于局部性最少链接调度(Locality-Based Least Connectionswith Replication Scheduling)算法
  • (11)响应速度均衡调度(Response Time Scheduling)算法
  • (12)处理能力均衡调度(Processing Capacity Scheduling)算法
  • (13)DNS均衡调度(DNS Scheduling)算法

前言

所谓负载,一般指处理节点的CPU负载、MEM利用率、网络负载、可用的缓冲区、应用系统负载、用户数量以及其他的各种系统资源的当前状态信息。所谓负载均衡,是指处理节点的负载信息通过某代理软件传递给均衡器,由均衡器做出决策并对负载进行动态分配,从而使集群中各处理节点的负载相对趋于平衡。
要实现
(1)为用户提供更好的访问质量。
(2)提高服务器响应速度。
(3)提高服务器及其他资源的利用效率。
(4)避免了网络关键部位出现单点失效。
(5)解决网络拥塞问题,服务就近提供,实现地理位置无关性。
衡量服务器性能和当前运行情况的有效衡量指标包括:
(1)CPU利用率。
(2)内存使用率。
(3)带宽利用率。
(4)硬盘IO吞吐率和网络IO吞吐率。
(5)单位时间内完成的服务次数。
(6)单位时间内连接客户数
(7)完成一个请求任务所用的响应时间。
理想的负载指标应满足以下条件:测量开销低,能体现所有竞争资源上的负载,各负载指标在测量及控制上彼此独立
在引入负载均衡方案时不管是采用哪种方式都需要考虑以下问题:
(1)采用负载均衡方案后,服务器接收和转发数据报的速度及负载均衡的整体检测能力是首先要考虑的重点问题。
(2)负载均衡方案应能满足网络流量不断增长的需求,能均衡不同操作系统和硬件平台之间的负载,能均衡不同流量的负载。
(3)负载均衡设备自身出现故障时应该有良好的冗余解决方案,保证可用性,避免系统遭受重大损失。
(4)采用灵活、直观和安全的管理方式,这样便于安装、配置、维护和监控,提高工作效率,避免差错
下面介绍几种常见的负载均衡算法:

(1)轮转调度(Round-Robin Scheduling)算法

假设所有服务器处理性能相同,将外部请求按顺序轮流分配到集群中的服务器上。这种算法的优点是其简洁性,无需记录当前所有连接的状态,是一种无状态调度算法,但是不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化较大时,容易导致服务器间的负载不平衡。

(2)加权轮转调度(Weighted Round-Robin Scheduling)算法

为保证处理能力强的服务器处理更多的访问流量,用相应的权值表示服务器的处理性能,将请求数目按权值的比例分配给各服务器。调度器可以自动询问服务器的负载情况,并动态地调整其权值。这种均衡算法也是一种无状态调度算法,但可以解决服务器间性能不一的情况,能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。

(3)随机均衡调度(Random Scheduling)算法

把来自网络的请求随机分配给各个服务器。

(4)加权随机均衡调度(Weighted Random Scheduling)算法

此种均衡算法类似于加权轮转算法,不过在处理请求分担时是个随机选择的过程。

(5)最小连接调度(Least-Connection Scheduling)算法

该算法是一种动态调度算法,通过服务器中当前所活跃的连接数来估计服务器的负载情况,把新的连接请求分配到当前连接数最小的服务器。但是,当各个服务器的处理能力不同时,该算法并不理想。

(6)加权最小连接调度(Weighted Least-Connection Scheduling)算法

用相应的权值表示各个服务器的处理性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询服务器的负载情况,并动态地调整其权值。

(7)目标地址散列调度(Destination Hashing Scheduling)算法

根据请求的目标 IP地址,将其作为散列键(Hash Key),通过散列(Hash)函数将这个目标IP地址映射到一台可用且未超载的服务器,将请求发送到该服务器,属于静态映射算法。

(8)源地址散列调度(Source Hashing Scheduling)算法

与目标地址散列调度算法相反,根据请求的源 IP地址,作为散列键(HashKey),通过散列函数将请求的源IP地址映射到一台可用且未超的服务器,将请求发送到该服务器。除了将请求的目标IP地址换成请求的源IP地址,该算法采用的散列函数与目标地址散列调度算法相同,算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

(9)基于局部性的最少链接调度(Locality-Based Least ConnectionsScheduling)算法

找出请求的目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;否则用“最少链接”的原则选出一个可用的服务器。算法的设计目标是在服务器的负载基本平衡情况下将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率。

(10)带复制的基于局部性最少链接调度(Locality-Based Least Connectionswith Replication Scheduling)算法

与基于局部性的最少链接调度算法的不同之处在于,它要维护从一个目标IP地址到一组服务器的映射,而不是从一个目标IP地址到一台服务器的映射。该算法找出请求的目标IP地址对应的服务器组,按“最少链接”原则从服务器组中选出一台服务器,若服务器可用且没有超载,将请求发送到该服务器;否则按“最少链接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,再将请求发送到该服务器。另外,若该服务器组有一段时间未被修改,则将最忙的服务器从服务器组中删除,以降低复制的程度。

(11)响应速度均衡调度(Response Time Scheduling)算法

负载均衡设备对内部各服务器发出一个探测请求,然后由对探测请求响应最快的一台服务器来响应客户端的服务请求。

(12)处理能力均衡调度(Processing Capacity Scheduling)算法

负载均衡设备记录集群内部处理负荷(根据服务器CPU型号、CPU数量、内存大小及当前连接数等换算而成),将服务请求分配给负荷最轻的服务器。由于考虑到了内部服务器的处理能力及当前网络运行状况等不同情形,因此这种均衡算法相对来说更加精确,尤其适合运用到第7层(应用层)负载均衡的情况,但附加开销也较大。

(13)DNS均衡调度(DNS Scheduling)算法

分处在不同地理位置的负载均衡设备,收到同一个客户端的域名解析请求,并在同一时间内,把此域名解析成各自相对应服务器的IP地址,并返回给客户端,客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其他的IP地址响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的…

(转)页游安全攻与防,SWF加密和隐藏密匙

原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了。游戏通信产生的封包,内容是否可识别,可篡改,可重放,处理逻辑…

C++自动类型推导 : auto 与 decltype 用法

基本用法与区别 auto 总是推导出“值类型”,绝不会是“引用”,如果有引用,auto会把引用去掉,推导出值类型; auto 可以附加上 const、volatile、*、& 这样的类型修饰符,得到新的类型。 auto x 10L; // auto推导为…

C++智能指针使用指南 part1:基本使用

加粗样式>TOC 智能指针是代理模式的具体应用,它使用 RAII 技术代理了裸指针,能够自动释放内存, 无需程序员干预,所以被称为“智能指针”。 智能指针不是指针,而是一个对象,所以不要对其调用delete&…

AS3.0 BitmapData类介绍

注:文中的Bitmapdata和BMD均为同一意思BitmapData,BMD为其缩写一,概括: Bitmapdata继承Object对象,实现IBitmapDrawable接口,这个接口有什么用,你可以理解为Drawable,能被画。官方介绍是:IBitma…

C++使用JSON的序列化与反序列化

这里使用的json解析工具为JSON for Modern C,使用的话仅需要包含头文件。 获取方式:wget https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp JSON json的序列化功能和map一样,用关联数组的"[]"来任意添加数据&#xff0c…

iOS判断为空或者只为空格

本文转载至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 经常有需求 要判断不能为空,后台老是鄙视不做非空判断的前端 ,木办法 只能写一个。 第一种想法:我不就是判断 是不是nil就可以了么。结果发现太天…

Hyper-V

Hyper-V:也就是虚拟化技术,允许终端用户在同一台机器上运行多个操作系统,支持32位和64位系统,可以直接在Windows 8上创建自己的虚拟机。开启Hyper-V虚拟机需要更多的内存,正常运行需要至少4GB以上内存,所以…

sdut 1451 括号东东 DP

http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid1451 题意:中文..... 思路: pku有一道题,经典的括号匹配(区间DP)题目,那道题目是求的最长满足条件的子串的长度,那…

CDN缓存替代算法

CDN缓存工作过程如下:用户发出一个请求,如果请求被命中,缓存将对用户的请求进行响应,返回其请求的数据;如果未被命中,缓存向上拉取用户需要的数据,并对其存储的数据进行替换。 缓存算法的意义在…

前端开发常用正则表达式

1、电话 var phone /(^[^1][0-9\-]{6,20}$)|(^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|147|130|131|132|155|156|185|186|145|133|153|180|189|181|184)\d{8}$)/ 2、邮箱 var email /^([a-zA-Z0-9_.-])([a-zA-Z0-9_-])((\.[a-zA-Z0-9_-]{2,3}){1,…

android 中调用接口发送短信

转载:http://ziyu-1.iteye.com/blog/1013932 android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信;主要代码如下: Java代码//直接调用短信接口发短信 SmsManager smsManager SmsManager.getDefault(); List…

linux 命令案例学习——文件搜索

两个搜索文件的工具 locate ——仅仅通过文件名查找文件find ——依据文件的各种属性在既定目录(包括子目录)里查找一个通常与文件搜索命令一起使用、处理搜索结果文件列表的命令 xargs1 locate 1.1 查找文件名中含有zip的文件名 locate zip 看下结…

Redis 缓存击穿、缓存穿透、缓存雪崩的处理方法

常用的分布式缓存Redis单机并发量能达到万级,常用的关系型数据库MySQL一般并发量是千级,他们支持的并发量可能差十倍,所以要尽可能把流量拦截在缓存层。 缓存击穿 一个并发访问量比较大的key在某个时间过期,导致所有的请求直接打…

Java-- 异常与记录日志

可以使用java.util.logging工具将输出记录在日志中。记录日志的的功能还是很简单的,下面直接铺出代码: 1 package com.exceptions;2 3 import java.io.*;4 import java.util.logging.Logger;5 6 class LoggingException extends Exception{7 private…

图像处理基础

图像处理基础 在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。目前,大多数图像处理软件都支持这四种类型的图像。 (1) 二值图像:一幅二值图像的二维矩阵仅由0、1两个值构成&#x…

缓存一致性解决方法

对于缓存 数据库读写,有个经典的Cache Aside Pattern: 读取:先读取缓存,缓存里没有,读取数据库,然后返回响应,顺便保存缓存: 更新:先更新数据库,然后删除缓…

使用SpringMVC的表单验证

上一篇搭建了基本项目,这一篇在此基础上加入表单验证功能。 第一步,添加command类 Java代码 package test.bean; import javax.validation.constraints.Size; public class User { Size(min3,max30) private String username; …

hdu1247(Hat’s Words)

我以为像a、aa这样的输入应该是没有输出的,结果还是要输出aa。 建树的时候就是常规建树,不过查找的时候要做一些变形:对于一个单词,从第一位检查有没有单词是它的前缀,如果有的话,再去检查它的后半部分是不…

单体、分布式、微服务、Serverless软件架构一览

目录软件架构单体架构分布式应用微服务架构Serverless架构总结Reference软件架构 软件架构就是软件的基本结构,合适的架构是软件成功的最重要因素之一。这里列举了目前流行的4种软件架构。 单体架构 典型的三级架构:前端(web/手机端&#…