阅读 6

系统架构设计笔记(23)—— 系统性能计算与设计

1 系统性能计算

随着计算机系统复杂度的不断增长,性能指标也在不断地增长,这也增加了衡量计算机系统性能的难度。如何在众多指标中选取合适的性能指标,以及选择何种衡量方法都成为一项重要的课题,因此也衍生了各种性能评估体系。这里主要介绍一些常用性能指标的计算方法。

在实际应用时,往往是对这些常用性能指标的复合计算,然后通过算法加权处理得到最终结果。

性能指标计算的主要方法有:定义法 、 公式法 、 程序检测法 、 仪器检测法。定义法主要根据其定义直接获取其理想数据,公式法则一般适用于根据基本定义所衍生出的复合性能指标的计算,而程序检测法和仪器检测法则是通过实际的测试来得到其实际值(由于测试的环境和条件不定,其结果也可能相差比较大)。

有些性能指标,在不同的环境中,其名字相同,但计算方式和结果可能相差甚远,例如,吞吐量 、 带宽等,在计算机 、 路由器 、 交换机和网络中多处出现了有关吞吐量的定义,但其具体的含义不尽相同。

1.1 MIPS 的计算方法

MIPS ,Million Instructions Per Second,即 每秒处理的百万级的指令数。

例如,如果要计算 PentiumIV/2.4E 处理机的运算速度,因为 PentiumIV/2.4E 处理机的 IPC=2 (或 CPI=0.5 ), Fz=2400MHz ,所以 例如,如果要计算 PentiumIV/2.4E 处理机的运算速度,因为 PentiumIV/2.4E 处理机的 IPC=2 (或 CPI=0.5 ), Fz=2400MHz ,所以 MIPS = 2 * 2400=4800 MIPS。

1.2 峰值计算

衡量计算机性能的一个重要指标就是计算峰值或者浮点计算峰值,它是指计算机每秒钟能完成的浮点计算最大次数。包括理论浮点峰值和实测浮点峰值。

理论浮点峰值是该计算机理论上能达到的每秒钟能完成浮点计算最大次数,它主要是由 CPU 的主频决定。

理论浮点峰值 = CPU 主频 * CPU 每个时钟周期执行浮点运算的次数 * 系统中 CPU 数

CPU 每个时钟周期执行浮点运算的次数是由处理器中浮点运算单元的个数及每个浮点运算单元在每个时钟周期能处理几条浮点运算来决定的。

1.3 等效指令速度

  • 静态指令使用频度指的是在程序中直接统计的计算机速度。
  • 动态指令使用频度指的是在程序执行过程中统计的指令速度。

在计算机发展的早期,用加法指令的运算速度来衡量计算机的速度。后来发展成为等效指令速度法或吉普森( Gibson )法,在这种方法中,通常加 、 减法指令占 50 % ,乘法指令占 15% ,除法指令占 5% ,程序控制指令占 15% ,其他指令占 15% 。例如,我国最早研制的小型计算机 DJS-130 ,定点 16 位,加法速度每秒 50 万次,但没有硬件乘法和除法等指令。用软件实现乘法和除法,速度降低 100 倍左右,则其等效指令速度为:

这里的 0.8 表示除乘除之外的指令占比,0.2 表示乘除指令占比,0.5 表示加法速度,100 表示降速程度。

即每秒 2 万次,由于乘法和除法用软件实现,等效速度降低了 25 倍(50/2 = 25)。

又如,如果浮点开平方操作 FPSQR 的比例为 2% ,它的 CPI 为 100 ,其他浮点操作的比例为 23% ,它的 CPI 4.0,其馀指令的 CPI 1.33,则该处理机的等效 CPI 为

CPI(Clock cycle Per Instruction)表示每条计算机指令执行所需的时钟周期。

如果 FPSQR 操作的 CPI 也为 4.0,则其等效 CPI 为:

由于改进了仅占 2%的 FPSQR 操作的 CPI,使等效速度提高了近一倍。

2 性能设计

2.1 阿姆达尔解决方案

阿姆达尔定律是这样的:系统中对某部件采用某种更快的执行方式,所获得的系统性能的改变程度,取决于这种方式被使用的频率,或所占总执行时间的比例。

