文档介绍:该【大型网站架构系列负载均衡详解资料 】是由【春天资料屋】上传分享,文档一共【27】页,该文档可以免费在线阅读,需要了解更多关于【大型网站架构系列负载均衡详解资料 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。《大型网站架构系列:负载平衡详解(上)》
面对大量用户接见、高并发央求,海量数据,能够使用高性能的服务器、大型数据库,储藏设备,高
性能Web服务器,采用高效率的编程语言比方(Go,Scala)等,当单机容量达到极限时,我们需要考
虑业务拆分和分布式部署,来解决大型网站接见量大,并发量高,海量数据的问题。
从单机网站到分布式网站,很重要的差别是业务拆分和分布式部署,将应用拆分后,部署到不一样的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和接见一致入口问题,为解决单点故障,我们能够采用冗余的方式。将同样的应用部署到多台机器上。解决接见一致入口问题,我们能够在集群前面增加负载平衡设备,实现流量发散。
负载平衡(LoadBalance),意思是将负载(工作任务,接见央求)进行平衡、分摊到多个操作单
元(服务器,组件)进步行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
本文是负载平衡详解的第一篇文章,介绍负载平衡的原理,负载平衡分类(DNS负载平衡,HTTP负
载平衡,IP负载平衡,链路层负载平衡,混杂型P负载平衡)。部分内容摘自读书笔录。
一、负载平衡原理
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度经过增加硬件
办理能力,比方CPU办理能力,内存容量,磁盘等方面,实现服务器办理能力的提升,不能够满足大
型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,经过增加机器来满足大型网站服务的办理能力。比方:一台机器不能够满足,则增加两台也很多台机器,共同肩负接见压力。这就是典型的集群和负载平衡架构:以以下图:
应用集群:将同一应用部署到多台机器上,组成办理集群,接收负载平衡设备发散的央求,进行办理,并返回相应数据。
负载平衡设备:将用户接见的央求,依照负载平衡算法,发散到集群中的一台办理服务器。(一种把网络央求分别到一个服务器集群中的可用服务器上去的设备)
负载平衡的作用(解决的问题):
解决并发压力,提升应用办理性能(增加吞吐量,加强网络办理能力);
供应故障转移,实现高可用;
经过增加或减少服务器数量,供应网站伸缩性(扩展性);
安全防范;(负载平衡设备上做一些过滤,黑白名单等办理)
二、负载平衡分类
依照实现技术不一样,可分为DNS负载平衡,HTTP负载平衡,IP负载平衡,链路层负载平衡等。
最早的负载平衡技术,利用域名解析实现负载平衡,在DNS服务器,配置多个A记录,这些A记
录对应的服务器组成集群。大型网站总是部分使用DNS解析,作为第一级负载平衡。以以下图:
优点
1.
使用简单:负载平衡工作,交给DNS服务器办理,省却了负载平衡服务器保护的麻烦
2.
3.
4.
提升性能:能够支持基于地址的域名解析,解析成距离用户近来的服务器地址,能够加快接见速度,改进性能;
5.
缺点
1.
可用性差:DNS解析是多级解析,新增/更正DNS后,解析时间较长;解析过程中,用户接见网站
将失败;
2.
3.
4.
扩展性低:DNS负载平衡的控制权在域名商那处,无法对其做更多的改进和扩展;
5.
6.
7.
保护性差:也不能够反响服务器的当前运行状态;支持的算法少;不能够划分服务器的差别(不能够依照系统与服务的状态来判断负载)
8.
实践建议
将DNS作为第一级负载平衡,A记录对应着内部负载平衡的IP地址,经过内部负载平衡将央求发散到真实的Web服务器上。一般用于互联网公司,复杂的业务系统不合适使用。以以下图:
IP负载平衡
在网络层经过更正央求目标地址进行负载平衡。
用户央求数据包,到达负载平衡服务器后,负载平衡服务器在操作系统内核进度获得网络数据包,根
据负载平衡算法获得一台真实服务器地址,尔后将央求目的地址更正为,获得的真实ip地址,不需
要经过用户进度办理。
真实服务器办理达成后,响应数据包回到负载平衡服务器,负载平衡服务器,再将数据包源地址更正
为自己的ip地址,发送给用户阅读器。以以下图:
IP负载平衡,真实物理服务器返回给负载平衡服务器,存在两种方式:(1)负载平衡服务器在更正
目的ip地址的同时更正源地址。将数据包源地址设为自己盘,即源地址变换(snat)。(2)将负
载平衡服务器同时作为真实物理服务器集群的网关服务器。
优点:
(1)在内核进度达成数据发散,比在应用层发散性能更好;
缺点:
(2)所有央求响应都需要经过负载平衡服务器,集群最大吞吐量受限于负载平衡服务器网卡带宽;
链路层负载平衡
在通信协议的数据链路层更正mac地址,进行负载平衡。
数据发散时,不更正ip地址,指更正目标mac地址,配置真实物理服务器集群所有机器虚假ip和
负载平衡服务器ip地址一致,达到不更正数据包的源地址和目标地址,进行数据发散的目的。
实质办理服务器ip和数据央求目的ip一致,不需要经过负载平衡服务器进行地址变换,可将响应数
据包直接返回给用户阅读器,防范负载平衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模
式)。以以下图:
优点:性能好;
缺点:配置复杂;
实践建议:DR模式是当前使用最宽泛的一种负载平衡方式。
混杂型负载平衡
由于多个服务器群内硬件设备、各自的规模、供应的服务等的差别,能够考虑给每个服务器群采用最合适的负载平衡方式,尔后又在这多个服务器群间再一次负载平衡或群集起来以一个整体向外界供应服务(即把这多个服务器群当作一个新的服务器群),从而达到最正确的性能。将这种方式称之为混杂型负载平衡。
此种方式有时也用于单台平衡设备的性能不能够满足大量连接央求的情况下。是当前大型互联网公司,宽泛使用的方式。
方式一,以以下图:
以上模式合适有动静分其他场景,反向代理服务器(集群)能够起到缓存和动向央求发散的作用,当
时静态资源缓存在代理服务器时,则直接返回到阅读器。若是动向页面则央求后边的应用负载平衡(应用集群)。
方式二,以以下图:
以上模式,合适动向央求场景。
因混杂模式,能够依照详细场景,灵便搭配各种方式,以上两种方式仅供参照。
三、负载平衡算法
常用的负载平衡算法有,轮询,随机,最少链接,源地址散列,加权等方式;
轮询
将所有央求,依次发散到每台服务器上,合适服务器硬件同同样的场景。
优点:服务器央求数量同样;
缺点:服务器压力不同样,不合适服务器配置不一样的情况;
随机
央求随机分配到各个服务器。
优点:使用简单;
缺点:不合适机器配置不一样的场景;
最少链接
将央求分配到连接数最少的服务器(当前办理央求最少的服务器)。
优点:依照服务器当前的央求办理情况,动向分配;
缺点:算法实现相对复杂,需要监控服务器央求连接数;
(源地址散列)
依照IP地址进行Hash计算,获得IP地址。
优点:将来自同一IP地址的央求,同一会话期内,转发到同样的服务器;实现会话粘滞。
缺点:目标服务器宕机后,会话会扔掉;
加权
在轮询,随机,最少链接,Hash’等算法的基础上,经过加权的方式,进行负载服务器分配。
优点:依照权重,调治转发服务器的央求数量;
缺点:使用相对复杂;
四、硬件负载平衡
采用硬件的方式实现负载平衡,一般是单独的负载平衡服务器,价格昂贵,一般土豪级公司能够考虑,
业界当先的有两款,F5和A10。
使用硬件负载平衡,主要考虑一下几个方面:
1)功能考虑:功能全面支持各层级的负载平衡,支持全面的负载平衡算法,支持全局负载平衡;
2)性能考虑:一般软件负载平衡支持到5万级并发已经很困难了,硬件负载平衡能够支持
(3)牢固性:商用硬件负载平衡,经过了优秀的严格的测试,从经过大规模使用,在牢固性方面高;
(4)安全防范:硬件平衡设备除具备负载平衡功能外,还具备防火墙,防DDOS攻击等安全功能;
(5)保护角度:供应优秀的保护管理界面,售后服务和技术支持;
(6)土豪公司:F5BigIp价格:15w~55w不等;A10价格:55w-100w不等;
缺点
1)价格昂贵;
2)扩展能力差;
小结
1)一般硬件的负载平衡也要做双机高可用,因此成本会比较高。
2)互联网公司一般使用开源软件,因此大部分应用采用软件负载平衡;部分采用硬件负载平衡。
比方某互联网公司,当前是使用几台F5做全局负载平衡,内部使用Nginx等软件负载平衡。
《大型网站架构系列:负载平衡详解(上)》
一、软件负载平衡归纳
硬件负载平衡性能优越,功能全面,但是价格昂贵,一般合适初期也许土豪级公司长远使用。因此软
件负载平衡在互联网领域大量使用。常用的软件负载平衡软件有Nginx,Lvs,HaProxy等。本文
参照大量文档,部分为直接拷贝。
二、Ngnix负载平衡
Ngnix是一款轻量级的Web服务器/反向代理服务器,工作在七层Http协议的负载平衡系统。具
有高性能、高并发、低内存使用等特点。是一个轻量级的Http和反向代理服务器。Nginx使用epoll
andkqueue作为开发模型。能够支持高达50,000个并发连接数的响应。
操作系统:Liunx,Windows(Linux、FreeBSD、Solaris、MacOSX、AIX以及Microsoft
Windows)
开发语言:C
并发性能:官方支持每秒5万并发,实质国内一般到每秒2万并发,有优化到每秒10万并发的。
详细性能看应用途景。
模块化设计:优秀的扩展性,能够经过模块方式进行功能扩展。
:主控进度和worker是同步实现的,一个worker出现问题,会立刻启动另一个worker。