应用交付控制器的演进

简介

在当今瞬息万变的世界中,组织始终面临着向全球数百万用户交付关键应用的挑战。部署网络和应用服务,使应用具备可扩展性、安全性和可用性至关重要。这正是应用交付控制器(ADC)不断演进的主要原因之一。然而,要实现这些功能,离不开基础负载均衡技术的坚实支撑。接下来,我们将从了解负载均衡的重要性入手,探讨它如何提高应用交付效率,以及ADC如何持续演进并适应云优先的世界。

负载均衡需求的驱动因素

负载均衡的目的,是在多台物理服务器之间均衡分配传入的网络或应用流量,同时让这些服务器在外部看来如同一台服务器。这样做有很多原因,但主要驱动因素是对“可扩展性”“高可用性”和“可预测性”的需求。

可扩展性是指在不影响现有性能的情况下,动态或轻松适应负载增长的能力。高可用性(HA)则是指即使一个或多个系统发生故障,站点仍能保持可用且可访问的能力。服务虚拟化(模拟软件组件的行为,以加快应用开发和测试)为提升可扩展性和可用性提供了一个值得关注的机会。如果将服务或用户接触点与实际服务器分离,就可以通过增加服务器来扩展应用。此外,单台服务器发生故障不会导致整个应用不可用。可预测性的含义不太明确,因为它既涵盖高可用性的部分要素,也包含实践过程中总结的一些经验。就可用性和性能而言,可预测性可以理解为对服务交付方式和时间的掌控能力。

负载均衡:历史视角

早在商业互联网兴起之初,许多怀揣致富梦想的互联网创业者就发现,他们的计划面临一个严重问题。当时,大型机还没有Web服务器软件(至少在AS/400e问世之前如此);即使有,初创企业的预算也负担不起。他们能买得起的,是随处可见的PC制造商提供的标准现成服务器硬件。但其中大多数产品都有一个主要问题:单台基于PC的服务器根本无法处理其业务可能产生的流量。一旦服务器发生故障,业务就会下线,企业也将无法运营。幸运的是,有些人打算通过解决这一难题来创造财富,负载均衡也由此诞生。

最初,只有DNS

在商用专用负载均衡设备问世之前,人们曾多次尝试利用现有技术来实现可扩展性和可用性目标。其中应用最广泛且沿用至今的技术是DNS轮询。

采用这种方法时,DNS会在同一DNS名称下为不同服务器分配多个唯一的IP地址。这意味着,当用户首次请求解析“www.example.com”时,DNS服务器会将每个新连接依次转发给队列中的服务器,直到最后一台服务器,然后再从第一台服务器重新开始。这种解决方案简单易行,可将连接均匀分配到一组计算机上。

图 1:用于实现冗余的基本 DNS 响应。

从可扩展性来看,该解决方案表现出色,因为它几乎可以为一个DNS名称添加不限数量的服务器。但在可用性方面,该解决方案存在障碍,因为DNS无法判断列出的服务器是否正常运行。如果某台服务器不可用,而用户尝试访问该服务器,请求可能会被发送到这台已停机的服务器。

推动采用DNS轮询的另一个因素是可预测性,即能够高度确信用户会被定向到特定服务器。这主要涉及会话持久性,也就是确保会话开始后,或用户恢复之前暂停的会话时,不会通过负载均衡将用户分配到新的服务器。这是DNS轮询无法解决的一个重要问题。

软件中的专有负载均衡

为解决这一问题,早期专门构建的解决方案之一,是将负载均衡直接集成到应用软件或应用服务器的操作系统(OS)中。不同公司开发的实现方式各不相同,但大多数解决方案都采用了基本的网络技术。例如,其中一种解决方案会为池(也称为集群)中的所有服务器配置一个共用IP地址,同时每台服务器仍保留各自的物理IP地址。

图2:专有服务器池IP负载均衡。

当用户尝试连接服务时,他们连接的是池IP,而不是服务器的物理IP。池中最先响应连接请求的服务器会将用户重定向到一个物理IP地址(可以是该服务器自身的地址,也可以是池中其他系统的地址),随后服务会话便会启动。此解决方案的一项主要优势是,应用开发人员可以利用多种信息来确定客户端应连接到哪个物理IP地址。例如,可以让池中的每台服务器记录各池成员当前正在处理的会话数,然后将所有新请求定向到利用率最低的服务器。

起初,这种解决方案的可扩展性显而易见。只需构建一台新服务器并将其添加到池中,即可提升应用容量。然而,随着时间的推移,基于应用的负载均衡能否有效扩展开始受到质疑。由于池成员需要持续相互通信,以确定下一个连接应由哪个成员处理,因此池中每增加一台新服务器,池成员之间的网络流量都会呈指数级增长。当池扩展到一定规模(通常为5–10台主机)后,这些流量便开始影响最终用户流量以及服务器自身的处理器利用率。因此,只要服务器数量保持在较小范围内,这种方案的可扩展性就很出色(顺带一提,其可支持的服务器数量还少于DNS轮询)。

