第5章 · 播客 第5集

系统性能评价 · 性能设计与五种负载均衡方式

🎙️ 本集播客第5集:进入 5.3 性能设计——阿姆达尔定律的原话与加速比取决于哪两个因素(干扰项全是硬件参数),然后是五种负载均衡技术逐一贴标签:基于特定服务器软件的 Location 重定向、基于 DNS 的随机名字解析(这一种是必考点)、反向代理、基于 NAT 的第四层交换、以及半中心的扩展方式,每种的原理、优点和缺点都对着念。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第5章播客 第5集
⬇ 下载本集 点击播放
阿明
上集把六种基准测试程序过完了,Dhrystone、Linpack、Whetstone、SPEC、TPC、HPL 我现在都能对上号。这集是不是该讲 5.3 性能设计了?
小雅
最后一集,收尾两块:性能设计和负载均衡。性能设计这一节原文一句话点题——本节主要讨论如何利用阿姆达尔解决方案进行系统性能优化及负载均衡方面的知识。阿姆达尔定律的原话要能背:系统中对某部件采用某种更快的执行方式,所获得的系统性能的改变程度,取决于这种方式被使用的频率,或所占总执行时间的比例。重心全在后半截——你把某个部件优化到飞起,可它只占总时间的百分之二,整机也就快那么一丁点。
阿明
那加速比是怎么定义的?
小雅
阿姆达尔定律定义了采用特定部件所取得的加速比:假定使用某种增强部件,计算机的性能就会得到提高,加速比就反映了使用增强部件后完成一个任务,比不使用增强部件完成同一任务加快了多少。考点落在「加速比取决于什么」——两个因素。第一,在原有的计算机上,能被改进并增强的部分在总执行时间中所占的比例,这个值称之为增强比例,它永远小于等于 1。第二,通过增强的执行方式所取得的改进,即如果整个程序使用了增强的执行方式,这个任务的执行速度会有多少提高;这个值是在原来条件下程序的执行时间,与使用增强功能后程序的执行时间之比。还有一句配套的:原来的机器使用了增强功能后,执行时间等于未改进部分的执行时间加上改进部分的执行时间。
阿明
所以选项里给「增强比例和改进程度」,直接选它。
小雅
这就是正确选项。杀招在于干扰项全是听着特别硬核的硬件参数——时钟频率和缓存大小、CPU 主频和内存容量、带宽和延迟;这三组统统是 5.1 节的性能指标,跟阿姆达尔定律毫无关系。记一句口诀:比例加倍数,不是主频加缓存。
阿明
上集那道浮点开平方的例题,是不是就是阿姆达尔的活教材?
小雅
正是。FPSQR 只占 2%,可 CPI 高达 100,等效 CPI 是 3.92;把它的 CPI 改到 4.0,等效 CPI 就变成 2.00,等效速度提高了近一倍。被改的指令只占 2% 却一改就见效,因为它所占总执行时间的比例高——这就是阿姆达尔那句话的字面演示。
阿明
懂了。那负载均衡呢?这词我天天听,定义反而说不清。
小雅
定义要能背:负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助;通过某种负载分担技术,将外部发送来的请求均匀地分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。顺带把集群也收了:如果有多个服务器同时执行某一个任务时,这些服务器就构成一个集群;使用集群技术可以用最少的投资获得接近于大型主机的性能。
阿明
那常用的负载均衡技术有几种?
小雅
五种,我一种一种给你贴标签,因为本章有一道题就是拿其中一种的特征来问归属,四个选项全在这五种里。第一种,基于特定服务器软件的负载均衡:很多网络协议都支持「重定向」功能,例如在 HTTP 协议中支持 Location 指令,接收到这个指令的浏览器将自动重定向到 Location 指明的另一个 URL 上;因为发送 Location 指令比起执行服务请求,对 Web 服务器的负载要小得多,所以当 Web 服务器认为自己负载较大的时候,它就不再直接发送回浏览器请求的网页,而是送回一个 Location 指令,让浏览器在服务器集群中的其他服务器上获得所需要的网页。
阿明
听着挺聪明,怎么没见谁这么干?
小雅
因为有硬伤:一台服务器如何能保证它重定向过的服务器是比较空闲的,并且不会再次发送 Location 指令?Location 指令和浏览器都没有这方面的支持能力,这样很容易在浏览器上形成一种死循环,因此这种方式实际应用当中并不多见。补救办法是用 CGI,包括 FastCGI 或 mod_perl 扩展,来模拟这种方式分担负载,避免 Location 循环的任务由用户的 CGI 程序承担。它的身份标签就两个:Location 重定向、死循环风险。
阿明
第二种就是 DNS 那个吧?
小雅
第二种,基于 DNS 的负载均衡,DNS 是 Domain Name Server 域名服务器。这一条必须逐字记,因为题目照着原文这句问:通过 DNS 服务中的随机名字解析来实现负载均衡——在 DNS 服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址;因此对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的 Web 服务器,从而达到负载均衡的目的。
阿明
所以题干出现「随机名字解析」,答案就是基于 DNS 的负载均衡。
小雅
一字不差。这道题的坑在于四个选项全是原文列的真实类别,没有一个是假的,蒙不了,只能靠特征词对号入座。四个特征词现在钉死:Location 重定向是特定服务器软件;随机名字解析、同一个名字配多个地址是 DNS;请求先到代理再转发给内部服务器是反向代理;内外地址转换、第四层交换是 NAT。
阿明
DNS 这种方式的优缺点会不会单独出题?
小雅
会,常和解析原理凑成一道题的两个空。优点是简单易行,并且服务器可以位于互联网的任意位置上,当前使用在包括 Yahoo 在内的 Web 站点上。缺点分两个数:一个是为了保证 DNS 数据及时更新,一般都要将 DNS 的刷新时间设置得较小,但太小就会造成太大的额外网络流量,并且更改了 DNS 数据之后也不能立即生效;另一个是 DNS 负载均衡无法得知服务器之间的差异,它不能做到为性能较好的服务器多分配请求,也不能了解到服务器的当前状态,甚至会出现客户请求集中在某一台服务器上的偶然情况。
阿明
「无法得知服务器差异」这条,是不是正好和反向代理对着写?
小雅
这两个天生是一对反义句。第三种反向代理负载均衡:使用代理服务器可以将请求转发给内部的 Web 服务器,让代理服务器将请求均匀地转发给多台内部 Web 服务器,就达到负载均衡。方向别记反——标准代理方式是客户使用代理访问多个外部 Web 服务器,而这种代理方式是多个客户使用它访问内部 Web 服务器,因此被称为反向代理模式。代价是连接数翻倍:每针对一次代理,代理服务器就必须打开两个连接,一个对外一个对内,因此连接请求数量非常大的时候,反向代理服务器会成为服务的瓶颈——所以它适合连接数量不是特别大、但每次连接都需要消耗大量处理资源的站点,例如搜寻。
阿明
那好处呢?
小雅
三条,条条打在 DNS 的痛点上:一是可以将负载均衡和代理服务器的高速缓存技术结合在一起,以提供有益的性能;二是具备额外的安全性,外部客户不能直接访问真实的服务器;三是可以采用较好的负载均衡策略,不会出现负载集中到某个服务器的偶然现象。听清最后这句——DNS 是「甚至会出现请求集中在某一台服务器上的偶然情况」,反向代理是「不会出现」。谁会偶然集中、谁不会,就是一道辨析题的全部。
阿明
第四种 NAT 我只知道是地址转换。
小雅
基于 NAT 的负载均衡技术,NAT 是 Network Address Translation 网络地址转换:在内部地址和外部地址之间进行转换,当外部网络中的计算机访问地址转换网关拥有的某一外部地址时,地址转换网关能将其转发到一个映射的内部地址上;如果网关能将每个连接均匀转换为不同的内部服务器地址,外部计算机就各自与自己转换得到的地址上的服务器通信,从而达到负载分担的目的。这一种最爱考的一句是第四层交换:地址转换可以软件实现也可以硬件实现,使用硬件方式进行操作一般称为交换,而当交换必须保存 TCP 连接信息的时候,这种针对 OSI/RM 网络层的操作就被称为第四层交换。
阿明
第四层交换的性能数字要背吗?
小雅
记个量级就行。支持负载均衡的网络地址转换是第四层交换机的一种重要功能,基于定制的硬件芯片所以性能非常优秀,很多交换机声称具备 400MB 到 800MB 的第四层交换能力;但也有资料表明在如此快的速度下,大部分交换机就仅仅支持第三层甚至第二层交换了。软件方式更实际,比如 Linux Virtual Server Project 中的 NAT 实现,中心负载均衡器存在带宽限制:100MBps 的快速以太网条件下最高达 80MBps,实际应用中可能只有 40 到 60MBps 的可用带宽。
阿明
中心负载均衡器成了瓶颈,第五种是来救场的?
小雅
第五种叫扩展的负载均衡技术。推导是:用网络地址转换实现负载分担,所有的网络连接都必须通过中心负载均衡器,那么当后台服务器不再是几台、十几台,而是上百台甚至更多时,即便是使用性能优秀的硬件交换机也会遇到瓶颈;此时问题转变为如何将那么多台服务器分布到各个互联网的多个位置、分散网络负担。这可以通过综合使用 DNS 和 NAT 两种方法来实现,然而更好的方式是使用一种半中心的负载均衡方式。
阿明
「半中心」是半个中心?
小雅
意思是回程不走中心:中心负载均衡器将请求打包并发送给某个服务器,而服务器的回应请求不再返回给中心负载均衡器,而是直接返回给客户,因此中心只负责接受并转发请求,其网络负担就较小了。和 NAT 一对照——NAT 是去和回都过中心,中心成瓶颈;半中心是去过中心、回不过中心。
阿明
五种全齐了。这集的小结就一句话:随机名字解析认准 DNS,Location 认准特定服务器软件,第四层交换认准 NAT。
小雅
再加上一对反义句——DNS 会出现请求集中在某台服务器上的偶然情况,反向代理不会。下一集收全章的尾:系统监视的三类性能数据——识别内存泄漏这种短期趋势靠哪一类——加上三种监视方式,最后把全章必背清单串一遍。