负载均衡分类
Posted zhang0807
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡分类相关的知识,希望对你有一定的参考价值。
介绍
面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。
从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式。将相同的应用部署到多台机器上。解决访问统一入口问题,我们可以在集群前面增加负载均衡设备,实现流量分发。
负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升;而单机能力总有上限,因此需要采用横向扩展的方式,通过添加更多机器来提升更强的系统处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。在分布式系统中相同的服务常常会部署很多台,每一台被称为一个服务节点(实例)。通过一些负载均衡策略将服务请求均匀地分布到各个节点,以实现整个系统支撑海量请求的需求。
负载均衡的作用(解决的问题):
- 解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);
- 提供故障转移,实现高可用;
- 通过添加或减少服务器数量,提供网站伸缩性(扩展性);
- 安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)
负载均衡虽然理解起来简单,但实现方式就很多了,可大可小;可以软件实现,也可以硬件实现,由于涉及的技术很多,这里只是简单的介绍常用技术。
DNS负载均衡
DNS是最简单的、也是最常见的负载均衡方式,一般用来实现地理级别的均衡,例如北方的用户访问北京的机房,南方的用户访问广州的机房;一般不太会使用DNS来做机器级别的负载均衡,因为太耗费IP资源了,例如百度搜索可能要10000台机器以上,不可能将这么多机器全部配置公网ip然后用DNS来做负载均衡。有兴趣的同学可以在linux用 dig baidu.com命令看看实际上用了几个ip地址。
优点
- 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
- 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;
缺点
- 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;
- 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;
- 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)
所以对于时延和故障敏感的业务,有一些公司自己实现了HTTP-DNS的功能,即:使用http协议实现一个私有的DNS系统。这样的方案和通用的DNS优缺点正好相反。
硬件负载均衡
采用硬件的方式实现负载均衡,一般是单独的负载均衡服务器,价格昂贵,一般土豪级公司可以考虑,业界领先的有两款,F5和A10。
使用硬件负载均衡,主要考虑一下几个方面:
- 功能考虑:功能全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡;
- 性能考虑:硬件远远高于软件,一般软件负载均衡支持到5万级并发已经很困难了,硬件负载均衡可以支持;
- 稳定性:商用硬件负载均衡,经过了良好的严格的测试,从经过大规模使用,在稳定性方面高;
- 安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙,防DDOS攻击等安全功能;
- 维护角度:提供良好的维护管理界面,售后服务和技术支持;
- 土豪公司:F5 Big Ip 价格:15w~55w不等;A10 价格:55w-100w不等;
缺点:
- 价格昂贵;
- 扩展能力差;
再加上即使硬件的负载均衡也要做双机高可用,因此成本会更高。比如互联网公司通常使用开源软件,小公司甚至都不一定有负载均衡的考虑,因为当前大部分应用采用了软件负载均衡,也就核心应用采用硬件负载均衡,或者说可以使用几台F5做全局负载均衡,内部使用nginx等软件负载均衡。
软负载均衡(Nginx & LVS & HA)
DNS用于实现地理级别的负载均衡,而Nginx&LVS&HA就是用于同一地点内机器级别的负载均衡。其中Nginx是软件的7层负载均衡,LVS是内核的4层负载均衡。
4层和7层的区别就在于协议和灵活性。Nginx支持HTTP、Email协议,而LVS和F5是4层负载均衡,和协议无关,几乎所有应用都可以做,例如聊天、数据库等。
Ngnix负载均衡
Ngnix是一款轻量级的Web服务器/反向代理服务器,工作在七层Http协议的负载均衡系统。具有高性能、高并发、低内存使用等特点。是一个轻量级的Http和反向代理服务器。Nginx使用epoll 和 kqueue作为开发模型。能够支持高达 50,000 个并发连接数的响应。 Ngnix的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、通用hash、consistent hash等,默认不编译进nginx内核。由于在nginx版本升级中负载均衡的代码没有本质性的变化,因此下面将以nginx1.0.15稳定版为例,从源码角度分析各个策略。
Ngnix的负载均衡策略
- 加权轮询(weighted round robin) 轮询的原理很简单,首先我们介绍一下轮询的基本流程。
- IP Hash ip hash是nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是其中的算法和具体的策略有些变化
- fair fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用。
- 通用hash、一致性hash 这两种也是扩展策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采用了nginx内置的一致性hash环,可以支持memcache。
Ngnix 负载均衡的适合场景
Ngnix一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用。以下架构示例,仅供参考,具体使用根据场景而定。
分布式系统中,应用只部署一台服务器会存在单点故障,负载均衡同样有类似的问题。一般可采用主备或负载均衡设备集群的方式节约单点故障或高并发请求分流。
Ngnix高可用,至少包含两个Ngnix服务器,一台主服务器,一台备服务器,之间使用Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。
以上是关于负载均衡分类的主要内容,如果未能解决你的问题,请参考以下文章