DNS轮询和软件负载均衡显著提升了高可用性。由于池成员之间持续通信,并且应用开发人员可以凭借对应用的深入了解来判断服务器是否正常运行,这些解决方案几乎消除了用户连接到无法处理其请求的服务器的可能性。但必须指出的是,每次增强高可用性功能的智能化,都会相应增加服务器和网络资源利用率,从而进一步限制可扩展性。高可用性受到的另一项负面影响体现在可靠性方面。这些系统用于分配流量的许多网络技术都很复杂,需要进行大量网络层监控。因此,这些分配方法经常出现问题,影响整个应用以及应用网络上的所有流量。

这些解决方案还提高了可预测性。应用设计人员了解何时以及为何需要将用户请求返回到同一台服务器,而不是进行负载均衡,因此可以嵌入相应逻辑,帮助确保在需要时保持用户会话持久性。他们还使用相同的“池化”技术在服务器之间复制用户状态信息,从而消除了许多原本需要保持会话持久性的情况。最后,凭借对应用的深入了解,他们能够根据应用的实际健康状况来开发负载均衡算法,而不是依据连接数等指标,因为这些指标并不总能准确反映服务器负载。

除了在真正实现可扩展性方面可能存在局限和可靠性问题外,基于专有应用的负载均衡还有一个缺点:它依赖应用供应商进行开发和维护。主要问题在于,并非所有应用都提供负载均衡(或池化)技术;即使提供,这些技术通常也无法与其他应用供应商提供的技术协同工作。虽然有多家组织开发了供应商中立的操作系统级负载均衡软件,但遗憾的是,这些软件也存在同样的可扩展性问题。此外,由于未与应用紧密集成,这些软件“解决方案”还面临更多高可用性挑战。

基于网络的负载均衡硬件

第二代专用负载均衡以基于网络的设备形式出现,奠定了当今应用交付控制器的基础。这些设备在物理上独立于应用本身。虽然最初用作负载均衡器,但它们采用NAT等更直接的网络技术来实现负载均衡。这些设备会向外部提供一个虚拟服务器地址;当用户尝试连接时,设备会将连接转发到最合适的真实服务器。

图3:使用网络硬件实现负载均衡。

负载均衡器可以精确控制由哪台服务器接收哪个连接,并采用日益复杂的“健康监控器”,确保应用服务器(真实的物理服务器)按要求响应。如果服务器未能正确响应,负载均衡器会自动停止向该服务器发送流量,直至其返回预期响应。尽管这些健康监控器通常不如应用开发人员自行构建的监控器全面,但基于网络的硬件方案可以采用统一、一致的方式,为几乎所有应用提供基本的负载均衡服务,最终为应用服务器创建真正虚拟化的专用服务入口点。

从可扩展性角度来看,开始使用硬件解决方案取代软件负载均衡的组织发现,服务器利用率大幅下降。这使其短期内无需购买更多服务器,并有助于长期提高投资回报率。

同样,HA有助于降低解决方案的复杂性,并提供不受应用限制的负载均衡,从而提高可靠性并增强解决方案的能力。基于网络的负载均衡硬件让企业能够为所有应用提供高可用性,而不再局限于少数内置负载均衡功能的应用。

基于网络的负载均衡硬件带来的一项核心能力是可预测性。现在,新连接将被定向到何处更容易预测,也更容易控制。这些设备为该过程增添了智能,有助于实现可控的负载分配(不同于动态DNS的不可控分配)。因此,企业所有者可以根据服务器的负载处理能力,将负载分配到相应的服务器。

基于网络的负载均衡器和虚拟化技术的出现,为安全和管理带来了新的优势,例如向互联网用户隐藏应用服务器的身份,以及将连接从服务器逐步迁出,以便在不影响用户的情况下使服务器离线维护。这正是应用交付控制器(ADC)的起源。

应用交付控制器

集中式负载均衡功能同时也是全代理,为IT叠加和整合新兴服务提供了理想基础。因此,负载均衡设备逐步演变为可扩展的ADC平台。简而言之,代理是负载均衡的基础,也是实现ADC的底层技术。

谈到ADC安全性时,由代理(基础技术)实现的虚拟化至关重要。无论是SSL/TLS加密卸载、集中式身份验证,还是应用感知型防火墙,这些解决方案的优势都源于负载均衡器(硬件版或虚拟版)是所有应用的统一虚拟化汇聚点。集中式身份验证就是一个典型示例。传统的身份验证和授权机制一直直接内置于应用本身。与基于应用的负载均衡类似,每种实现都依赖于相应应用的具体实现,并且各不相同,因而产生了多种不同的方法。相比之下,在所有应用的虚拟化入口点实施身份验证,即可采用单一、统一的身份验证方法。这不仅大幅简化了身份验证系统的设计和管理,还免除了应用服务器执行此功能的需要,从而提升应用服务器本身的性能。此外,这也无需再为每个应用单独投入时间和资金来开发身份验证流程,对自主开发的应用尤其如此。

