负载均衡及解决方案

目录

 

一、什么是负载均衡

二、负载均衡方案有几种?

1、基于DNS负载均衡

2、基于硬件负载均衡

3、基于软件负载均衡

三、常用的均衡算法有哪些?

1、轮询策略

2、负载度策略

3、响应策略

4、哈希策略


一、什么是负载均衡

早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求。随着现在互联网的流量越来越大,稍微好一点的系统,访问量就非常大了,并且系统功能也越来越复杂,那么单台服务器就算将性能优化得再好,也不能支撑这么大用户量的访问压力了,这个时候就需要使用多台机器,设计高性能的集群来应对。

那么,多台服务器是如何去均衡流量、如何组成高性能的集群的呢?

此时就需要请出 「负载均衡器」 入场了。

负载均衡(Load Balancer)是指把用户访问的流量,通过「负载均衡器」,根据某种转发的策略,均匀的分发到后端多台服务器上,后端的服务器可以独立的响应和处理请求,从而实现分散负载的效果。负载均衡技术提高了系统的服务能力,增强了应用的可用性。

(可以按照图中去理解,图片来源网络)
 

二、负载均衡方案有几种?

目前市面上最常见的负载均衡技术方案主要有三种:

  1.  基于DNS负载均衡
  2.  基于硬件负载均衡
  3.  基于软件负载均衡

三种方案各有优劣,DNS负载均衡可以实现在地域上的流量均衡,硬件负载均衡主要用于大型服务器集群中的负载需求,而软件负载均衡大多是基于机器层面的流量均衡。在实际场景中,这三种是可以组合在一起使用。下面来详细讲讲:

1、基于DNS负载均衡


这里写图片描述
(网络图片)

基于DNS来做负载均衡其实是一种最简单的实现方案,通过在DNS服务器上做一个简单配置即可。
其原理就是当用户访问域名的时候,会先向DNS服务器去解析域名对应的IP地址,这个时候我们可以让DNS服务器根据不同地理位置的用户返回不同的IP。比如南方的用户就返回我们在广州业务服务器的IP,北方的用户来访问的话,我就返回北京业务服务器所在的IP。

在这个模式下,用户就相当于实现了按照「就近原则」将请求分流了,既减轻了单个集群的负载压力,也提升了用户的访问速度。

使用DNS做负载均衡的方案,天然的优势就是配置简单,实现成本非常低,无需额外的开发和维护工作。
但是也有一个明显的缺点是:当配置修改后,生效不及时。这个是由于DNS的特性导致的,DNS一般会有多级缓存,所以当我们修改了DNS配置之后,由于缓存的原因,会导致IP变更不及时,从而影响负载均衡的效果。

另外,使用DNS做负载均衡的话,大多是基于地域或者干脆直接做IP轮询,没有更高级的路由策略,所以这也是DNS方案的局限所在。

2、基于硬件负载均衡


这里写图片描述
(网络图片)

硬件的负载均衡那就比较牛逼了,比如大名鼎鼎的 F5 Network Big-IP,也就是我们常说的 F5,它是一个网络设备,你可以简单的理解成类似于网络交换机的东西,完全通过硬件来抗压力,性能是非常的好,每秒能处理的请求数达到百万级,即 几百万/秒 的负载,当然价格也就非常非常贵了,十几万到上百万人民币都有。

因为这类设备一般用在大型互联网公司的流量入口最前端,以及政府、国企等不缺钱企业会去使用。一般的中小公司是不舍得用的。

采用 F5 这类硬件做负载均衡的话,主要就是省心省事,买一台就搞定,性能强大,一般的业务不在话下。而且在负载均衡的算法方面还支持很多灵活的策略,同时还具有一些防火墙等安全功能。但是缺点也很明显,一个字:贵。

3、基于软件负载均衡


这里写图片描述
(网络图片)

软件负载均衡是指使用软件的方式来分发和均衡流量。软件负载均衡,分为7层协议 和 4层协议。
网络协议有七层,基于第四层传输层来做流量分发的方案称为4层负载均衡,例如 LVS,而基于第七层应用层来做流量分发的称为7层负载均衡,例如 Nginx。这两种在性能和灵活性上是有些区别的。

基于4层的负载均衡性能要高一些,一般能达到 几十万/秒 的处理量,而基于7层的负载均衡处理量一般只在 几万/秒 。

基于软件的负载均衡的特点也很明显,便宜。在正常的服务器上部署即可,无需额外采购,就是投入一点技术去优化优化即可,因此这种方式是互联网公司中用得最多的一种方式。


三、常用的均衡算法有哪些?

上面讲完了常见的负载均衡技术方案,那么接下来咱们看一下,在实际方案应用中,一般可以使用哪些均衡算法?

  1. 轮询策略
  2. 负载度策略
  3. 响应策略
  4. 哈希策略

下面来分别介绍一下这几种均衡算法/策略的特点:

1、轮询策略

轮询策略其实很好理解,就是当用户请求来了之后,「负载均衡器」将请求轮流的转发到后端不同的业务服务器上。这个策略在DNS方案中用的比较多,无需关注后端服务的状态,只药有请求,就往后端轮流转发,非常的简单、实用。