阿姆达尔定律定义了采用特定部件所取得的加速比。假定使用某种增强部件,计算机的性能就会得到提高,那么加速比就是如下公式所定义的比率:

加速比反映了使用增强部件后完成一个任务比不使用增强部件完成同一任务加快了多少。阿姆达尔定律为计算某些情况下的加速比提供了一种便捷的方法。加速比主要取决于两个因素:

(1)在原有的计算机上,能被改进并增强的部分在总执行时间中所占的比例。这个值称之为增强比例,它永远小于等于 1(因为增强的部分肯定属于原有系统的一部分)。

(2)通过增强的执行方式所取得的改进,即如果整个程序使用了增强的执行方式,那么这个任务的执行速度会有多少提高,这个值是在原来条件下程序的执行时间与使用增强功能后程序的执行时间之比。原来的机器使用了增强功能后,执行时间等于未改进部分的执行时间加上改进部分的执行时间:

总的加速比等于两种执行时间之比:

2.2 负载均衡

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀地分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。

当用户发现 Web 站点负载量非常大时,应当考虑使用负载均衡技术来将负载平均分摊到多个内部服务器上。如果有多个服务器同时执行某一个任务时,这些服务器就构成一个集群。使用集群技术可以用最少的投资获得接近于大型主机的性能。

2.2.1 负载均衡技术的类型

(1)基于特定服务器软件的负载均衡

很多网络协议都支持 “ 重定向 ” 功能,例如,在 HTTP 协议中支持 Location 指令,接收到这个指令的浏览器将自动重定向到 Location 指明的另一个 URL 上。由于发送 Location 指令比起执行服务请求,对 Web 服务器的负载要小得多,因此可以根据这个功能来设计一种负载均衡的服务器。当 Web 服务器认为自己负载较大的时候,它就不再直接发送回浏览器请求的网页,而是送回一个 Location 指令,让浏览器在服务器集群中的其他服务器上获得所需要的网页。

在这种方式下,服务器本身必须支持这种功能,然而具体实现起来却有很多困难。例如,一台服务器如何能保证它重定向过的服务器是比较空闲的,并且不会再次发送 Location 指令? Location 指令和浏览器都没有这方面的支持能力,这样很容易在浏览器上形成一种死循环。因此这种方式实际应用当中并不多见,使用这种方式实现的服务器集群软件也较少。有些特定情况下可以使用 CGI (包括使用Fast CGI 或 mod_perl 扩展来改善性能)来模拟这种方式去分担负载,而 Web 服务器仍然保持简洁 、 高效的特性。此时,避免 Location 循环的任务将由用户的 CGI 程序来承担。

公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、Java、VB 和Delphi 等。CGI分为标准CGI和间接CGI两种。标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,缓冲程序与CGI接口间用标准输入输出进行通信。

(2)基于 DNS(Domain Name Server,域名服务器)的负载均衡

通过 DNS 服务中的随机名字解析来实现负载均衡,在 DNS 服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的 Web 服务器,从而达到负载均衡的目的。 DNS 负载均衡的优点是简单易行,并且服务器可以位于互联网的任意位置上,当前使用在包括 Yahoo 在内的 Web 站点上。

然而它也存在不少缺点,一个缺点是为了保证 DNS 数据及时更新,一般都要将 DNS 的刷新时间设置得较小,但太小就会造成太大的额外网络流量,并且更改了 DNS 数据之后也不能立即生效;另一个缺点是 DNS 负载均衡无法得知服务器之间的差异,它不能做到为性能较好的服务器多分配请求,也不能了解到服务器的当前状态,甚至会出现客户请求集中在某一台服务器上的偶然情况。

(3)反向代理负载均衡

使用代理服务器可以将请求转发给内部的 Web 服务器,使用这种加速模式显然可以提升静态网页的访问速度。因此也可以考虑使用这种技术,让代理服务器将请求均匀地转发给多台内部 Web 服务器,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部 Web 服务器,而这种代理方式是多个客户使用它访问内部 Web 服务器,因此也被称为反向代理模式。

