负载均衡的原理说明_第1页
负载均衡的原理说明_第2页
负载均衡的原理说明_第3页
负载均衡的原理说明_第4页
负载均衡的原理说明_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

负载均衡的演进大家都知道一台服务器的处理能力,主要受限于服务器自身的可扩展硬件能力。所以,在需要处理大量用户请求的时候,通常都会引入负载均衡器,将多台普通服务器组成一个系统,来完成高并发的请求处理任务。之前负载均衡只能通过DNS来实现,1996年之后,出现了新的网络负载均衡技术。通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台服务器虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,将来自客户端的网络请求分发到服务器池中。网络负载均衡会检查服务器池中后端服务器的健康状态,自动隔离异常状态的后端服务器,从而解决了单台后端服务器的单点问题,同时提高了应用的整体服务能力。网络负载均衡主要有硬件与软件两种实现方式,主流负载均衡解决方案中,硬件厂商以F5为代表目前市场占有率超过50%,软件主要为NGINX与LVS。但是,无论硬件或软件实现,都逃不出基于四层交互技术的"转发”或基于七层协议的"代理”这两种方式。四层的转发模式通常性能会更好,但七层的代理模式可以根据更多的信息做到更智能地分发流量。一般大规模应用中,这两种方式会同时存在。2007年F5提出了ADC(Applicationdeliverycontroller)的概念为传统的负载均衡器增加了大量的功能,常用的有:SSL卸载、压缩优化和TCP连接优化。NGINX也支持很多ADC的特性,但F5的中高端型号会通过硬件加速卡来实现SSL卸载、压缩优化这一类CPU密集型的操作,从而可以提供更好的性能。F5推出ADC以后,各种各样的功能有很多,但其实我们最常用的也就几种。这里我也简单的总结了一下,并和LVS、Nginx对比了一下。HTTP丿弋理SS匸且载古缩优化F57..LVSNGINXSSL卸载和压缩优化,主要是将CPU密集型的加解密和压缩操作移到负载均衡器上进行;TCP连接优化主要指的是用户和负载均衡器短连接的同时,负载均衡器和后端服务器建立长连接。不过我们本次主要介绍四层负载均衡,所以这些高级ADC功能不会涉及到。F5的硬件负载均衡产品又分单机BigIP系列和集群VISRION系列,都是X86架构,配合自研的TMOS(TrafficManagementOperatingSystem),再加上硬件加速卡(Cavium提供)处理SSL和压缩等CPU密集型操作。L4CPS:四层每秒新建连接数。测试的时候一般采用TCP短连接,每次请求128字节。体现CPU性能,最重要的性能指标,没有之一。L4最大并发连接数:体现内存大小L7RPS:七层每秒请求数。测试时每连接10个128字节HTTP请求。主要体现HTTP协议栈性能这些性能指标实际上就是一个负载均衡器最关键的指标了。大家如有采购硬件负载均衡器一定要看这个。有很多小牌子的硬件负载均衡器经常不标注L4CPS,只是笼统地说10G负载均衡,其实差别很大的。硬件负载均衡在功能、易用性和可扩展性上都做得不错,但是也有不少缺点。从商业角度来说,硬件负载均衡产品过于昂贵,高端产品动辄五十万甚至数百万的价格对于用户是几乎不可承受的负担。从使用角度来说,硬件负载均衡是黑盒,有BUG需要联系厂商等待解决,时间不可控、新特性迭代缓慢且需资深人员维护升级,也是变相增加昂贵的人力成本。相信除了很多不差钱的公司,大家还是用软件负载均衡比较多。软件四层负载均衡最常见的就是LVS了。

转发榄武优葩 1NAT■后端RS不需任何特殊配供6LV呂必须作为两黄朴VIP和FNP必狈柚于下同网段.都是客户端源IF信息DR回程报丈不经过LVS九囹不対称流量性能优化明显□同名保留源IP地址-LVS^RS必须在相同•护网,必烦「层可达,R益无法叛到零配儘,需要配f§VIP,同时耍对ARP做特殊址理FULLNAT:币端RS不需任何特殊配爵“物理冏络仅要求三层可达*丢失源旧倍息CTOAJj-式对只営改动过大)q雅护及具匍杂;FULLNAT无法进入LM其内LVS最常用的有NAT、DR以及新的FULLNAT模式。上图比较了几种常见转发模式的优缺点。我们认为LVS的每种转发模式都有其优点和缺点,但最大的问题还是其复杂性。我第一次看到这三种转发方式、还有F5的单臂模式、双臂模式都会有云里雾里的感觉。雪上加霜的是咱们还需要考虑LVS的性能扩展和容灾方法,这使得整个方案更加的复杂。常见的有基于Keepalived的主备方式和ECMP两种。Keepalived主备模式设备利用率低;不能横向扩展;VRRP协议,有脑裂的风险。而ECMP的方式需要了解动态路由协议,LVS和交换机均需要较复杂配置;交换机的HASH算法一般比较简单,增加删除节点会造成HASH重分布,可能导致当前TCP连接全部中断;部分交换机的ECMP在处理分片包时会有Bug,说起来心中满满的都是血泪呀。可靠性:ECMP+—致性哈希保证连接不中断当负载均衡器发主变化可伸缩性横向扩展半ECMP集群纵向扩展:DPDF:提升单机勺虚拟化网络中的DR转发模式当两者同时发生变更如图:UCIoudVortex负载均衡器的设计理念用户使用负载均衡器最重要的需求是"HighAvailability”和"Scalability”,Vortex的架构设计重心就是满足用户需求,提供极致的"可靠性”和"可收缩性”,而在这两者之间我们又把“可靠性”放在更重要的位置。

