了解ADC性能指标
简介
应用交付服务对于应用取得成功至关重要。无论是提升可扩展性、可靠性还是安全性,大多数应用都依赖一项或多项此类服务。因此,应用交付控制器(ADC)在大多数应用、云和数据中心设计中都至关重要。
对于包括私有云部署在内的许多环境,专用ADC硬件仍是提供应用交付服务的首选平台。这是因为专用平台采用可控、稳定且一致的资源。专门构建的专用设备在虚拟机监控程序、软件或底层计算平台方面不存在差异,并可利用专用硬件组件分担CPU任务,因此能够持续提供即使要求严苛的应用工作负载也需要的性能和可靠性。
但“性能”究竟指什么?通常,ADC厂商会发布以下4类主要指标来展示性能:
- 每秒请求数(RPS)
- 每秒连接数(CPS)
- 每秒事务数(TPS)
- 吞吐量(通常以千兆比特每秒(Gbps)为单位衡量)
制造商会提供全面的数据表,列出上述及其他平台特性,包括吞吐量、SSL事务数或并发连接数等数据。要选择合适的平台,必须正确解读这些数据及其与应用工作负载的相关性,并了解系统可能存在的限制和瓶颈。学会解读供应商数据表并了解与应用相关的指标,有助于为业务选择更合适的平台。
ADC 有什么作用?
应用交付控制器是一种充当应用代理的基础设施组件,可为应用提供流量管理、负载均衡、SSL解密、应用层安全和访问控制等应用交付服务。客户端设备和服务连接到ADC后,ADC会与应用建立单独的连接(或复用现有连接)。ADC会在这一逻辑间隔中插入应用交付服务。
要了解ADC的工作负载,可以从TCP连接和应用层请求入手。ADC必须在TCP协议栈的多个层执行任务,并完成一系列活动,才能为应用流量提供应用服务。(参见图1。)因此,解读ADC供应商提供的性能指标可能较为困难。要确定哪些指标具有相关性,关键前提是识别工作负载类型。

应用类型多种多样,因此ADC工作负载也各不相同。虽然大多数生产环境部署都包含多种工作负载,但每种工作负载的影响和需求会决定ADC的哪些组件使用率最高。即使在同一组件内,不同工作负载的需求也有所差异。有些工作负载可能对延迟更敏感,有些则对抖动更敏感;有些对吞吐量限制较为敏感,而有些则更依赖可用性。
以下是最常见的工作负载及其关键支持指标:
- 目前,网站和许多移动应用最常使用的工作负载是事务型HTTP Web应用,通常采用SSL和TLS。此类工作负载最重要的指标包括所有SSL指标,即RPS、TPS和吞吐量,以及第7层RPS和CPS。
- DNS是另一种常见工作负载,几乎用于所有互联网交换。DNS使用频繁,但流量较低,通常采用UDP而非TCP部署。因此,最重要的指标是第3层和第4层吞吐量。
- REST API的使用日益广泛,是服务常用的API传输方式。因此,REST API常用于机器间通信。由于REST API基于HTTP,其关键指标与HTTP相同(包括所有SSL指标):RPS、TPS和吞吐量,以及第7层RPS和CPS。
- MQTT是一种新兴的消息传递协议,用途广泛,并在物联网(IoT)通信中得到快速应用。与REST API类似,MQTT主要用于机器间通信应用。MQTT的关键指标是第4层CPS和吞吐量。
- Diameter是RADIUS身份验证协议的替代方案,运行于第4层,并会长时间保持TCP连接。其关键指标包括第4层每秒连接数(CPS)和第4层连接表的稳健性。
- FIX、SAIL和OUCH等金融交易协议对第4层和第7层的延迟都很敏感。因此,其关键指标包括第4层CPS,以及第7层RPS和CPS。
- WebSockets技术是一种相对较新的工作负载类型,服务器可通过持久的第4层和第7层连接主动与客户端通信。关键指标包括第4层CPS、第7层RPS和CPS,以及第4层和第7层连接表的稳健性。
- 日志记录和告警工作负载均在第4层运行,其中一些基于在第7层运行的REST API。因此,关键指标包括第4层CPS;对于基于REST API的工作负载,还包括第7层RPS和CPS。
工作负载组合持续演变,新的工作负载也不断引入。每种工作负载都有根据其主要操作确定的关键ADC指标。