在实际应用中,轮询也会有多种方式,有按顺序轮询的、有随机轮询的、还有按照权重来轮询的。前两种比较好理解,第三种按照权重来轮询,是指给每台后端服务设定一个权重值,比如性能高的服务器权重高一些,性能低的服务器给的权重低一些,这样设置的话,分配流量的时候,给权重高的更多流量,可以充分的发挥出后端机器的性能。

2、负载度策略

负载度策略是指当「负载均衡器」往后端转发流量的时候,会先去评估后端每台服务器的负载压力情况,对于压力比较大的后端服务器转发的请求就少一些,对于压力比较小的后端服务器可以多转发一些请求给它。

这种方式就充分的结合了后端服务器的运行状态,来动态的分配流量了,比轮询的方式更为科学一些。

但是这种方式也带来了一些弊端,因为需要动态的评估后端服务器的负载压力,那这个「负载均衡器」除了转发请求以外,还要做很多额外的工作,比如采集 连接数、请求数、CPU负载指标、IO负载指标等等,通过对这些指标进行计算和对比,判断出哪一台后端服务器的负载压力较大。

因此这种方式带来了效果优势的同时,也增加了「负载均衡器」的实现难度和维护成本。

3、响应策略

响应策略是指,当用户请求过来的时候,「负载均衡器」会优先将请求转发给当前时刻响应最快的后端服务器。
也就是说,不管后端服务器负载高不高,也不管配置如何,只要觉得这个服务器在当前时刻能最快的响应用户的请求,那么就优先把请求转发给它,这样的话,对于用户而言,体验也最好。

那「负载均衡器」是怎么知道哪一台后端服务在当前时刻响应能力最佳呢?
这就需要「负载均衡器」不停的去统计每一台后端服务器对请求的处理速度了,比如一分钟统计一次,生成一个后端服务器处理速度的排行榜。然后「负载均衡器」根据这个排行榜去转发服务。

那么这里的问题就是统计的成本了,不停的做这些统计运算本身也会消耗一些性能,同时也会增加「负载均衡器」的实现难度和维护成本。

4、哈希策略

Hash策略也比较好理解,就是将请求中的某个信息进行hash计算,然后根据后端服务器台数取模,得到一个值,算出相同值的请求就被转发到同一台后端服务器中。

常见的用法是对用户的IP或者ID进行这个策略,然后「负载均衡器」就能保证同一个IP来源或者同一个用户永远会被送到同一个后端服务器上了,一般用于处理缓存、会话等功能的时候特别好用。


感觉@不止思考负载均衡方案那部分总结的挺好的

原文地址 https://blog.csdn.net/jsjwk/article/details/82466989


http://www.niftyadmin.cn/n/1246050.html

相关文章

stc15w404as引脚图_用STC15W404AS+12864液晶做的甲醛酒精检测仪程序原理图

前段在本坛坛友那买了一个甲醛检测仪外加一个甲醛传感器模块,以及几个空气质量传感器,成品是给同事买的,传感器是买回来自己玩的,11月中旬开始写程序,到12月中旬写完,开始弄外壳,这不1月下旬了&…

golang string转int8_Go语言string,int,int64 ,float之间类型转换方法

(1)int转strings : strconv.Itoa(i)等价于s : strconv.FormatInt(int64(i), 10)(2)int64转stringi : int64(123)s : strconv.FormatInt(i, 10)第二个参数为基数,可选2~36注:对于无符号整形,可以使用FormatUint(i uint64, base int)(3)string转…

h5打开麦克风权限录音_HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能...

准备做一个网页版聊天界面,表情啊、图片啊、上传文件啊都应该要有,视频就算了,语音还是要的。本文记录的是在网页上用GitHub上的Recorder进行在线录音和上传到服务器。录音代码本示例代码支持PC、Android、IOS(仅Safari)中使用,如…

python 异常处理 实例_Python 异常处理的实例详解

与许多面向对象语言一样,Python 具有异常处理,通过使用 try...except 块来实现。Note: Python v s. Java 的异常处理Python 使用 try...except 来处理异常,使用 raise 来引发异常。Java 和 C 使用 try...catch 来处理异常,使用 th…

Nginx - 负载均衡就是那么简单

环境:Windows 10,IIS 10,ASP.NET MVC 5,nginx-1.19.10 目录 一、什么是Nginx? 二、什么是负载均衡? 三、下载Nginx 四、准备一个测试的项目 五、部署站点 六、Nginx搭建Web服务器集群 一、什么是Ngin…

hdl四位二进制计数器_用Verilog HDL设计一个4位BCD码计数器

2019-02-18 回答去年做过这个,给你我的程序你参考看看,能调的通。1.设计要求设计一个数字时钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且设置的时间显示要求闪烁。2.设计原理计数器在正常工作下…

最长公共上升子序列_LeetCode 1143. 最长公共子序列 题解

LeetCode 1143. 最长公共子序列解法:动态规划思路:最长公共子序列LCS是一道非常经典的字符串动态规划题,是许多变种题的基础,有必要将其作为一道模板题来使用。对于这道题,如果通过遍历所有可能,时间复杂度…

SQL Server 复制 - 搭建一个读写分离的数据库环境

环境:SQLServer 2016 随着时间的推移,用户量的增长,访问量暴增,单一的数据库服务器已经无法满足我们的要求,读写分离逐渐进入我们的视野。 读写分离是居于数据库的查询业务远多于增删改业务这个前提去做的。 就是一主…