可用性是最容易追溯到早期负载均衡器的ADC属性,因为它与负载均衡器的所有基本属性都相关,包括可扩展性、高可用性和可预测性。不过,ADC在这方面比负载均衡器更进一步。对ADC而言,可用性还涵盖应用依赖关系和动态配置等高级概念。ADC能够识别出,如今的应用很少独立运行,通常需要依赖其他应用来实现其设计目标。ADC将这些其他流程也纳入考量,从而增强了保障应用可用性的能力。市场上功能较为先进的ADC还提供编程接口,可根据外部输入动态调整服务提供方式。这些接口支持动态配置,以及云和容器化部署等现代环境所需的自动扩缩容。

性能提升是负载均衡概念的另一个自然延伸。负载均衡器不仅会将连接定向到可用且能在可接受时间内响应的服务,还会将其定向到连接数和/或处理器利用率最低的服务,从而提升应用性能。这可确保每个新连接都由最有能力处理它的系统提供服务。后来,随着使用专用硬件的SSL/TLS卸载成为负载均衡产品的常见功能,加密流量带来的计算开销和后端服务器的负载得以降低,后端服务器的性能也随之提升。

如今的ADC更进一步。这些设备通常包含缓存、压缩甚至速率整形技术,可进一步提升应用的整体性能和交付效率。此外,ADC不再像传统独立设备那样以静态方式提供这些服务,而是可以利用自身的应用智能,仅在这些服务能够带来性能提升时才加以应用,从而优化其使用。

例如,与普遍看法不同,压缩技术不一定能让应用的所有用户受益。对于带宽较低的用户,实际吞吐量是瓶颈,因此较小的数据包可以带来显著改善。即使连接需要跨越很长距离,也能从中受益,因为较小的数据包意味着传输数据所需的往返次数更少,从而降低网络延迟的影响。然而,对于带宽较高的短距离连接(例如同一大洲内的连接),应用压缩反而可能降低性能。由于吞吐量不一定是瓶颈,压缩和解压缩产生的额外开销会增加延迟,而吞吐量的提升不足以从性能角度抵消这一影响。换言之,如果管理不当,压缩技术这一解决方案带来的问题可能比原有问题更严重。但ADC可以仅在压缩有助于提升整体性能时智能应用压缩,从而优化压缩技术的使用及其成本,并将更多处理器周期留给能够更充分利用这些资源的功能。

世界的发展方向

数字化转型是一项至关重要的战略任务,因此许多企业已开始踏上云端之旅。随着应用数量不断增加并改变着我们周围的世界,人们普遍认为,迁移到云端的组织将获得诸多优势,例如提高敏捷性、使运营成本更符合业务需求、实现按需扩展,以及更加专注于核心业务。

“云”并不是由共享计算、存储和网络资源构成的单一无形实体,而是由提供商、基础设施、技术和环境复杂组合而成,通常部署在全球多个节点。因此,许多企业实际上已将应用部署到多个不同的云环境中,包括公有云、私有云以及二者的组合。这就是多云:新的现实。

即使云环境在快速演变,仍有多项因素阻碍云采用。首要挑战是多云无序扩张:现有应用通过“直接迁移”方式上云,而“云原生”应用的部署则缺乏规划和管理。此外,为满足短期需求,组织往往会采用彼此独立的云平台、不同的架构、各异的应用服务以及多套工具。这导致整个企业的架构日趋复杂,使应用从一个环境迁移到另一个环境变得更加困难,成本也更高。

图3:每种云架构在运行方式、管理方式和可见性级别方面都各不相同。

尽管面临这些挑战,未来几年,公有云和私有云内部及跨云的新部署仍将不可避免地增加。多云时代正迅速到来,企业应部署智能应用服务和应用交付控制器(ADC),不再局限于支持少量应用,也不再只能在硬件和单一云环境中运行。

总结

应用交付控制器(ADC)是传统负载均衡器所占据的关键网络位置的自然演进。尽管ADC在很大程度上源自这些早期设备,但它们已发展为一种全新的设备,不仅提供可用性,还兼顾性能和安全性。顾名思义,ADC涵盖应用交付的各个方面,旨在以更优方式交付应用。

现代ADC具备应用智能、SSL卸载和编程接口等高级功能,可帮助组织扩展业务,随时随地触达用户。面对技术领域不断变化的需求,ADC也能更好地适应多云和容器环境中的新技术。

总而言之,可以肯定地说,ADC不仅将成为应用交付的主要通道和集成点,帮助实现更快速、更智能、更安全的应用交付,还将持续演进,拥抱云优先的世界。

发布于2017年9月10日