`

【转】Round-Robin负载均衡算法及其实现原理

 
阅读更多

Round-Robin负载均衡算法及其实现原理

作者:潘风文出处:IT专家网2008-04-18 12:00
 

  【IT专家网独家】概述

  毫无疑问,随着互联网、移动网络接入成本的降低,互联网正在日益深入地走入我们的生活,越来越成为人们获取信息的高效平台,ICP行业也顺势呈现出强劲的成长趋势,成为互联网迅猛发展形势下最大的受益者,也直接促成了从web1.0到web2.0以及社区、博客、视频等一系列互联网时代的更迭和运营模式的变动。

  但是随着各站点访问量和信息交流量的迅猛增长,如何使用最小的资源成本,提高网络的效率,最优化用户体验,已经成为网络管理人员不得不面对的挑战。

  从技术上讲,就是ICP行业面临的网络资源有效利用问题,也就是如何进行对网络的访问分流,以便能够快速响应用户反应,即:负载均衡。

  从这篇文章起,我们将讲述在负载均衡技术实现中的核心技术:负载均衡算法(算法)的原理及其实现,使大家对负载均衡底层技术有一个深刻的了解。这些算法是负载均衡设备中的核心实现基础。

  本篇文章先讲述轮询调度算法 (Round-Robin)及其在此基础上改进型的权重轮询算法 (Weighted Round-Robin)。

  轮询调度算法(Round-Robin Scheduling)

  轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。

  算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

  轮询调度算法流程

  假设有一组服务器N台,S = {S1, S2, …, Sn},一个指示变量i表示上一次选择的服务器ID。变量i被初始化为N-1。其算法如下:

 

j = i;

do

{

j = (j + 1) mod n;

i = j;

return Si;

} while (j != i);

return NULL;

 

  这种算法的逻辑实现如图1所示:

  轮询调度实现逻辑图

                                             图1 轮询调度实现逻辑图示

  轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。

  所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。

 权重轮询调度算法(Weighted Round-Robin Scheduling)

  上面所讲的轮询调度算法并没有考虑每台服务器的处理能力,在实际情况中,可能并不是这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

  权重轮询调度算法流程

  假设有一组服务器S = {S0, S1, …, Sn-1},W(Si)表示服务器Si的权值,一个指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大公约数。变量i初始化为-1,cw初始化为零。其算法如下:

 

while (true) {

  i = (i + 1) mod n;

  if (i == 0) {

     cw = cw - gcd(S);

     if (cw <= 0) {

       cw = max(S);

       if (cw == 0)

         return NULL;

     }

  }

  if (W(Si) >= cw)

    return Si;

}

 

  这种算法的逻辑实现如图2所示,图中我们假定四台服务器的处理能力为3:1:1:1。

  权重轮询调度实现逻辑图

                                        图2 权重轮询调度实现逻辑图示

  由于权重轮询调度算法考虑到了不同服务器的处理能力,所以这种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。所以,在实际应用中比较常见。

  总结

  轮询调度算法以及权重轮询调度算法的特点是实现起来比较简洁,并且实用。目前几乎所有的负载均衡设备均提供这种功能。

分享到:
评论

相关推荐

    负载均衡原理及算法解析

    基于IP哈希的负载均衡算法是一种特殊类型,它将请求根据客户端IP地址的哈希值分配到特定的服务器上。这种算法保证了来自同一个客户端的所有请求都会被发送到相同的服务器上,有助于维持会话的一致性和状态管理。例如...

    负载均衡实验手册

    - Lab#1 - Round Robin负载均衡算法 - Lab#2 - Ratio Member负载均衡算法 ##### Module 4 - Monitors (服务器健康检查) - **主要内容**:介绍如何配置服务器监控策略。 ##### Module 5 - Persistence (会话保持...

    waighted-round-robin.rar_tcl/tk_

    "Weighted Round Robin"(加权轮询)是一种常见的调度策略,它在分布式系统、网络负载均衡和操作系统内核中广泛使用。这里我们将深入探讨加权轮询的概念以及在Tcl/Tk环境中如何实现这一算法。 加权轮询(Weighted ...

    F5 负载均衡实施方案

    - **负载均衡算法**:如轮询(Round Robin)、最少连接(Least Connections)等。 - **NAT(Network Address Translation)**:用于转换内网地址为公网地址。 - **SNAT(Source NAT)**:特别适用于需要固定源地址的...

    使用负载均衡技术建设高负载的网络站点

    负载均衡算法是负载均衡系统的核心组成部分之一,其选择与配置直接影响着系统的性能表现。常见的负载均衡算法包括但不限于: - **轮询(Round Robin)**:按照顺序依次将请求分配给后端服务器。 - **最少连接数...

    硬件负载均衡设备介绍.docx

    硬件负载均衡设备及其相关技术是现代互联网架构中不可或缺的部分。通过合理的负载均衡策略和技术选择,不仅能够显著提升系统的稳定性和响应速度,还能有效降低运维成本,为企业提供强有力的支持。了解这些基础知识和...

    第五讲LVS调度策略及负载均衡原理深入.pptx

    ### LVS调度策略及负载均衡原理深入解析 #### 一、LVS调度策略概述 ...通过对以上内容的深入学习,可以更好地理解LVS调度策略及其背后的负载均衡原理,为实际工作中设计和实施高效稳定的系统提供有力支持。

    PHP实现负载均衡的加权轮询

    加权轮询(Weighted Round Robin,简称WRR)是一种常见的负载均衡算法,它根据每个服务器的处理能力或权重来决定流量的分配比例。 #### 加权轮询算法原理 加权轮询算法基于简单的轮询机制进行改进,为每个服务器...

    Nginx反向代理与负载均衡

    Nginx 支持多种负载均衡算法,可以根据实际需求选择合适的策略。 - **应用场景**:负载均衡主要用于提高网站或应用程序的访问速度和响应效率,同时也能有效防止单点故障。 #### 二、Nginx 原理 Nginx 之所以能够...

    ip_vs_wrr.rar_Weighted Round Robin

    加权轮询调度算法基于普通的轮询调度,但为每个服务器分配了不同的权重,使得处理能力强的服务器能接受更多的连接,从而实现负载均衡。这里的“权重”是一个整数值,表示服务器处理能力的相对大小。权重高的服务器在...

    Nginx+Keepalived

    在Nginx中,可以通过以下几种算法实现负载均衡: - **轮询(round-robin)**:是最常用的负载均衡策略之一,按照顺序将请求轮流分配给后端服务器。 - **加权轮询(weighted round-robin)**:根据服务器的处理能力为每...

    LVS实例讲解及分析

    - **负载均衡的关键技术**:主要包括轮询(Round Robin)、最少连接(Least Connections)、IP哈希(IP Hash)等策略,以及更高级的健康检查机制,确保只有状态良好的服务器才能接收新的请求。 - **应用场景**:广泛应用于...

    lvs搭建过程详解

    通过以上内容,我们可以了解到LVS的原理、工作模式、调度算法及其在实际应用中的部署和优势。在搭建LVS时,根据具体的业务需求和网络环境,选择合适的工作模式和调度算法,是实现高效、稳定负载均衡的关键。

    对网卡的介绍以及原理

    - **Mode 0 (Round-robin)**: 负载均衡模式,所有活动的端口共享流量,每个端口轮流发送数据包。 - **Mode 1 (Active-backup)**: 主备模式,只有一个主端口处于活动状态,当主端口发生故障时,备用端口自动接管。 ...

    服务器多网卡绑定与交换机链路聚合对接探讨.docx

    - **特点**:在二层网络中使用XOR算法,在三层网络中使用Round Robin算法。 - **交换机配置**:根据实际应用场景配置相应的链路聚合模式。 #### 五、总结 通过对Linux下的多网卡绑定模式及其交换机配置策略的...

    微软面试题 好东西大家一起分享

    - **调度算法**:FCFS、SJF、Priority、Round Robin等。 3. **计算机网络**: - **TCP/IP协议栈**:了解应用层、传输层、网络层和数据链路层的主要协议。 - **HTTP与HTTPS**:请求响应模型、状态码、加密机制等...

    LVS脚本语言

    - **添加服务规则**:通过`ipvsadm`命令添加服务规则,这里的服务监听端口为9000,调度算法为RR(Round Robin)。 - **添加真实服务器**:添加两台真实服务器,其IP分别为192.168.0.45和192.168.0.82,使用`ipvsadm`...

Global site tag (gtag.js) - Google Analytics