实现这个反向代理能力并不能算是一个特别复杂的任务,但是在负载均衡中要求特别高的效率,这样实现起来就不是十分简单的事了。每针对一次代理,代理服务器就必须打开两个连接,一个为对外的连接,一个为对内的连接。因此,当连接请求数量非常大的时候,代理服务器的负载也非常大,最后,反向代理服务器会成为服务的瓶颈。例如,使用 Apache 的 mod_rproxy 模块来实现负载均衡功能时,提供的并发连接数量受 Apache 本身的并发连接数量的限制。一般来讲,可以使用它来连接数量不是特别大 、 但每次连接都需要消耗大量处理资源的站点来进行负载均衡,例如搜寻。

使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,以提供有益的性能;其具备额外的安全性,外部客户不能直接访问真实的服务器。并且实现起来可以采用较好的负载均衡策略,将负载非常均衡地分给内部服务器,不会出现负载集中到某个服务器的偶然现象。

(4)基于 NAT(Network Address Translation,网络地址转换)的负载均衡技术

网络地址转换指的是在内部地址和外部地址之间进行转换,以便具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问地址转换网关拥有的某一外部地址时,地址转换网关能将其转发到一个映射的内部地址上。因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后,外部网络中的计算机就各自与自己转换得到的地址上的服务器进行通信,从而达到负载分担的目的。

地址转换可以通过软件方式来实现,也可以通过硬件方式来实现。使用硬件方式进行操作一般称为交换,而当交换必须保存 TCP 连接信息的时候,这种针对 OSI/RM 网络层的操作就被称为第四层交换。支持负载均衡的网络地址转换为第四层交换机的一种重要功能,由于它基于定制的硬件芯片,因此其性能非常优秀,很多交换机声称具备 400MB ~ 800MB 的第四层交换能力;然而也有一些资料表明,在如此快的速度下,大部分交换机就不再具备第四层交换能力了,而仅仅支持第三层甚至第二层交换。

使用软件方式来实现基于网络地址转换的负载均衡则要实际得多,除了一些厂商提供的解决方法之外,更有效的方法是使用免费的自由软件来完成这项任务。其中包括 Linux Virtual Server Project 中的 NAT 实现方式。一般来讲,使用这种软件方式来实现地址转换,中心负载均衡器存在带宽限制,在 100MBps 的快速以太网条件下,能得到最高达 80MBps 的带宽,然而在实际应用中,可能只有 40MBps ~ 60MBps 的可用带宽。

(5)扩展的负载均衡技术

上面使用网络地址转换来实现负载分担,毫无疑问所有的网络连接都必须通过中心负载均衡器,那么如果负载特别大,以至于后台的服务器的数量不再在是几台 、 十几台,而是上百台甚至更多,这时,即便是使用性能优秀的硬件交换机也会遇到瓶颈。此时问题将转变为,如何将那么多台服务器分布到各个互联网的多个位置,分散网络负担。当然这可以通过综合使用 DNS 和 NAT 两种方法来实现,然而更好的方式是使用一种半中心的负载均衡方式。

在这种半中心的负载均衡方式下,即当客户请求发送给负载均衡器的时候,中心负载均衡器将请求打包并发送给某个服务器,而服务器的回应请求不再返回给中心负载均衡器,而是直接返回给客户,因此中心负载均衡器只负责接受并转发请求,其网络负担就较小了。

2.2.2 服务器负载均衡

服务器负载均衡一般用于提高服务器的整体处理能力,并提高可靠性 、 可用性和可维护性,最终目的是加快服务器的响应速度,从而提高用户的体验度。

负载均衡从结构上分为本地负载均衡( Local Server Load Balance )和全域负载均衡( Global Server Load Balance ),前者是指对本地的服务器群做负载均衡,后者是指对分别放置在不同的地理位置 、 有不同的网络及服务器群之间做负载均衡。

全域负载均衡有以下特点: (1)解决网络拥塞问题,服务就近提供,实现地理位置无关性; (2)对用户提供更好的访问质量; (3)提高服务器响应速度; (4)提高服务器及其他资源的利用效率; (5)避免了数据中心单点失效。

关注下面的标签,发现更多相似文章
评论