性能指标及其解读方法
任何网络设备的吞吐量都取决于延迟,即处理网络流量所引入的延时。至少,光速决定了电信号通过铜线或光信号通过光纤传输时不可避免的最低延迟。然而,除了通过铜线或光纤传输数据外,ADC还会对网络流量执行多项操作。ADC的最大处理能力取决于各项串行操作(即非并行执行的操作)的延迟总和。许多操作可以并行执行,但执行这些操作所需的时间仍会制约总吞吐量。ADC设计的目标之一是尽可能降低这些延迟,从而提高吞吐量。
评估特定ADC的性能并尝试将其与特定部署相匹配,可能并非易事。网络厂商会根据测试结果发布指标,而这些测试通常旨在牺牲其他指标来尽可能提高某一特定指标。采用这种方法是为了提供可用于指导架构设计和决策的数值,但厂商也清楚,并非所有公布的数值都能同时达到。以汽车为例:丰田宣称其2017款凯美瑞基础车型可输出178马力,高速公路油耗可达每加仑33英里;但如果期望该车在发动机转速达到6,000 RPM并将油门踩到底、输出全部178马力的同时,仍能达到每加仑33英里的油耗水平,显然并不合理。同样,网络厂商也会分别采用各项指标的理想场景来展示其性能。通常,许多已公布的性能指标无法同时复现。
指标与OSI层之间的关系
部分已发布的指标可用于不同的处理层级。例如,每秒请求数可以表示OSI第2层(L2)或OSI第7层(L7)的处理值。另一方面,TPS通常仅指SSL密钥协商,而第7层每秒请求数则指使用已建立的SSL会话进行的后续加密请求。不同工作负载对各个ADC处理组件的使用情况各不相同。关于ADC已发布指标,还需注意一点:不同工作负载会遇到不同的性能限制。

每个OSI网络层都有若干最常公布的指标。例如,第4层指标通常以每秒连接数表示,此外还有衡量第4层吞吐量的其他指标。OSI第5层和第6层难以直接映射到IP协议栈,但SSL/TLS和压缩等服务可视为第5层和第6层。如上所述,这些指标通常使用专门用于对特定指标施加压力的流量进行测试,因此无法代表实际流量负载。例如,使用长度为零的SSL有效负载进行测试时,可测得最高SSL TPS,因为ADC无需花费处理时间来解密SSL数据。这种方法仅用于确定SSL硬件性能时尚属合理,但生产应用不会发送长度为零的有效负载。同样,第2层吞吐量测试会在未启用SSL且不进行第7层处理的情况下执行,因为这些功能会降低ADC的处理速度,尽管许多生产部署会使用这些功能。大多数ADC指标均单独测试,但大多数生产环境会组合使用多种ADC功能,而每项指标会对不同组件或组件组合施加压力。涉及的组件可能包括CPU、网络接口卡(NIC)、专用集成电路(ASIC)和现场可编程门阵列(FPGA)等。如果ADC缺少某个特定组件,则改用CPU。

数据包指标表示ADC每秒可处理的数据包数量,而在不同层进行处理时,承受主要压力的组件也有所不同。例如,处理第2层数据包时,主要承受压力的是网络接口卡(NIC);处理第4层数据包时,主要承受压力的是FPGA。各层的吞吐量指标是指总可用吞吐量,单位为Gbps;连接数指标则衡量相应层每秒可建立的连接数量。例如,第4层连接数指标衡量每秒可建立的TCP连接数量。
SSL处理指标
SSL处理的独特之处在于,会话跨连接建立和管理。一个连接可以建立SSL会话(称为事务),后续连接则可以复用该SSL会话(称为请求)。因此,事务指标和请求指标会分别列出。SSL事务所需的时间远长于后续SSL请求,因此吞吐量性能的限制因素通常是事务指标。建立SSL会话并发出后续请求后,必须对数据负载进行加密或解密。加密ASIC负责加密和解密,其性能通过吞吐量指标来衡量。
通常,压缩数据有效载荷会很有帮助。压缩由压缩ASIC执行,其衡量指标也是吞吐量。
应用层处理
最后,第7层的独特之处在于,由于可用的流量管理选项复杂多样,所有第7层处理均由CPU执行。Cookie持久性是一项常见的第7层功能,可将每个用户会话绑定到池中的特定服务器,并由CPU执行。第7层请求指标是指ADC每秒可处理的第7层请求数。同样,第7层吞吐量指标是指第7层可实现的总吞吐量。
最后,任何需要保留连接状态的层都要求ADC维护连接表。连接表常用于第4层TCP连接、SSL会话和第7层HTTP会话。采用长连接的协议可能会耗尽ADC连接表的容量或使其承受较大压力。
每项指标都有助于衡量性能的某个特定方面。了解各层执行的不同操作以及这些操作会影响哪些组件,有助于评估特定部署的ADC性能指标。
专用硬件与性能
ADC的各项功能都可以由CPU提供。事实上,许多ADC硬件厂商也提供纯软件版本。这是因为CPU是目前灵活性很高的一类硬件,几乎可以执行任何以数据为中心的任务。
不过,将ADC的所有功能都交由CPU处理也有其局限。在处理网络流量的三种主要硬件类型(CPU、ASIC和FPGA)中,CPU速度最慢,而且由于需要内存和内存控制器的支持,可以说成本也最高。另外两种用于处理网络流量的硬件是ASIC和FPGA。ASIC专为执行特定任务而设计,其名称也由此而来。在执行特定任务时,ASIC的速度快于其他任何硬件类型,但其能力仅限于芯片设计中包含的功能。如果应用需要ASIC不具备的能力,则必须改用CPU,通过软件执行相关任务。
如果说CPU灵活但速度较慢,而ASIC速度快但缺乏灵活性,那么第三种技术FPGA则介于两者之间。FPGA的速度低于ASIC,但远高于CPU,并且可通过编程执行FPGA设计人员未曾预想到的任务。