值得一提的是今年3月举办的第十三届网络系统设计与实现USENIX研讨会(NSDI'16)上,来自谷歌、加州大学洛杉矶分校、SpaceX公司的工程师们分享了《Maglev:快速、可靠的软件网络负载均衡器》,介绍了从2008年开始在生产环境投入使用的软件负载均衡器。其设计理念和我们非常相似,同样是ECMP+一致性哈希;同样是KernelBypass模式;单机性能也和我们的Vortex非常接近。关于Vortex的HighAvailability实现四层负载均衡器的主要功能是将收到的数据包转发给不同的后端服务器,旦必须保证将五元组相同的数据包发送到同一台后端服务器,否则后端服务器将无法正确处理该数据包。以常见的HTTP连接为例,如果报文没有被发送到同一台后端服务器,操作系统的TCP协议栈无法找到对应的TCP连接或者是验证TCP序列号错误将会无声无息的丢弃报文,发送端不会得到任何的通知。如果应用层没有超时机制的话,服务将会长期不可用。Vortex的可靠性设计面临的最大问题就是如何在任何情况下避免该情况发生。Vortex通过ECMP集群和一致性哈希来实现极致程度的可靠性。首先,我们来考察一下负载均衡服务器变化场景。这种场景下,可能由于负载均衡服务器故障被动触发,也可能由于运维需要主动增加或者减少负载均衡服务器。此时交换机会通过动态路由协议检测负载均衡服务器集群的变化,旦除思科的某些型号外大多数交换机都采用简单的取模算法,导致大多数数据包被发送到不同的负载均衡服务器。

Vortex服务器的一致性哈希算法能够保证即使是不同的Vortex服务器收到了数据包,仍然能够将该数据包转发到同一台后端服务器,从而保证客户应用对此类变化无感知,业务不受任何影响。这种场景下,如果负载均衡器是LVS且采用RR(RoundRobin)算法的话,该数据包会被送到错误的后端服务器,且上层应用无法得到任何通知。R^ialServiceInstances菇询转发算注LVS腕务器变i!1h05T;lR|n$M肝卅瞞6,3irl=-Ji鬲t_£S甩羌霁S5i崖嶺生靈贮河一亏涯陛就S5酮爾3ha&h^Rf^ihashl-iR)%^聲临=5阳诵溜L翩g务瓯鎖比iWWB四曲阳上空斷届陶魁氏X”叭,.二阿为"式海谆目瑕运咅:!问2妙M刹l^^KA,耳例甲拐闫呂刚§罢密’淫舶人覘各发生蛮狂如果LVS配置了SH(SourceHash)算法的话,该数据包会被送到正确的后端服务器,上层应用对此类变化无感知,业务不受任何影响;

