本文讲述实现负载均衡的常用算法。

轮询法(Round Robin)

轮询法是负载均衡中最常用的算法,它容易理解也容易实现。
轮询法是指负载均衡服务器(load balancer)将客户端请求按顺序轮流分配到后端服务器上,以达到负载均衡的目的。
假设现在有6个客户端请求,2台后端服务器。当第一个请求到达负载均衡服务器时,负载均衡服务器会将这个请求分派到后端服务器1;当第二个请求到害时,负载均衡服务器会将这个请求分派到后端服务器2。然后第三个请求到达,由于只有两台后端服务器,故请求3会被分派到后端服务器1。依次类推,其示意图如图1所示。


图1:轮询法负载均衡

加权轮询法(Weighted Round Robin)

简单的轮询法并不考虑后端机器的性能和负载差异。给性能高、负载低的机器配置较高的权重,让其处理较多的请求;而性能低、负载高的机器,配置较低的权重,让其处理较少的请求。加权轮询法可以很好地处理这一问题,它将请求顺序且按照权重分派到后端服务器。
假设有6个客户端请求,2台后端服务器。后端服务器1被赋予权值5,后端服务器2被赋予赋予权值1。这样一来,客户端请求1,2,3,4,5都被分派到服务器1处理;客户端请求6被分派到服务器2处理。接下来,请求7,8,9,10,11被分派到服务器1,请求12被分派到服务器2,依次类推。这个请求分派的过程可以用图2来表示。


图2:加权轮询法负载均衡

最小连接数法(Least Connections)

即使后端机器的性能和负载一样,不同客户端请求复杂度不一样导致处理时间也不一样。最小连接数法根据后端服务器当前的连接数情况,动态地选取其中积压连接数最小的一台服务器来处理当前的请求,尽可能提高后端服务器的利用效率,合理地将请求分流到每一台服务器。
为什么根据连接数可以合理地利用服务器处理请求呢?
考虑一个客户端请求的处理逻辑较复杂,需要服务器的处理时间较长,由于客户端需要等待服务器的响应,故需要保持与服务器的连接,这样一来,客户端就需要与服务器保持较长时间的连接。
假设客户端请求1,2,3,4,5已被分派给服务器1和服务器2,其分派的情况如图3所示:


图3:最小连接法示意图(1)

此时,服务器上的请求1,请求3已处理完毕,与客户端的连接已断开。而请求2,4,5还在服务器上处理,即服务器还保持与这些请求的客户端的连接。
如果再把请求分派到服务器2,则会导致服务器的请求更多,服务器2的负载更高。如果考虑服务器的连接数,当前服务器1的连接数为1,服务器2的连接数为2,将请求分派到服务器1,则负载相对均衡。采用最小连接数法的分派方法如图4所示:


图4:最小连接法示意图(2)

随机法(Random)

随机法也很简单,就是随机选择一台后端服务器进行请求的处理。由于每次服务器被挑中的概率都一样,客户端的请求可以被均匀地分派到所有的后端服务器上。

源地址哈希法(Source Hashing)

源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
如果后端服务器是一缓存系统,当后端服务器增加或者减少时,采用简单的哈希取模的方法,会使得命中率大大降低,这个问题可以采用一致性哈希的方法来解决。
关于一致性哈希的介绍,可以参考文件 一致性Hash(Consistent Hashing)原理剖析

参考资料

    1. http://www.jscape.com/blog/load-balancing-algorithms
    2. 大型网站技术架构——核心原理与安全分析,李智慧著,电子工业出版社
    3. http://www.cnblogs.com/SmartLee/p/5161415.html
    4. http://blog.csdn.net/lihao21/article/details/54193868

注:转载自https://leehao.me

负载均衡(Load Balancing)学习笔记(三)的更多相关文章

  1. 网络结构设计——负载均衡之LVS学习笔记(三)

    LVS按个人理解的说就是将一台Linux服务器当作路由器等功能的技术.LVS---Linux虚拟服务器. LVS实现了三种IP负载均衡技术VS/NAT.VS/TUN.VS/DR. 今天简单分享一下我在 ...

  2. 网络结构设计——负载均衡之LVS学习笔记(四)

    LVS按个人理解的说就是将一台Linux服务器当作路由器等功能的技术.LVS---Linux虚拟服务器. LVS实现了三种IP负载均衡技术VS/NAT.VS/TUN.VS/DR. 今天简单分享一下我在 ...

  3. 网络结构设计——负载均衡之LVS学习笔记(二)

    LVS按个人理解的说就是将一台Linux服务器当作路由器等功能的技术.LVS---Linux虚拟服务器. LVS实现了三种IP负载均衡技术VS/NAT.VS/TUN.VS/DR. 今天简单分享一下我在 ...

  4. CDN之多边缘节点负载均衡--学习笔记

    一.剧情 剧情是这样的,本次的多边缘节点负载均衡实验,1个LVS四层负载均衡集群和1个Nginx为反向代理的七层负载均衡集群,由Bind dns解析作为 主负载均衡服务器,调度两个集群,中间层有一台W ...

  5. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

  6. Oracle RAC 服务器端连接负载均衡(Load Balance)

    Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到 ...

  7. 【高可用HA】Apache (4) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk httpd版本: httpd-2.4.17 jk版本: tomcat-connectors-1.2.41 参考 ...

  8. 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy httpd版本: httpd-2.4.17 参考来源: Apache (1) -- Mac下安装Apac ...

  9. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  10. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

随机推荐

  1. java多线程并发控制countDownLatch和cyclicBarrier的使用

    java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用 ...

  2. 搭建laravel到nginx

    一.laravel的安装 搭建的第一步当然是安装好laravel,这里推介composer安装,由于国内的问题,极其推介使用国内的镜像去搭建,我在终端里本已经设置好常规的https和http之类的FQ ...

  3. MySQL进程-状态等参数详解

    查看连接 mysql -uroot -p123456 -e "show processlist;" 查看正在执行的sql语句 mysql -uroot -p123456 -e &q ...

  4. 【K8S学习笔记】Part1:使用端口转发访问集群内的应用

    本文介绍如何使用kubectl port-forward命令连接K8S集群中运行的Redis服务.这种连接方式有助于数据库的调试工作. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同 ...

  5. PPT定时器小记

    在日常会议汇报中,往往会出现超时的情况.此时需要一种优雅提醒讲演者加快速度的方式.PPT定时器就是其中的一种方法. ppttimer,一款在GitHub上发布的开源软件,基本能满足我在本项工作中的需求 ...

  6. mongorestore 一次踩雷

    1.在做mongodb备份后,研发突然有个需求说先看一下昨天备份里面的数据,进行一下核实.因为那部分数据今天已经删除,由于使用---gzip.--archive做的备份,所以必须导入到同名的数据库里面 ...

  7. Charm Bracelet(01背包问题)

    题目链接: https://vjudge.net/problem/POJ-3624 题目描述: Bessie has gone to the mall's jewelry store and spie ...

  8. [JSOI 2007]字符加密Cipher

    Description 题库链接 给你一个长度为 \(n\) 的字符串,首尾相接依次断开每个断点可以得到 \(n\) 个长度为 \(n\) 的字符串,将其排序按序输出每个字符串的最后一个字母. \(1 ...

  9. C# an error has occurred while updating the entries.see the log file

    message:An error occurred while updating the entries. See the inner exception for details. C# 在执行插入方 ...

  10. winform窗体 小程序【登录窗体】【恶搞程序】

    登录窗体 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; ...