负载均衡

集群与分布式应用的区别:

集群:将同一应用部署到多台机器上,就是集群。

分布式应用:如果是一个业务被拆分成多个子业务部署在不同的服务器上,就是分布式应用。

为什么使用集群?

当单服务器的性能无法满足业务需求时(或为解决单点故障),就需要设计高性能的集群来提升系统整体的处理能力。高性能集群的的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。

为什么使用负载均衡?

高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。因此需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法。而负载均衡就是为了解决统一入口以及任务分配。

负载均衡:将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

一、负载均衡原理

应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。

负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器急群众的可用服务器上去的设备)。

负载均衡的作用:

1、解决并发压力,提高应用处理性能;

2、提供故障转移,实现高可用;

3、通过添加或减少服务器数量,提供网站的伸缩性(水平扩展性);

4、安全防护(负载均衡设备上做一些过滤,黑白名单等处理)

二、负载均衡分类

根据实现技术不同,可分为DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡等。

1、DNS负载均衡

  最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。

负载均衡_第1张图片

优点:

 1)简单、成本低:负载均衡工作交给DNS服务器处理,无须自己开发或者维护负载均衡设备

2)就近访问,提升访问速度;解析时可以根据请求来源IP,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能。

缺点:

1)可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;

2)扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;

     维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)

实践建议

将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址,通过内部负载均衡将请求分发到真是的Web服务器上。一般用户互联网公司,负载的业务系统不合适使用。

负载均衡_第2张图片

2、HTTP重定向负载均衡(少见)

HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的服务器地址,并将真实的服务器地址写入HTTP重定向响应中(响应状态码302)返回给浏览器,然后浏览器再自动请求真实的服务器。

优点:简单

缺点:浏览器需要每次请求两次服务器才能完成一次访问,性能较差;使用HTTP302重定向,可能使搜索引擎判断为SEO作弊,降低搜索排名。重定向服务器自身的处理能力有可能称为瓶颈。因此再实际使用中并不多。

 

负载均衡_第3张图片

3、IP负载均衡

   在网络层通过修改请求目标地址进行负载均衡。用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为获得的真实IP地址,不需要经过用户进程处理。真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器再将数据包源地址修改为自身的IP地址,发送给用户浏览器。

负载均衡_第4张图片

优点:

(1)在内核进程完成数据分发,比在应用层分发性能更好;

(2)所有请求相应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽。

 

4、链路层负载均衡

在通信协议的数据链路层修改mac地址,进行负载均衡。数据分发时,不修改IP地址,只修改目标mac地址,配置真是物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。实际处理服务器IP和数据请求目的IP一致,不需要经过负载均衡服务器进行地址转换,可将相应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。

负载均衡_第5张图片

  优点:性能好;

   缺点:配置复杂;

  实践:DR模式时目前使用最广泛的一种负载均衡方式。

5、混合型负载均衡

   由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群再一次负载均衡或群集起来以一个整体想外界提供服务(即把这多个服务器群当作一个新的服务器群),从而达到最佳的性能。将这种方式称之为混合型负载均衡。

   此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。是目前大型互联网公司,普遍使用的方式。

   方式一:

负载均衡_第6张图片

以上模式适合有动静分离的场景,反向代理服务器(集群)可以起到缓存和动态请求分发的作用,当静态资源缓存再代理服务器时,则直接返回到浏览器。如果动态页面则请求后面的应用负载均衡(应用集群)。

  方式二:

负载均衡_第7张图片

以上模式,适合动态请求场景。

因混合模式,可以根据具体场景,灵活搭配各种方式,以上两种方式仅供参考。

三、负载均衡算法(策略)

 常用的负载均衡算法有:轮询,随机,最少链接,源地址散列,加权等方式;

1、轮询

将所有请求,依次分发到每台服务器上,适合服务器硬件同相同的场景。
优点:服务器请求数目相同;
缺点:服务器压力不一样,不适合服务器配置不同的情况;

2、随机

请求随机分配到各个服务器。
优点:使用简单;
缺点:不适合机器配置不同的场景;

3、最少链接

将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。
优点:根据服务器当前的请求处理情况,动态分配;
缺点:算法实现相对复杂,需要监控服务器请求连接数;

4、Hash(源地址散列)

根据IP地址进行Hash计算,得到IP地址。
优点:将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。
缺点:目标服务器宕机后,会话会丢失;

5、加权

在轮询,随机,最少链接,Hash’等算法的基础上,通过加权的方式,进行负载服务器分配。
优点:根据权重,调节转发服务器的请求数目;
缺点:使用相对复杂;

四、硬件负载均衡

采用硬件的方式实现负载均衡,一般是单独的负载均衡服务器,价格昂贵,一般土豪级公司可以考虑,业界领先的有两款,F5和A10。
使用硬件负载均衡,主要考虑一下几个方面:
(1)功能考虑:功能全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡;
(2)性能考虑:一般软件负载均衡支持到5万级并发已经很困难了,硬件负载均衡可以支持
(3)稳定性:商用硬件负载均衡,经过了良好的严格的测试,从经过大规模使用,在稳定性方面高;
(4)安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙,防DDOS攻击等安全功能;
(5)维护角度:提供良好的维护管理界面,售后服务和技术支持;
(6)土豪公司:F5 Big Ip 价格:15w~55w不等;A10 价格:55w-100w不等;
缺点
1)价格昂贵;
2)扩展能力差;

五、软件负载均衡

 常用的软件负载均衡软件有Nginx,Lvs,HaProxy等。

Nginx负载均衡

Nginx是一款轻量级的web服务器/反向代理服务器,工作再七层http协议的负载均衡系统。具有高性能、高并发、低内存使用等特点。是一个轻量级的http和反向代理服务器。Nginx使用epoll and kqueue作为开发模型。能够支持高达50000个并发连接数的响应。

均衡策略

nginx的负载均衡测率可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和IP hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、通用hash、consistent hash 等,默认不编译进nginx内核。

   加权轮询:轮询的基本流程:

负载均衡_第8张图片

   图中有两点需要注意,第一,如果可以把加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;第二,当所有后端机器都down掉时,nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态,从而导致震哥哥前端被夯住。

ip hash

ip hash是nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是其中的算法和具体的策略有些变化,如下图所示:

负载均衡_第9张图片

Nginx一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用。

入口负载均衡架构

Ngnix服务器在用户访问的最前端。根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)

内部负载均衡架构

负载均衡_第10张图片

 

LVS作为入口负载均衡,将请求转发到二级Ngnix服务器,Ngnix再根据请求转发到具体的应用服务器。

Ngnix高可用

负载均衡_第11张图片

 

分布式系统中,应用只部署一台服务器会存在单点故障,负载均衡同样有类似的问题。一般可采用主备或负载均衡设备集群的方式节约单点故障或高并发请求分流。
Ngnix高可用,至少包含两个Ngnix服务器,一台主服务器,一台备服务器,之间使用Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。
DNS解析公网的IP实际为VIP。
 

你可能感兴趣的:(框架)