一、负载均衡介绍

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. Grafana监控Oracle数据库的表大小等信息

    Grafana监控Oracle数据库的表大小等信息 方案 oracledb_exporter 以及 prometheus grafana 使用的SQL以及配置文件 [[metric]] context ...

  2. [转帖]深入理解mysql-第五章 InnoDB记录存储结构-页结构

    前言: 页是InnoDB管理存储空间的基本单位,上一章我们主要分析了页中的主要的构成行的存储结构-行格式,其中简单提了一下页的概念.这章我们详细讲解一下页的存储结构. 一.数据页结构 前边我们简单提了 ...

  3. [转帖]关于Linux操作系统中LUN的队列深度(queue_depth)

    Linux中的queue_depth(队列深度),可以用lsscsi查看. 不过今天在我的vm 虚拟机环境中(无外界存储),是没有lsscsi命令. 不过,从网上,搜到了如下的信息: $ lsscsi ...

  4. [转帖]五类IP的范围

    五类IP的范围 IP地址分为A,B,C,D,E五类. 网络号:用于识别主机所在的网络:  主机号:用于识别该网络中的主机. 其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用.这 ...

  5. [转帖]台积电3nm成功量产,稳了吗?

    https://docs.pingcode.com/info/13836.html?p=13836 2023-01-19 资讯 21 原标题:台积电3纳米成功量产:未来与三星仍将决战鳍式场效晶体管(F ...

  6. 微软Windows Sever系统也将强制要求TPM及CPU兼容

    https://www.cnbeta.com/articles/tech/1238647.htm 去年微软推出Win11系统时,TPM安全模块以及Intel 8代酷睿/AMD锐龙2代及以上的硬件要求引 ...

  7. VOP 消息仓库演进之路|如何设计一个亿级企业消息平台

    作者:京东零售 李孟冬 VOP作为京东企业业务对外的API对接采购供应链解决方案平台,一直致力于从企业采购数字化领域出发,发挥京东数智化供应链能力,通过产业链上下游耦合与链接,有效助力企业客户的成本优 ...

  8. Vue基础系列文章10---单文件组件

    1.单文件组件的结构 <template> <!--这里用于定义VUE组件的模块内容--> <dvi> <h1>这是 APP 根组件</h1> ...

  9. 通过Unity导出的Android Studio和Google安卓原生工程的结构图对比

    使用Unity导出Android Studio工程前建议查看我之前的文章<Unity2019及Unity2020打包android的环境配置>,替换或修改Unity安装目录下的basePr ...

  10. 从零开始配置vim(20)——模糊查询

    在讲解vim的基础功能的时候,介绍过了vim的各种查询技巧,在同一个文件中进行搜索的话,那些技巧很有用.在多个文件中我们介绍了使用vim自带的 :grep命令进行搜索,使用quickfix 列表进行跳 ...