一、负载均衡介绍

1.1 什么是负载均衡

负载均衡(load balancing)

它是计算机的一种技术,用来在计算机集群、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。-来自 wikipedia

负载均衡主要作用是将多个连接或作业合理的分配到多个操作单元上执行,用于解决互联网中高可用和高并发问题。

在互联网应用程序服务中,负载均衡就是一种合理分配网络流量到你后端执行程序的一种方法。

后端有多个相同程序提供服务,负载均衡器就可以把多个客户端请求合理分配给后端服务器(应用程序在服务器里)。

负载均衡器就像餐厅的前台接待员,客人来了后,接待员就把客人引导到合适的台桌和座位上,后续的服务员在为客户提供服务。

1.2 负载均衡作用

扩展性

你可以使用负载均衡器在多个服务器之间均衡的调度访问流量。

你还可以添加或删除你的后端服务器,只需要把这台服务器的信息告诉负载均衡器。你可以放心扩展你的服务器。

可以同时应对访问的流量高峰或流量低谷。

高可用性

第一:负载均衡器后面有多台服务器,如果其中一台服务器故障了,还有其它服务器可以提供后端服务。

第二:当你的应用程序升级或服务器需要维护时,不需要停机,因为前面有负载均衡器,可以帮你摘除没有提供服务的服务器。

第三:负载均衡器还可以帮你检查后端服务健康情况,服务不可用时,可以摘除这个服务,等到服务可用后,又可以添加这个服务。

性能

负载均衡器可以提高后端服务程序性能。

它可以把访问负载按照一定方式分配到后端不同服务器,以此来提高服务程序性能。

这个不同的方式指的是按照什么算法什么策略。

它也可以定位到较近的服务器以减少网络延迟。

二、负载均衡算法

最常用的 Web 服务器 Nginx,我们经常拿它作为 web 服务器的负载均衡器使用。

负载均衡有哪些算法呢?下面介绍,

2.1 轮询算法RoundRobin

轮询算法就是按照循环的方式来访问后端服务器。

比如上面有 3 台后端服务器,这种算法就是按照服务器1,服务器2,服务器3 依次轮询一台服务器提供服务。

2.2 加权轮询算法

因为每台服务器可能性能不同、网络带宽不同,那性能好的服务器就可以多提供些访问服务,性能差的就少提供。

那怎么做?可以加一个权重指标,来标识服务器访问性能好坏。权重较高,表示服务器性能好,就多接收一些访问流量。权重低的就少接收访问流量。

比如在 Nginx 里,weight 就表示权重,weight 值越大表示权重越高,那么后端服务器就可以多接收访问流量。

平均加权轮询算法:

每个服务器对应 2 个权重,为 weight 和 currentWeight,weight 是固定,而 currentWeight 动态调整,初始值为 0。

2.3 随机选择算法Random

随机选择算法就是随机性的选择一台后端服务器提供服务。

比如有 3 台服务器 1、2、3,每一次选择有可能是 1,也可能是 2,也可能是 3,每次选择都是随机的。

随机数也可以加个权重。

2.4 最少连接数

最少连接数算法,就是负载均衡器将检查后端哪些服务器的活跃连接数最少,就将访问流量发送给这些服务器。

这个活跃连接数一般就是指 TCP 连接数。

2.5 哈希算法hash

哈希算法一般有:ip 哈希,url 哈希,hash算法,一致性hash算法等算法。

2.6 最短响应时间

最短响应时间就是将服务器的响应时间和活跃连接数结合起来,用来确定一个最佳的服务器。

2.7 Power of Two Choices

Nginx 在 1.15.1 中增加了这种新的负载均衡算法 Power of Two Choices。

简单理解就是随机从所有可用节点中选择两个节点,然后计算这2个节点负载情况,计算出一个负载较低的服务器,就选择这台服务器处理本次请求。

具体可以看这篇文章:nginx-power-of-two-choices-load-balancing-algorithm

算法论文地址:The Power of Two Random Choices: A Survey of Techniques and Results

三、负载均衡类型

3.1 四层负载和七层负载

这四层负载和七层负载是指在 OSI 七层网络模型。越往上越接近软件,越往下越接近硬件。

四层负载:在 OSI 七层模型来看,它工作在 TCP 传输层

七层负载:在 OSI 七层模型看,它工作在应用层

3.2 软件负载和硬件负载

软件负载:Nginx、HAproxy 和 LVS

Nginx 工作在七层,OSI 网络模型的第七层应用层。

HAproxy 也是工作在七层,支持七层的负载规则。

LVS 它允许在 linux 内核态,工作在传输层和网络层,软件负载均衡中性能最高。

Nginx 作为负载均衡器代理后端应用服务集群,示意图:

软件负载均衡虽然比硬件负载性能差些,但是对于一般应用基本够用。而且它还便于操作,免费,可以灵活配置。

硬件负载:F5、Array 和 NetScaler

它工作在四层。功能强大,可以支持各种负载均衡算法。性能强大,可以支持百万以上并发。比软件负载均衡性能更好。

缺点就是很贵,一台普通F5得10多万,好点要尽百万。

3.3 应用程序、网络、DNS负载

应用程序负载均衡:

应用程序负载均衡就是负载均衡器查看请求内容,比如 HTTP 头或会话 ID ,然后重新定向这个请求的流量。

网络负载均衡:

网络负载均衡就是查看 IP 地址和其他网络信息,然后根据这些信息来定向这个请求流量。

DNS 负载均衡:

域名就是由 DNS 服务器解析成 IP,然后通过 IP 定位到提供服务的服务器。DNS 可以做 全局负载均衡 - 地理位置和数据机房级别的负载均衡。

DNS 的缺点: 修改 DNS 解析规则后,解析不能马上生效,因为它有缓存。为了改进这个缺点,可以用 HTTPDNS。

HTTPDNS 也有缺点:它不像 DNS 是一个标准协议,不通用。不适合 web 业务,因为 web 中的 DNS 解析是由浏览器解析的,不容易控制。所以 HTTPDNS 一般多用于 APP 应用、客户端应用,这种可以完全掌控的应用。

四、多级负载均衡

LVS + Nginx 多级负载均衡

  • 两台 LVS 在四层负载均衡,可以组成主备或双主结构
  • 后面的 Nginx 可以组成负载集群,可以横向扩展。一台 Nginx 负载均衡不可用,还有其它的 Nginx 可用,可用性更高
  • 后面的应用服务器集群也可以横向扩展

DNS + Nginx 多级负载均衡

根据地址位置进行负载均衡。由 DNS 解析出 IP 地址,根据 IP 地址计算出地理位置,然后导向相应地理位置的 Nginx 负载均衡集群。

比如一家公司在北京和深圳设有 2 地数据中心,华北相关地方访问北京数据中心,华南相关地方访问深圳数据中心。

这家公司就可以根据用户访问 IP 地址计算出用户相应地理位置,然后根据地理位置访问对应最近的数据中心。

五、参考

负载均衡load balancing和算法分类概要介绍的更多相关文章

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

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

  2. 【高可用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 ...

  3. nignx 负载均衡的几种算法介绍

    负载均衡,集群必须要掌握,下面介绍的负载均衡的几种算法.   1 .轮询,即所有的请求被一次分发的服务器上,每台服务器处理请求都相同,适合于计算机硬件相同.   2.加权轮询,高的服务器分发更多的请求 ...

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

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

  5. 浅析负载均衡的6种算法,Ngnix的5种算法。

    浅析负载均衡的6种算法,Ngnix的5种算法.浮生偷闲百家号03-21 10:06关注内容导读其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果.源地址哈希的思想是根据获取客 ...

  6. "高可用方案工具包" high availability toolkit 1.2 公布了。version 1.2 新增了 负载均衡 load balance 的技术实现

    "高可用方案工具包"  high availability toolkit 1.2 公布了. version 1.2 新增了 负载均衡 load balance 的技术实现. 项目 ...

  7. 【高可用HA】Nginx (1) —— Mac下配置Nginx Http负载均衡(Load Balancer)之101实例

    [高可用HA]Nginx (1) -- Mac下配置Nginx Http负载均衡(Load Balancer)之101实例 nginx版本: nginx-1.9.8 参考来源: nginx.org [ ...

  8. 【高可用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 参考 ...

  9. 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国

    案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...

  10. 负载均衡的几种算法Java实现代码

    轮询 package class2.zookeeper.loadbalance; import java.util.ArrayList; import java.util.HashMap; impor ...

随机推荐

  1. [转帖]CentOS 8已经停止维护,怎么检查CentOS的版本

    https://rumenz.com/rumenbiji/centos-check-version.html CentOS 8 在2021年12月31日停止更新并停止维护(EOL). CentOS 7 ...

  2. [转帖]nginx的luajit安装luarocks并安装luafilesystem

    nginx的luajit安装luarocks并安装luafilesystem by admin on 2015-07-11 08:05:23 in , 69次 标题有点绕口.我尽量把关键词都贴进去.之 ...

  3. [转帖]nacos开启强鉴权

    注意 Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险. Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系. 如果 ...

  4. openEuler technical-certification

    https://gitee.com/meitingli/technical-certification/ 介绍 存放openEuler技术测评相关的文档,包括技术测评标准.流程.指导性文档等 技术测评 ...

  5. 在web中,用户输入的文字过多 和页面排版一行显示不下 怎么办

    在写管理系统中, 如果用户在input中,表单输入过多,应该如何去处理 常用的解决办法是: 1==>用户只能够输入一定范围内的字数 2==>超出几个字后(宽度)使用省略号显示. 3==&g ...

  6. 临上线项目使用ILRuntime热更

    前言 我们有一个用Unity引擎开发了二十个月的mmo arpg手游项目,在安卓已经测试三轮了,出于IOS的热的考虑且结合我们的情况:全部代码都是纯C#开发非Lua,所以计划使用ILRuntime热更 ...

  7. ​【心理学CPCI收录,AP独立出版】 2023年应用心理学与现代化教育国际学术会议(ICAPME 2023)

    ​[心理学CPCI收录,AP独立出版] 2023年应用心理学与现代化教育国际学术会议(ICAPME 2023) 大会官网:www.icapme.org 大会时间:2023年9月22-24日 大会地点: ...

  8. el-tree只展示前三个节点数据

    后端也返回了第四等级,但是不想让他展示,可以这样解决只展示前三等级 // 获取room树 getRoomTreeList() { getRoomTree().then((res) => { // ...

  9. 小样本学习在文心ERNIE3.0多分类任务应用--提示学习

    小样本学习在文心ERNIE3.0多分类任务应用(提示学习) 项目链接: https://aistudio.baidu.com/aistudio/projectdetail/4438610?contri ...

  10. PE结构:VA&RVA&FOA 转换复习

    复习一下,不然会忘 1.imagebase 映像基地址 ,默认是0x400000 2.va 虚拟地址,载入OD后的地址,已经映射到内存的地址. 计算实际装入地址 VA imagebase (映像基址) ...