设计合理的ADC会充分发挥每种硬件的能力:由ASIC组件处理常见且简单的任务,由FPGA组件执行更复杂的任务,并由CPU处理最复杂且最少见的任务。ADC的许多工程巧思都源于对不同类型组件的协调,使其能够高效处理各种工作负载。
ADC执行频率最高的任务是网络接口处的数据包处理。标准的现成NIC通常针对大流量入站通信(例如桌面设备或其他用户设备)或大流量出站通信(例如服务器)进行调优。ADC的独特之处在于,它需要针对双向最大吞吐量进行调优的NIC。目前没有任何现成NIC是为实现双向最大吞吐量而设计的。由于ADC数据包处理频繁且任务相对简单,因此非常适合由ASIC执行。在集群ADC环境中,分流器(DAG)ASIC充当前端负载均衡器,确保同一客户端和服务器会话始终流经同一集群节点。在集群环境中使用DAG,有助于对ADC设备进行横向扩展,以满足流量需求。在设计合理的ADC中,所有第2层数据包处理和交换均可由专用ASIC硬件执行。
第3层和第4层处理任务更为复杂,因此非常适合由FPGA执行。FPGA可提供路由功能以及防火墙和分布式拒绝服务(DDoS)防护,包括TCP SYN Cookie。在这一层使用FPGA可实现第4层处理和防护,确保需要进一步处理的流量已正确重组并经过过滤。
加密和压缩处理(如SSL或TLS),以及HTTP/2引入的新功能,也是专用硬件的应用场景。密码处理通常会使用专用ASIC,包括现代密码套件中计算密集型的SSL密钥协商,例如椭圆曲线Diffie-Hellman临时密钥交换(ECDHE)。完成SSL密钥协商后,后续请求的批量加密和解密也可由ASIC硬件处理。同样,ASIC硬件也可使用常见算法执行压缩和解压缩。使用专用ASIC组件可实现快速的加密和压缩处理。
ASIC和FPGA未处理的其余网络流量必须由CPU处理。虽然CPU的处理速度比ASIC和FPGA慢,但它是ADC中最灵活的组件。CPU还负责与网络处理无关的任务,例如运行GUI、执行其他配置任务、处理I/O中断,甚至处理磁盘请求。由于CPU的负载可能随延迟而变化,并且CPU是处理网络流量的最后一类硬件,因此ADC在设计上会尽量减少由CPU处理的流量,转而尽可能使用速度更快的ASIC和FPGA进行处理。
结论
要根据供应商公布的指标判断实际性能并非易事。虽然不同类型的工作负载、其消耗的资源以及硬件平台的能力之间关系复杂,但了解这些因素如何相互影响,有助于贵组织做出合适的采购决策。
已发布的数据表和其他资源有助于更轻松地确定合适的平台,但在条件允许时,直接借助供应商的经验和专业知识也很重要。经验丰富的供应商通常深谙如何根据工作负载匹配平台,并应随时为客户提供这方面的专业支持。
充分了解应用流量特征和平台能力,并结合供应商的专业知识,有助于降低平台配置不足或过度配置的风险及潜在成本。
发布于2017年3月28日
