当前位置: 包装机器 >> 包装机器优势 >> 万字长文吃透负载均衡
写在前面
写本文的目的:
对负载均衡的理解零零散散,不成体系。
阅读这篇文章需要的条件:
对OSI模型有些许了解
有耐心。本文涉及大量的知识点,且只能用文字才能讲清楚,所以文字比较多。
收获:
读完此篇文章,从宏观的角度理解了负载均衡的原理以及实现机制。加深对分布式架构的了解
主要内容:
本文首先从概念开始,讲解什么是负载均衡,以及负载均衡在分布式系统中所承担的角色以及提供的功能。
讲解负载均衡的分类。分别从软硬件角度、地域范围角度以及OSI模型角度进行分类讲解负载均衡的实现方案。
从负载均衡的策略角度来分析目前业界的负载均衡算法以及其优缺点
好了,准备好了么,让我们开始这次愉快之旅。
引言
首先撇开对线上的影响,如果线上突发来了流量,后端服务扛不住,我们会怎么做呢?无非两种方式:
提升机器配置(CPU、内存、硬盘、带宽等)
加机器
上面两种方式,我们称之为纵向扩展和横向扩展。
纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。
横向扩展,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。
概念
负载均衡,英文名称为LoadBalance,其含义就是指将负载(工作任务或者网络请求)进行平衡,分摊到多个操作单元(服务器或者组件)上进行运行。目的是尽量将网络流量平均发送到多个服务器上,以保证整个业务系统的高可用。
在互联网的早起,网络还不是很发达,流量相对较小,业务也比较简单,单台服务器或者实例就有可能满足访问需要。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服务能力,用户的请求不管连接到哪台服务器,都能得到相同的相应处理。
另一方面,如何构建和调度服务集群这事情,又必须对用户一侧保持足够的透明,即使请求背后是由一千台、一万台机器来共同响应的,也绝非用户所关心的事情,用户需记住的只有一个域名地址而已。调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为负载均衡。
负载均衡主要有以下作用:
高并发。通过采取一定的算法策略,将流量尽可能的均匀发送给后端的实例,以此提高集群的并发处理能力。
伸缩性。根据网络流量的大小,增加或者减少后端服务器实例,由负载均衡设备进行控制,这样使得集群具有伸缩性。
高可用。负载均衡器通过算法或者其他性能数据来监控候选实例,当实例负载过高或者异常时,减少其流量请求或者直接跳过该实例,将请求发送个其他可用实例,这使得集群具有高可用的特性。
安全防护。有些负载均衡器提供了安全防护功能。如:黑白名单处理、防火墙等。
分类
根据载体类型分类
从支持负载均衡的载体来看,可以将负载均衡分为两类:
硬件负载均衡
软件负载均衡
硬件负载均衡
硬件负载平衡器是一种硬件设备,具有专门的操作系统。硬件负载平衡器位于传入流量和内部服务器之间,本质上充当“流量警察”。当用户访问网站或者使用app某个功能时,它们首先被发送到负载均衡器,然后负载均衡器根据一定的策略,将流量转发到后端不同的服务器。为确保最佳性能,硬件负载均衡器根据自定义规则分配流量,以免后端实例不堪重负。
传统上,硬件负载平衡器和应用服务器部署在本地数据中心,负载平衡器的数量取决于预期的峰值流量。负载均衡器通常成对部署,以防其中一个失败。
目前业界领先的两款硬件负载均衡器:F5和A10
优点:
功能强大:支持全局负载均衡并提供较全面的、复杂的负载均衡算法。
性能强悍:硬件负载均衡由于是在专用处理器上运行,因此吞吐量大,可支持单机百万以上的并发。安全性高:往往具备防火墙,防DDos攻击等安全功能。缺点
成本昂贵:购买和维护硬件负载均衡的成本都很高(:F5价格在15w~55w不等,A10价格在55w-w不等)。
扩展性差:当访问量突增时,超过限度不能动态扩容。软件负载均衡
软件负载均衡指的是在服务器的操作系统上安装负载均衡软件,从此服务器发出的请求经软件负载均衡算法路由到后端集群的某一台机器上。
常见负载均衡软件有:LVS、Nginx、Haproxy。
优点
扩展性好:适应动态变化,可以通过添加软件负载均衡实例,动态扩展到超出初始容量的能力。
成本低廉:软件负载均衡可以在任何标准物理设备上运行,降低了购买和运维的成本。缺点
性能略差:相比于硬件负载均衡,软件负载均衡的性能要略低一些。
软硬件负载均衡器的区别
硬件负载平衡器与软件负载平衡器之间最明显的区别在于,硬件负载平衡器需要专有的机架堆叠硬件设备,而软件负载平衡器只需安装在标准x86服务器或虚拟机上。网络负载平衡器硬件通常是过度配置的——换句话说,它们的大小能够处理偶尔的高峰流量负载。此外,每个硬件设备都必须与一个额外的设备配对以获得高可用性,以防其他负载均衡器出现故障。
硬件和软件负载平衡器之间的另一个关键区别在于扩展能力。随着网络流量的增长,数据中心必须提供足够的负载均衡器以满足峰值需求。对于许多企业来说,这意味着大多数负载均衡器在高峰流量时间(例如黑色星期五)之前一直处于空闲状态。
如果流量意外超出容量,最终用户体验会受到显着影响。另一方面,软件负载平衡器能够弹性扩展以满足需求。无论网络流量是低还是高,软件负载平衡器都可以简单地实时自动扩展,消除过度配置成本和对意外流量激增的担忧。
此外,硬件负载平衡器配置可能很复杂。基于软件定义原则构建的软件负载平衡器跨多个数据中心和混合/多云环境。事实上,硬件设备与云环境不兼容,而软件负载均衡器与裸机、虚拟、容器和云平台兼容。
根据地域范围分类
负载均衡从其应用的地理结构上分为本地负载均衡(LocalLoadBalance)和全局负载均衡(GlobalLoadBalance,也叫地域负载均衡)。
本地负载均衡
本地负载均衡是指对本地的服务器群做负载均衡。
本地负载均衡针对本地范围的服务器群做负载均衡,本地负载均衡不需要花费高额成本购置高性能服务器,只需利用现有设备资源,就可有效避免服务器单点故障造成数据流量的损失,通常用来解决数据流量过大、网络负荷过重的问题。同时它拥有形式多样的均衡策略把数据流量合理均衡的分配到各台服务器。如果需要在现在服务器上升级扩充,不需改变现有网络结构、停止现有服务,仅需要在服务群中简单地添加一台新服务器。
本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。
其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。
全局负载均衡
全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。
全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。
全局负载均衡,目前实现方式有以下几种:
通过运营商线路调度:这个主要是指国内,由于特殊原因国内不同运营商互联互通存在很大问题,比如联通用户访问电信机房服务器延迟很大,甚至有可能无法访问的情况。假如您的业务部署在不同运营商机房,可以通过运营商线路解析来实现调度,联通线路用户域名解析到联通机房IP,电信线路用户域名解析电信机房IP,这样保证不同用户访问最佳的服务器。
通过地域线路调度:我们都知道,网站服务器越近,访问速度越快,比如天津用户访问北京服务器会比广州服务器快很多。假如您的业务部署在华北,华南两个Region,可以通过地域线路解析,设置华北,东北,西北,华中用户访问域名解析到北京服务器IP,华东,华南,西南用户访问域名解析到广州服务器IP,这样用户访问离自己最近的服务器可以提升访问体验。假如您的业务是面向全球的,国内部署有业务,海外也部署有业务,可以选择中国用户访问域名解析到国内服务器,海外用户访问域名解析到海外服务器。当然海外的还可以细分,比如选择亚太--新加坡的用户等,可以具体到洲,国家。
权重轮询:比如一个域名解析到多个IP,可以根据不同IP服务器的配置,业务情况设置解析比重,比如2:1或者1:1等等。
健康检查,故障转移:可以创建监控任务实时监控后端服务器IP的健康状态,如果发现后端服务器异常,可以把解析流量切换到其他正常的服务器或者备用服务器,保证业务不会中断。
CDN的全称是ContentDeliveryNetwork,即内容分发网络。其就是采用的全局负载均衡。假如我们将图片存储在CDN上,且该CDN所在厂家在北京、杭州均有服务器。那么:
当天津的用户需要下载该图片的时候,会自动将流量请求转发至距离其最近的CDN服务器,也就是北京
当安徽的用户需要下载图片的时候,就会将流量请求转发至杭州。
根据OSI网络模型分类
OSI是一个开放性的通信系统互连参考模型,如上图所示。在OSI参考模型中,分别有:
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
从上图可以看出:
TELNET、HTTP、FTP、NFS、SMTP、DNS等属于第七层应用层的概念。
TCP、UDP、SPX等属于第四层传输层的概念。IP、IPX等属于第三层网络层的概念。ATM、FDDI等属于第二层数据链路层的概念。根据负载均衡技术实现在OSI七层模型的不同层次,我们给负载均衡分类:
七层负载均衡:工作在应用层的负载均衡称
四层负载均衡:工作在传输层的负载均衡称
三层负载均衡:工作在网络层的负载均衡,
二层负载均衡:工作在数据链路层的负载均衡。
下面内容非常重要,
转载请注明:http://www.aideyishus.com/lkgx/4031.html