srsr顶Iflf■LYSSOufMn-abh\LV5——\\ 二DODDBBBBHgfilSriuiceIns^nai::s能服务器娈噩宋塞e顿叭旌厠加、*割iait卿§駆伽•第I■引.阳创输啤5;hr!i托21L1=I2;'r:35h2ILISiiE衿RS确樹限生蛮出时,般阳Kb芒舷媚珈1he倚1(R|=fl,hash1斛砸;刁hs&Ji?(LF=12;h0^2>LI^7在RS画飙砂主謝8融一畠舷的協比厦不兌W^z临i/「£T认,洛町胡坯U.7 产舌宙為-K比(抵H剃密更判距町□如果负载均衡器是NGINX的话,亥数据包会被TCP协议栈无声无息地丢弃,上层应用不会得到任何通知。其次,来考察后端服务器变化的场景。这种场景下,可能由于后端服务器故障由健康检查机制检查出来,也可能由于运维需要主动增加或者减少后端服务器。此时,Vortex服务器会通过连接追踪机制保证当前活动连接的数据包被送往之前选择的服务器,而所有新建连接则会在变化后的服务器集群中进行负载分担。同时,Vortex一致性哈希算法能保证大部分新建连接与后端服务器的映射关系保持不变,只有最少数量的映射关系发生变化,从而最大限度地减小了对客户端到端的应用层面的影响。这种场景下,如果负载均衡器是LVS且SH算法的话,大部分新建连接与后端服务器的映射关系会发生变化。某些应用,列如缓存服务器,如果发生映射关系的突变,将造成大量的cachemiss,从而需要从数据源重新读取内容,由此导致性能的大幅下降。而NGINX在该场景下如果配置了一致性哈希的话可以达到和Vortex一样的效果。最后,让我们来看一下负载均衡服务器和后端服务器集群同时变化的场景。在这种场景下,Vortex能够保证大多数活动连接不受影响,少数活动连接被送往错误的后端服务器且上层应用不会得到任何通知。并且大多数新建连接与后端服务器的映射关系保持不变,只有最少数量的映射关系发生变化。源地址俯希尊法LVSE®源地址俯希尊法LVSE®器与恣同肚娈建Ji. :71也j站旦注il曰ki肚inpmnn阳;阿叫COI1I旳C1K>[itJLkrilflM=|ER3-a.haah1-lRW&hd3h?il.^t2esjarinoconnMnionu£sconnaeWfitraekiAQelse:hashzrimi如果负载均衡器是LVS且SH算法的话几乎所有活动连接都会被送往错误的后端服务器且上层应用不会得到任何通知。大多数新建连接与后端服务器的映射关系同样也会发生变化。如果是NGINX的话因为交换机将数据包送往不同的NGINX服务器,几乎所有数据包会被无声无息的丢弃,上层应用不会得到任何通知。可收缩性的设计是基于ECMP集群的ScalingOut设计Vortex采用动态路由的方式通过路由器ECMP(Equal-costmulti-pathrouting!来实现Vortex集群的负载均衡。—般路由机支持至少16或32路ECMP集群,特殊的SDN交换机支持多达256路ECMP集群。而一致性哈希的使用是的ECMP集群的变化对上层应用基本无感知,用户业务不受影响。虽然ECMP提供了良好的ScalingOut的能力,但是考虑到网络设备的价格仍然希望单机性能够尽可能的强。例如,转发能力最好是能够达到10G甚至40G的线速,同时能够支持尽可能高的每秒新建连接数r:0.™.M]D丸卫OGOWJUGXWC13drncx},rwn20,000,™IO.O(K1.DOT£11281522*fi32030444B51257S640704768£33B9E9601D241D8B,115212l£t20Q13JJpucoIIll^」ald巾一dj左UEaPackBLSiz&10Z4byt1QGPjcke(s.'se£opid-1aMillionearPscKeiajnvaira.i&2OBBns2GlizC4ocxcycles417cydtTy口lealServerPaGk^tSizesPacketSizeS4bytes■ICGPucketSj'Eecorid59.5MilllOEiuact!wayPacketarrivalrate16.0fK2GrtzCIdciccydes33cyclesNelwciKInFra^tructurePacketSizes内核不是解决方案,而是问题所在!从上图可以看到随着高速网络的发展64字节小包线速的要求越来越高,对10G网络来说平均67ns,对40G网络来说只有17ns。而于此同时CPU、内存的速度提升却没有那么多。以2G主频的CPU为例,每次命中L3缓存的读取操作需要约40个CPU周期,而一旦没有命中缓存从主存读取则需要140个CPU周期。为了达到线速就必须采用多核并发处理、批量数据包处理的方式来摊销单个数据包处理所需要的CPU周期数。此外,即使采用上述方式,如果没有得到充分的优化,发生多次cachemiss或者是memorycopy都无法达到10G线速的目标。

iMTrnHWHYVORTEX?iMTrnH县楝k也世迟1.*侍Llset用审rbfI&inlp賈l优碘2梅玉了Sak金特断匸桎円G3罟冷SKB钊fig珂軒疗也的艮雋虧辆4^^Sa-fcHtCI .UMfSfiaiDB^!5S像NGINX这样的代理模式,转发程序因为需要TCP协议栈的处理以及至少一次内存复制性能要远低于LVS。而LVS又因为通用Kernel的限制,会考虑节省内存等设计策略,而不会向Vortex—样在一开始就特别注重转发性能。例如LVS缺省的连接追踪HASH表大小为4K,而Vortex直接使用了50%以上的内存作为连接追踪表。Vortex通过DPDK提供函数库充分利用CPU和网卡的能力从而达到了单机10G线速的转发性能。•用户空间驱动,完全Zero-Copy采用批处理摊销单个报文处理的成本•充分利用硬件特性•IntelDataDirectI/OTechnology(IntelDDIO)•NUMA•HugePages,CacheAlignment,MemorychanneluseVortex直接采用多队列10G网卡,通过RSS直接将网卡队列和CPUCore绑定,消除线程的上下文切换带来的开销。Vortex线程间采用高并发无锁的消息队列通信。除此之外,完全不共享状态从而保证转发线程之间不会互相影响。Vortex在设计时尽可能的减少指针的使用、采用连续内存数据结构来降低cachemiss。通过这样一系列精心设计的优化措施,最终Vortex的单机性能远超LVS,甚至超过了GoogleMaglev的水平。LVS支持四种转发模式:NAT、DR、TUNNEL和FULLNAT,其实各有利弊。Vortex在设计之初就对四种模式做了评估,最后发现在虚拟化的环境下DR方式在各方面比较平衡,并且符合我们追求极致性能的理念。DR方式最大的优点是绝佳的性能,只有request需要负载均衡器处理,response可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论